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/

ここまで見た
  • 741
  •  
  • 2014/09/03(水) 08:47:34.91
久しぶりに2ちゃん観に来たら
wxのスレめっちゃ野比てて嬉しい

ここまで見た
  • 742
  •  
  • 2014/09/03(水) 14:50:56.74
wx のソースを修正したら、wxString() を使った最小サンプルが、
静的リンクしても 70KB で済むようになった。

PATHには、MInGW/bin しか設定せずにテストしているので、wx の DLL
がリンクされている可能性は無く、間違いなくスタンド・アローンの
プログラム。

ちなみに、wx のソースを修正しなければ、451,584 バイトになってしまう。
>>729 に書いたものとほぼ同じプログラムだから。

ここまで見た
  • 743
  •  
  • 2014/09/03(水) 15:05:09.35
wxというよりgccとライブラリのお話で伸びている

ここまで見た
  • 744
  •  
  • 2014/09/03(水) 16:58:33.04
>>742
dllの依存関係すらまともに調べられないのか
dependency walkerとかobjdumpとか使え

ここまで見た
  • 745
  •  
  • 2014/09/03(水) 17:02:39.87
mingw入ってるならlddコマンドでもいける>依存動的ライブラリ

ここまで見た
  • 746
  •  
  • 2014/09/03(水) 18:30:34.52
ただ、パス設定を空にして起動できるかどうか見るのも1つの確実な方法。

ここまで見た
  • 747
  •  
  • 2014/09/04(木) 03:37:02.91
性格悪いな。
コンピュータ・ソフト関連の人って。

ここまで見た
  • 748
  •  
  • 2014/09/04(木) 17:23:39.03
GUIアプリのサイズ縮小を試みていたが、断念するかも知れない。

ここまで見た
  • 749
  •  
  • 2014/09/04(木) 18:46:24.22
△性格が悪い
○無駄が嫌い
◎無駄な事をしてる奴が嫌い

ここまで見た
  • 750
  •  
  • 2014/09/05(金) 15:14:57.29
>>749
何も悪いことをせず、自分にも害を与えない人を嫌うのが性格が悪いんだよ。

ここまで見た
  • 751
  •  
  • 2014/09/05(金) 15:46:20.79
公園の蚊を駆除するのに外側からじゃなくて内側から始めるとかが無駄
自分にも危害が及ぶので嫌

ここまで見た
  • 752
  •  
  • 2014/09/05(金) 17:37:07.79
>>749>>750
言われた側が一方的に立場が悪くなるという効能は興味深いと思う
言ったもん勝ちという現象は絶対にあるのだ
>>751
生死にかかわる難しい判断を
「無駄なこと」に無理やりおしこめた詭弁
物事を矮小化させる効果もある

ここまで見た
  • 753
  •  
  • 2014/09/05(金) 18:18:43.88
>>751
正直言って、今回のこととの関連も分からない。
それ以前に外側から、内側から、ということの意味が全く分からない。
まるで会話ロボットが生成した文書のようだ。

>>752
この文書も意味不明。人間が書いたとは思えない全く理解できない文書だ。

ここまで見た
  • 754
  •  
  • 2014/09/05(金) 22:33:12.96
俺の大好きなwxWidgetsスレがめちゃんこ糞スレになって泣きそう

ここまで見た
  • 755
  •  
  • 2014/09/05(金) 22:52:37.72
案の定あらし化したか
これ以上触れないで放っとくの推奨

ここまで見た
  • 756
  •  
  • 2014/09/10(水) 10:22:55.86
wxWidgets って、GTK をバックエンド(port to)に使うことも出来るらしい
ね(wxGTK)。

上位のツールキットが、下位のツールキットに被さっているってことか。

X11 を直接バックエンドに使うのともまた違うのかな?

ここまで見た
  • 757
  •  
  • 2014/09/10(水) 18:37:52.75
      \       ヽ           |        /        /
          \      ヽ               /      /
‐、、         殺 伐 と し た ス レ に 鳥 取 県 が ! !      _,,−''
  `−、、                  __/\            _,,−''
      `−、、              _|    `〜┐         _,,−''
                      _ノ       ∫
                  _,.〜’        /
───────‐     ,「~             ノ    ───────‐
               ,/              ` ̄7
                |     島 根 県     /
           _,,−'   ~`⌒^7            /    `−、、
        _,,−''            丿            \,      `−、、
 ,'´\           /  _7       /`⌒ーへ_,._⊃         /`i
 !   \       _,,-┐    \    _,.,ノ          r‐-、、      /   !
 ゙、   `ー--<´   /      L. ,〜’             ゙、  >−一'′   ,'
  y'  U      `ヽ/     /            ヽ      ヽ '´     U   イ
                                ____
         /      __        |       \____\
    ___/__ / ̄    ____|____ \ \____\
       //ヽ   /___         /|\       \ \____\
     / / ヽ  / /__     /  |  \       \_______
   /  /   / /   /     /    |    \          |    \
  /   /  / /  _/   __/      |      \__      |     \  ̄―_

ここまで見た
  • 758
  •  
  • 2014/09/11(木) 00:33:29.51
>>756
X11は組み込み向けのportなので一般的には使われないよ(メンテされてるかもよくわからん)
Linuxでの使用の際はGTKベースと思っていた方がいい
つまりwxWidgetsのクラスやメソッドでコードを書いてLinux上でビルドするとGTKアプリができる

最近はwxQtというwxWidgetsからQtをバンドルするイカれたプロジェクトが本流にマージされたようだが…

ここまで見た
  • 759
  •  
  • 2014/09/11(木) 07:34:16.28
wxQtってなんかメリットあるの?

ここまで見た
  • 760
  •  
  • 2014/09/11(木) 20:49:49.06
>>759
目的は、Qtベースのデスクトップ(KDE)でもwxWidgetsアプリを使うためとか
(→まあKDE上でGNOMEアプリを使うツールもあった気がするのだが…)
あとQtをバンドルすることでAndroid対応も果たしていた(実用性は不明)

ここまで見た
  • 761
  •  
  • 2014/09/12(金) 10:47:54.87
wxWidgetsで、POPUP Menu (Windows では、Context Menu が正式名称かも)を作る場合、
どうしてますか?

特に、CodeBlocksなどのIDEで行う場合の最良の作法が知りたいです。
自分は、基本的な wxSmith の使い方が分かったところです。

ここまで見た
  • 762
  •  
  • 2014/09/12(金) 11:29:17.36
MenuItem作って
SubMenu作って
AddItem

ここまで見た
  • 763
  •  
  • 2014/09/12(金) 11:47:23.49
>>762
それは手作業の場合ですよね。
そこの部分は対した手間ではないですが、
イベント・ハンドラを*.cpp, *.h, EVENT_TABLEの全てに書くのが面倒で。

ここまで見た
  • 764
  •  
  • 2014/09/12(金) 11:47:52.57
どうぞ
https://www.youtube.com/watch?v=jCW7DZ6gdAo


ここまで見た
  • 765
  •  
  • 2014/09/12(金) 12:20:43.41
>>764
これ、今ちょうど数秒前に見終わったところだった。

これ見てると、

1. wxSmithでwxFormをエディット中に、「MenuBar」ではなく「Menu」ボタンを押して
 「要素」を追加する。
  そうするとwxSmithの上辺に要素のアイコンが並んでいる末尾に新しいアイコンが追加される。
2. 追加したMenu要素に名前を付ける。
3. wxFormの中に既に配置してあったwxPanelに対して、マウス右UPイベントに対応するハンドラを追加する。
4. そのハンドラの中に、手作業で PopupMenu()関数の関数呼び出しを書き、
  その引数に2.でMenuに付けおいた名前を書く。

こここまでは大した手間じゃない。

その後が問題で、EVENT_TABLE の「自動的にwxSmith が作成する範囲」の外側(直後)に、
POPUP MENUのMENU項目数分だけ、手作業で Connect() 関数を書いている。メニュー項目が7個だと、
Connect()関数も7個書く。それぞれ、MENU項目に付けた ID_xxxx の値と、対応する自前の
イベント・ハンドラの関数名を引数に指定して。


最後の部分が知りたかった事で、POPUP MENUの作り方としてはかなり面倒な方法に属する。

ここまで見た
  • 766
  •  
  • 2014/09/12(金) 12:28:57.27
馬鹿には無理

ここまで見た
  • 767
  •  
  • 2014/09/12(金) 14:27:34.99
7個のメニュー項目にイベント結びつけるのに7行コード書くのって、そんな突出して面倒か?

ここまで見た
  • 768
  •  
  • 2014/09/12(金) 15:27:57.79
>>767
それは、「EVENT_TABLE」の箇所だけの話で、実際は、*.h に
メンバ関数宣言を7つ書き、*.cpp に
Zzzz Ccccc::OnXxxxx( Yyyy *pYyyy )
{
return Qqqqq;
}
みたいなの(4行)を 7 つ書く必要がある。

少なくとも (1+1+4)*7 = 42 行だ。

ここまで見た
  • 769
  •  
  • 2014/09/12(金) 16:36:39.60
IBみたいなのを期待したら駄目

ここまで見た
  • 770
  •  
  • 2014/09/12(金) 19:11:10.85
なんで今更wxSmithなんだよ古臭いな
なんでイベントテーブル使ってんだよ古臭いな
黙ってwxFormBuilder使ってみろよメッチャ簡単で笑えるぞ

ここまで見た
  • 771
  •  
  • 2014/09/12(金) 19:15:42.12
>>770
IDEとの組み合わせは?

IDEがサポートしていなくてもいけるんだろうか?

ここまで見た
  • 772
  •  
  • 2014/09/12(金) 19:26:00.24
>>771
ちんまい個人用ツールしか作った事が無いから大規模プログラムでどうなるかは分からんが、
俺はwxFormBuilderでGUIデザインし、VisualStudioでコード書いてる。
GUI部品を追加したくなったら、いつでも追加編集できる。
もちろんイベント追加も問題ない。
VSでコード書きつつGUIエディットしても、VSにフォーカスを移したら勝手に読み込み直してくれる。

今まで書いたコードがGUI生成時に消去される事も無い。
これにはちょっと条件があるけどな。

ここまで見た
  • 773
  •  
  • 2014/09/12(金) 19:30:56.63
>>772
POPUP MENU を作る時、EVENT_TABLE を使わずに何か良い方法で
やってくれるのかな?

ここまで見た
  • 774
  •  
  • 2014/09/12(金) 19:38:30.73
wxFormBuilderかあ
もはやクロスプラットフォームでGUIがGUIでデザインできるのか(しかもフリーソフトウェア)

ここまで見た
  • 775
  •  
  • 2014/09/12(金) 19:39:02.29
VSは、外部エディタでソースを編集した場合、VSに戻ると自動的に再ロード
してくれる機能がある事は知ってる。これは昔からある機能。

ここまで見た
  • 776
  •  
  • 2014/09/12(金) 20:52:41.52
>>773
凝りに凝ったメニューは知らんが、ポップアップメニューの作成および
メニュークリック時のイベント生成なんかは全部wxFormBuilder上で出来る。
従来のイベントテーブルでも生成してくれるし、Connect関数を使ったイベント生成も出来る。
今はConnectも古くてBindがトレンドらしいが、詳しくは知らない。

http://www.dotup.org/uploda/www.dotup.org5309542.zip.html
参考までに、wxFormBuilderのみで作ったサンプルコードを添付する。
自分で書いたのはmain.cppとthis->Close();だけ。
VS2013 + wxWidget3.0.1でビルド確認済。

ここまで見た
  • 777
  •  
  • 2014/09/13(土) 07:40:07.50
>>776
これは、どうやって作ったの?
生成されたコードも参考にはなるけど、wxFormBuilder上での操作方法が
知りたい。

ここまで見た
  • 778
  •  
  • 2014/09/13(土) 16:39:39.92
>>777
説明がめんどくさいから、wxFormBuilderでこの「wxMenuTest.fbp.」を開いて確認してくれ。
あとは適当に触ってれば理解できるだろ。
http://www.dotup.org/uploda/www.dotup.org5310926.zip.html

適当にGUIを作ったらF8キーでメインクラスを生成して、
その後F6キーでサブクラスを生成すればいい。

あとは添付した「main.cpp」みたいなコードを書いてビルドすれば目出度くGUIプログラムの完成だ。

ここまで見た
  • 779
  •  
  • 2014/09/13(土) 17:37:50.07
レイアウトやイベントの仕様が
前もって分かって一発で決まるようなものならいいけど
そうでない場合は細かいテクが必要になるんだよなぁ
VB,delphi,VisualStudio他のポトペタとは違って
基本クラスや継承クラスの生成コードは
上書きしちゃってよしなにしてくれないから目視マージが必要になる
で、それならxrcでいっかなとなったりとね
あとは最近のバージョンでは修正されてるかも知らないけど
splitter > panel > sizer > xxx
の深いネストが嫌いだったな
バグだよね

ここまで見た
  • 780
  •  
  • 2014/09/13(土) 18:03:46.11
>>778
出来れば言葉で説明していただけるととても有難いんだけれども。

ここまで見た
  • 781
  •  
  • 2014/09/13(土) 18:20:32.24
>>776
MyProject1MyFrame1.cpp に、

void MyProject1MyFrame1::m_button1OnButtonClick( wxCommandEvent& event )
{
  // TODO: Implement m_button1OnButtonClick
  this->Close();
}

と類似の行が沢山あるけど、this->Close() 以外は、wxFormBuilder が自動生成したとのことで Ok ?

>>779
>基本クラスや継承クラスの生成コードは
>上書きしちゃってよしなにしてくれないから目視マージが必要になる
>で、それならxrcでいっかなとなったりとね

この辺りとの関連が知りたい。自分で書いたコードが勝手に上書きされて消されてしまうということ?

ここまで見た
  • 782
  •  
  • 2014/09/13(土) 18:22:33.01
そもそも wxFormBuilder って、人間が書いたコードと「マージ」や「アペンド」する機能は全くなくて、
デザイナのテキスト領域に表示されるコードをコピペして使う程度の事しかできないのかな?

ここまで見た
  • 783
  •  
  • 2014/09/13(土) 18:27:14.64
xrcはwxFormBuilderだとwxRibbonとかで生成に抜けがあるよね
これ自体はそのうちなおるだろうけど、案外使われてないのかなxrc

ここまで見た
  • 784
  •  
  • 2014/09/13(土) 18:54:43.70
class MyFrame1 : public wxFrame {・・・};
class MyProject1MyFrame1 : public MyFrame1 {・・・};

となっていて、

http://stackoverflow.com/questions/8255753/how-to-add-personal-code-into-wxformbuilder-generated-class



・build your frame/panel in formbuilder
・generate inherited class
・implement your handling code in inherited class
・make changes to form/panel in wxFormbuilder ->
 will only affect generated class, not inherited class

の最後の行と矛盾するね。

wxFormBuilder は、MyFrame1 は書き換えるが、それを継承した所の MyProject1MyFrame1 は、最初の
一回しか書き換えない(というよりユーザーが指示しないと生成しない)、ということらしいから。

ここまで見た
  • 785
  •  
  • 2014/09/13(土) 18:57:59.23
つまり、>>781 のイベント・ハンドラにおいて、this->Close(); の外側の部分も手作業で
書くしかないのではなかろうか?

そして、対応する *.h ファイルの中に、同じ関数のメンバ関数宣言も手作業で追加するしかないのでは?

ここまで見た
  • 786
  •  
  • 2014/09/13(土) 19:05:46.06
実装の中身以外は何一つ手では書かないっていうなら、wxWidgetsは投げ捨てて
QtCreator有するQtか、C++ Builderあたりを使うしかないよ。
wxFormBuilderはIDEじゃないし。

ここまで見た
  • 787
  •  
  • 2014/09/13(土) 19:07:33.52
>>786
QtCreator では、それが出来るのかな?

ここまで見た
  • 788
  •  
  • 2014/09/13(土) 19:09:46.08
XRC最強なんですけど

ここまで見た
  • 789
  •  
  • 2014/09/13(土) 19:18:48.99
>>785
言葉通りに受け取ってくれればいい。
本当に「this->Close();以外書いてない」んだ。
つまり関数実装部は全て自動生成される。

つーか試してくれよ。
これだけ御膳立てしたんだからさ。

ここまで見た
  • 790
  •  
  • 2014/09/13(土) 19:23:58.85
>>789

大体、答えが分かった。

つまりあなたは、wxFormBuilder に MyProject1MyFrame1 を生成させて、
this->Close();
を追加したんだ。


そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
this->Close();
を自分で書かなきゃならない。

それが、>>779 の意味だね?

だとすれば、this->Close(); の部分は、実践的には、もっと長くなるのだから、
物凄く面倒で、なおかつ危険が伴う作業になるね。

ここまで見た
  • 791
  •  
  • 2014/09/13(土) 19:27:26.32
>>790

>そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
>this->Close();
>を自分で書かなきゃならない。

ここの部分を補足すると、その時に追加したボタンやメニュー項目に対するハンドラだけ
でなく、既に存在していたボタンやメニュー項目に対する全てのハンドラの中身を手作業で
コピーする必要があるということになる。

ボタンやメニュー項目の個数をN とすると、O(N^2) の作業時間が必要になるね。

ここまで見た
  • 792
  •  
  • 2014/09/13(土) 19:44:06.05
>>790
> そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
> this->Close();
> を自分で書かなきゃならない。

そこらへんに少しコツがあってな。
自動生成された部分を一切変更しない限りにおいて、
後から機能追加して再度サブクラスを生成した時、以前書いた部分は削除されない。
つまり今回の例では「this->Close();」は消えずに残る。
逆に言えば「// TODO〜」コメントの削除や編集すら許されないという事なんだけどな。

これが守られなかった場合、同名の(空の)関数が別に生成される。
この場合は旧関数から新関数へのコピペおよび旧関数の削除の手間が生じるが、
いずれにせよ一度書いたものが消える事は無い。

ヘッダファイルにおいても同様であり、
//// end generated include と
/** Implementing MyFrame1 */ の間、それと
//// end generated class members 以降の行に書いた内容は削除されない。
安心して機能追加できる。
不安だったら再生成する前にバックアップ取っておけばいい。

問題があるとすれば、コードのインデントが全て消える事。
Eclipse等開発環境のコードフォーマッタで解決するが、3.4.0beta時点では
インデント維持されてた筈なんだ。なんで維持されなくなったんだ?
俺の見落しか仕様かバグか。

お絵かきランド
フリックゾンビ
ここまで見た

★お気に入り追加

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