facebook twitter hatena line google mixi email
★お気に入り追加


  • 1
  •  
  • 2010/04/09(金) 15:12:36
クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)についてのスレ。

本家
ttp://www.wxwidgets.org/
wxWindows日本語プロジェクト
ttp://wxwindowsjp.sourceforge.jp/
Cross-Platform Programming with wxWidgets
ttp://wxwidgets.info/
Let's wxWidgets
ttp://dot-gray.s33.xrea.com/
wxWindowsで始めるC++ GUIプログラミング
ttp://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
ttp://0xcc.net/pub/uu-2004-08/

前スレ
【GUI】wxWidgets(旧wxWindows) その4【サイザー】
http://pc12.2ch.net/test/read.cgi/tech/1214657360/

ここまで見た
  • 599
  •  
  • 2013/12/29(日) 12:26:46.93
>>598
う〜ん、メニュー上での右クリックは悲しいことにできなさそうね

[wx-users] Trapping wxMouse events over wxMenus
https://groups.google.com/d/msg/wx-users/xAGPwk-f9Ao/0BGV9JD55L4J

この会話の中で、Vadimさん(wxWidgetsのコミッタ)が無理やでとか言ってる
メニューの項目の中で右クリックするとイベントはメニューのほうに行ってしまう
から、そのイベントをつかむのは無理だと。
で、それはWindowsとGTKのネイティブ実装がそうなっているから。

> Ideally, I would like to be able to left-click and
> right-click WITHOUT the menu disappearing.
This is impossible under the two main platforms: MSW and GTK. Menus grab
the mouse when popped up (down?) and so all mouse events go to them.

ここまで見た
  • 600
  •  
  • 2013/12/29(日) 12:34:09.46
いや、ちょっと違うか
メニューの右クリックイベントは掴めるけど
その時呼び元のメニューの項目が消えるといってるのか

その解決策としてはwxMenuを使わずに
menuのウィジェットを自分でエミュレートするしかないとのこと

ここまで見た
  • 601
  •  
  • 2013/12/29(日) 13:16:30.36
>>599-600
ありがとうございました。
wxMenu を流用できないのは残念ですが、
これで踏ん切りがつけたので、 wxListCtrl を使ったものを試そうと思います。

引き続き、wxListCtrl のような wxControl 派生に対して
wxMouseEvent 系のイベントをつける方法を求めていますので
何か参考になることがありましたらよろしくお願いします。

ここまで見た
  • 602
  •  
  • 2014/01/27(月) 14:20:14.73
了解

ここまで見た
  • 603
  •  
  • 2014/01/27(月) 14:35:57.41
>>601 です。 >>596 について進展したので参考になればと思い報告します。

メニューアイテムの上で右クリックしてポップアップメニューを表示することが可能なクラスが wxPython にありました。
wx.lib.agw.flatmenu がまさにぴったりのクラスでした。
RIGHT_UP のイベントはありませんが、 FlatMenuItem::SetContextMenu(FlatMenu) で >>596 でしたいことが簡単にできます。
自作のために PopupWindow あたりを調べているときに見つけました。

また何かありましたらよろしくお願いします。

ここまで見た
  • 604
  •  
  • 2014/02/26(水) 17:32:22.79
サンプルが多すぎて逆にわからないのですが、
ランタイム時にGUIパーツを生成消滅させることって可能ですよね?
例えばユーザが読み込んだファイルによってボタンの数を変化させるなど

ここまで見た
  • 605
  •  
  • 2014/02/26(水) 17:48:08.47
マジレスすると
出来ますよ

ここまで見た
  • 606
  •  
  • 2014/02/26(水) 18:02:12.58
ありがとうございます
関連するサンプルなどありましたら教えていただけると幸いです

ここまで見た
  • 607
  •  
  • 2014/02/26(水) 18:06:08.80
きっと君のHDD(SSD)に既に入ってるよω

ここまで見た
  • 608
  •  
  • 2014/02/26(水) 18:19:55.82
そうなんですよね〜でもsample多くてどっから見ればよいか、という感じです
まあできるということがわかればとりあえず見て回ります

ここまで見た
  • 609
  •  
  • 2014/02/26(水) 18:34:00.97
チュートリアルで最初の方から見ればすぐ出ると思う。

ここまで見た
  • 610
  •  
  • 2014/02/26(水) 18:38:10.36
デモ実行してみて自分の欲しい機能と似たものを見つけたら「ソースを見る」をクリック。

ここまで見た
  • 611
  •  
  • 2014/02/26(水) 18:44:29.66
すいません、見てるものが違うかもしれないので確認させてください
チュートリアルとは何を指してますか?
デモはdemosフォルダの中にあるプロジェクトですよね?「ソースを見る」とはなんでしょうか?

ここまで見た
  • 612
  •  
  • 2014/02/26(水) 18:48:03.88
ごめん。
見てるものが違った。
wxPython の方見てた。

ここまで見た
  • 613
  •  
  • 2014/02/26(水) 18:53:20.95
wxPythonのDemo見て目星を付けて
wxPythonのソースを参考にwxWidgetsでCソース書くのもあり

ここまで見た
  • 614
  •  
  • 2014/02/26(水) 19:08:22.51
なるほど
wxPythonでコードを書いたものがC++に直接変換できたりしたら便利ですね
wxGladeみたいに

ここまで見た
  • 615
  •  
  • 2014/02/26(水) 20:20:43.75
なんか久しぶりにwxスレが伸びてるぞ、新規ユーザー大歓迎
ボタンとかテキストエリアの動的な生成は、wxPanelとかwxSizerを使った簡単なサンプルを作ったら理解できると思う
言葉で説明するよりコード書いたほうがよいけど一応書いとく

例えばボタンを生成・削除しようとする場合
親Panelをparent, 子panelをchildとすると

1. ウィジェットの生成:parentをnewして、必要な分だけchildをnew
child = new wxPanel(parent, …);
...

2. ウィジェットの削除:parent.DestoryChildren();
この関数で子ウィジェットを全部きれいに削除できる

説明の意味がわからなければ、まずは適当なチュートリアルサイトに行くべし
おすすめ
http://zetcode.com/gui/wxwidgets/

ここまで見た
  • 616
  •  
  • 2014/02/26(水) 20:22:35.51
>>614
慣れたら直接C++で書けるから多分コンバータは需要無いよ

ここまで見た
  • 617
  •  
  • 2014/02/26(水) 20:29:50.32
>>615
詳しくありがとうございます
拝見致します

>>616
wxGladeも要りませんかね?
フローはwxGladeで枠を作って機能をC++で書く感じになるのかと

ここまで見た
  • 618
  •  
  • 2014/02/26(水) 20:30:17.32
そのくらい wx は良く出来てるね。

ここまで見た
  • 619
  •  
  • 2014/02/28(金) 21:18:50.52
Qt以下の品質。gtkならcで書けた。

ここまで見た
  • 620
  •  
  • 2014/03/01(土) 00:37:16.59
そらQtのほうがメジャーやろ、死ね

ここまで見た
  • 621
  •  
  • 2014/03/01(土) 01:40:12.84
どっちも1992年頃にできた。OSSといえども商業的な成功がコミュニティ形成の鍵。
それ以外はGood Oldを懐かしむロートルか宗教的価値観に支えられているだけ。

ここまで見た
  • 622
  •  
  • 2014/03/01(土) 01:51:22.19
GUI比較スレってなんだよね・・・
比較的な話ってここで展開してもよいものやら
というかwxWidgetとQtどっちも使ってる人っているのか

ここまで見た
  • 623
  •  
  • 2014/03/01(土) 02:28:31.91
世の中のアプリケーションはQtかAwt/Swingが採用される流れ。
直交性ならgtk。サクッと安定したものを書くならtk。
トイプログラムならSDL+OpenGL。生きるとは残酷なことである。

ここまで見た
  • 624
  •  
  • 2014/03/01(土) 12:13:44.67
バイナリサイズでかいですな
VC2010でサイズ最適化オプションかけてもHelloWorldで5MB...
これはもうどうしようもない感じ?

ここまで見た
  • 625
  •  
  • 2014/03/01(土) 12:23:48.03
どうしようもないっす
ベース部分(wxStringとかwxWindowとか)の定義が容量食ってるから?ではないかという疑惑

ここまで見た
  • 626
  •  
  • 2014/03/01(土) 12:27:18.78
うーんなるほど
ランタイムで色々判断出来るような設計なんですかねえ

ここまで見た
  • 627
  •  
  • 2014/03/01(土) 12:32:32.69
そうですねwxWidgetsはRTTIの仕組みが活かされてるみたいなドキュメントはどっかで見た
たぶんwxWidgetsの中核であるwxWindowクラスはそんなんばっかしなんだろう

ここまで見た
  • 628
  •  
  • 2014/03/05(水) 12:40:46.24
ファイル操作系が異様にやりにくい
wxString dir_name("some directly name");
dir_name.Traverse(some_traverser,wxString(""),flags);
でディレクトリたどりながらファイル抽出できるかなとおもったが
flags = wxDIR_FILES
だとそのディレクトリの中身”のみ”探す
flags = wxDIR_DIRS
だとその下の”全ての”階層のディレクトリを抽出する
wxDIR_DEFAULT
だとその下の”すべての”ファイルを探す
なんでこんな仕様なんだ

ここまで見た
  • 629
  •  
  • 2014/03/05(水) 12:45:32.18
ああわかった
ディレクトリが見つかった場合のみその下も探す、ということなんだな
するとファイルのみだと当然下なんぞ無いからそれ以下を探すことはなく
ディレクトリのみ、とすると下にもいけるから最下層まで探そうとするわけか
うーん

ここまで見た
  • 630
  •  
  • 2014/03/05(水) 12:55:52.46
連投失礼
Traverserクラスを継承してそのOnDir関数の返り値で制御すればいいということでした

ここまで見た
  • 631
  •  
  • 2014/03/11(火) 15:51:27.09
浮動小数点を扱えるsliderってデフォルトではなさそうですか?

ここまで見た
  • 632
  •  
  • 2014/03/11(火) 17:23:40.57
たとえば 0 - 100 を 10 で割ると
0.0 - 10.0 のレンジになります

ここまで見た
  • 633
  •  
  • 2014/03/11(火) 17:30:20.25
やっぱそんな感じなんすね
最大値最小値現在値ラベル表示が便利だなーとおもったんですが、小数点付きでやろうと思ったら
自分でラベル付けるしかなさそうですね

ここまで見た
  • 634
  •  
  • 2014/03/15(土) 21:45:40.12
右側のボタンを押したら左側のパネルを再描写させたい、など
あるイベントから(親でない)ほかのイベントを誘発させたい時ってあると思うのですが
その辺に関する記事てどっかにあります?

ここまで見た
  • 635
  •  
  • 2014/03/15(土) 23:13:55.37
>>634
そのへんはイベント処理の領域になりますね
wxWiki見るしかない感じ

イメージとしては
Sample::LeftPanelRedraw(wxCommandEvent& event);
というイベント関数のIDがID_LeftPanelRedrawであった場合

そのイベントは
wxCommandEvent e(wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, ID_LeftPanelRedraw));
LeftPanelRedraw(e);
で呼べる

ここまで見た
  • 636
  •  
  • 2014/03/15(土) 23:39:19.87
>>635
了解です、参考にさせていただきます

ここまで見た
  • 637
  •  
  • 2014/03/21(金) 12:58:58.01
わかりました
wxWindowBase::wCaptureMouse()を呼び出すと以降座標とイベントが取得されるようです

ここまで見た
  • 638
  •  
  • 2014/03/23(日) 17:51:04.60
はい。知ってますよ。

ここまで見た
  • 639
  •  
  • 2014/03/23(日) 19:26:21.87
いや、知らないです

ここまで見た
  • 640
  •  
  • 2014/05/12(月) 21:36:09.61
クロスプラットフォームの開発環境について調べてるんですが、wxWidgetsの
GUIは外観とかは各プラットフォームのものが使われるんですか?それとも
独自のテーマになってしまうんでしょうか?

ここまで見た
  • 641
  •  
  • 2014/05/12(月) 21:48:19.14
>>640
各プラットフォームのものが使われます
つまりWindowsならWIN32、LinuxならGTK、MacならCocoa
それぞれの外観になります

対してQtやTk、JavaのSwingなどは独自のテーマになります

ここまで見た
  • 642
  •  
  • 2014/05/12(月) 21:58:07.29
Qtってそうだったんだ

ここまで見た
  • 643
  •  
  • 2014/05/12(月) 22:57:11.37
>>641
ありがとうございます。他の環境まで概括してくださるとは助かりました。

ここまで見た
  • 644
  •  
  • 2014/05/13(火) 02:25:29.32
>>640
敢えてプラットフォームのを使わず
テーマ選ぶ方法もあったはず

ここまで見た
  • 645
  •  
  • 2014/05/23(金) 01:42:23.54
wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、
wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。
これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。

ここまで見た
  • 646
  •  
  • 2014/06/03(火) 09:02:12.18
Swiftスレ
http://peace.2ch.net/test/read.cgi/tech/1401736341/

ここまで見た
  • 647
  •  
  • 2014/06/04(水) 21:33:25.19
いまこのスレ開いたら、>>645にあったはずの有益な書き込みが消えている…
貼っておこう

> 646 名前:デフォルトの名無しさん [sage]: 2014/05/23(金) 01:42:23.54 ID:NdcsMWjh
> wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、
> wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。
> これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。

ここまで見た
  • 648
  •  
  • 2014/06/05(木) 01:15:41.59
なんと、板移転したときに消えたのかもしれないね。

ここまで見た
  • 649
  •  
  • 2014/06/19(木) 12:54:27.42
wxWidgetsを使って作られたプログラムの一覧ってあったりするのかね?
とりあえずAudacityは知ってる

ここまで見た
  • 650
  •  
  • 2014/06/19(木) 19:37:20.57
http://www.wxwidgets.org/about/screenshots/
とか

砂時計アラームタイマー
フリックラーニング
ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email
おすすめワード