-
- 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/
-
- 412
- 2012/02/03(金) 12:24:05.07
-
>>409
> for (size_t i=0 ; i < count ; count--)
count-- っておま
-
- 413
- 2012/02/04(土) 00:41:55.82
-
>>412
--ってあまりよくないようなので、i++に変更しました。
wxString regexText(L".?");
wxString text(L"abc123");
wxRegEx rx;
rx.Compile(regexText,wxRE_ADVANCED);
if (rx.IsValid()==TRUE)
{
if (rx.Matches(text)) {
int n = rx.GetMatchCount();
for (int i = 0; i < n; ++i) {
wxMessageBox(rx.GetMatch(text, i));
}}}
上記コードでコンパイルしたところ、faild in GetMatch() invalid match indexというのはでなくなりました。
((count--)と実行していた行で、エラーが発生していました。)
最短一致 .?を期待しています。 このソースだとaだけが表示されて、forを抜けてしまいます。
.?なので、全ての文字の1文字か0文字で、一文字が検索されると認識しています。
私の認識では、6回メッセージが表示されると思っているのですが、この考えは間違っているのでしょうか?
a,b,c,1,2,3と 一文字ずつメッセージが表示されると思っているのですが・・・
それとも正規表現の場合、一つの文字列から検索する場合には一回のみしか検索しないのでしょうか?
ただ、GetMatchCountでヒットした回数と内容を覚えているような気もします・・・
正規表現もこれであっているかの自信もないのですが、どこに間違えがありますか?
教えてください。
-
- 414
- 2012/02/04(土) 02:27:28.32
-
>正規表現の場合、一つの文字列から検索する場合には一回のみしか検索しないのでしょうか?
その通り。
むしろ前回の状態を記憶するとどうして思ったのかがよくわからない。
>GetMatchCountでヒットした回数と内容を覚えているような気もします
覚えてない。
1が返ってきたなら「この正規表現にマッチした集合は1つ」という意味しかない。
>正規表現もこれであっているか
あってる。
-
- 415
- 2012/02/04(土) 12:58:33.95
-
>>414
レスありがとうございます。
>むしろ前回の状態を記憶するとどうして思ったのかがよくわからない。
http://www.adras.com/RegEx.t11993-147-1.html
このようなページを時々見かけまして、一回の検索で、reEmail.GetMatch(email, 1);のように複数
書いているので、見つかったものは全部読めると思っていました。
>覚えてない。
>1が返ってきたなら「この正規表現にマッチした集合は1つ」という意味しかない。
なるほど、一つしか見つかっていないのですね。
>あってる。
了解です。
疑問なのですが、"(raw)(H24.2.4)北海道で撮影しました。"
という文字列を正規表現で検索した場合に、"北海道で撮影しました。"という文字列に
変換したい場合には、wxRegExを使用する場合には、以下の流れになるのでしょうか?
1・ \(.*?\)で、上記文章を最短一致で検索
2・ (raw)が検索にかかるので、これを削除。
3・ 削除後の文字列"(H24.2.4)北海道で撮影しました。"を新規で、wxStringに格納。
4・ \(.*?\)で再度最短一で検索。
5・ (H24.2.4)が検索にかかるので、これを削除。
6・ 削除後の文字列"北海道で撮影しました。"を新規で、wxStringに格納。
wxRegExで最短一致で検索した場合に複数一致する場合があった場合。
マッチした部分の削除・置き換えを行いたい場合はこのような流れにするしかないのでしょうか?
教えてください。
-
- 416
- 2012/02/04(土) 13:59:31.73
-
スレ違い
-
- 417
- 2012/02/04(土) 16:35:13.66
-
>正規表現
スレチだから詳しく書く気はない。
"北.+で.+た"
文字コードの問題はあるが、この正規表現は
"北海道で撮影しました"にも"北陸で撮影しました"にもマッチする。で、
"(北.+)で.+た"
とすると、全体がマッチした上で、北で始まり「で」で終わる文字列が
部分集合としてキャプチャされる。
>wxRegExのお話
GetMatchでindexを指定すると、0番目にマッチした全体が入り、
1番目以降はこの部分集合が順に入る。
例だとGetMatch(text, 1)で「北陸」か「北海道」が返ってくる。
たぶんその辺を理解してないんだろうなぁと思ったので
410で "\\[...\\](.)" ってわざわざキャプチャ入れたサンプルにしたのに・・・
>()で囲まれた部分を消去したい
wxString text(L"(raw)(H24.2.4)北海道で撮影しました。");
wxRegEx rx(L"\\(.*?\\)", wxRE_ADVANCED);
rx.ReplaceAll(&text, L"");
wxMessageBox(text);
-
- 418
- 2012/02/05(日) 01:18:16.61
-
>>416 417
>スレチだから詳しく書く気はない。
すいません。
>とすると、全体がマッチした上で、北で始まり「で」で終わる文字列が
>部分集合としてキャプチャされる。
キャプチャという用語を知りませんでした。
正規表現に関して、コンテンツよんでいたつもりのようでした。
で、gogleで調べたところたくさん記載しているサイトがありました。
>たぶんその辺を理解してないんだろうなぁと思ったので
>410で "\\[...\\](.)" ってわざわざキャプチャ入れたサンプルにしたのに・・・
一度だけ、その正規表現で検索したときに、マッチカウント2回表示されました。
で、エラーもでなくなったので、コードが正常なのでそういう風になっているのかと
軽く考えていました。
本来は自分で考えることだと思いますが、消去したいコードを書いてくれてありがとうございます。
正規表現の書き方を完全に理解しないとやりたいことができませんので、一旦正規表現をしばらく調べます。
キャプチャ・・・かなりすっきりしました。
本当にありがとうございました。
-
- 419
- 2012/02/06(月) 17:29:11.83
-
最新の2.8を使ってるが勝手にメモリリークしていくな
しかもデバッグDLLがコンパイルすら出来ないからテスト出来ないし
中身を作り替えたとか言ってたがものすごい劣化してるな
-
- 420
- 2012/02/23(木) 01:19:16.26
-
GlassFishの質問てここでいいのかな。
-
- 421
- 2012/02/24(金) 03:27:42.33
-
no
-
- 422
- 2012/03/17(土) 10:54:20.81
-
>>246
>なんでいつも質問した後は簡単に見つかるんだろう…
安心しろ
それはRubber Duckingと言って有名なテクニックだ
http://www.aoky.net/articles/john_graham_cumming/talking_to_porgy.htm
-
- 423
- 2012/03/18(日) 06:42:47.35
-
wxPythonで使える俺俺モジュールの作り方を教えてくだされ
-
- 424
- 2012/03/23(金) 11:08:49.75
-
サイザーage
-
- 425
- 2012/03/23(金) 11:24:00.67
-
コ
-
- 426
- 2012/04/30(月) 23:02:22.27
-
hoshu
-
- 427
- 2012/05/07(月) 23:39:02.10
-
wxFormBuilderで出力したコードで日本語が文字化けすると思ったら
BOMなしUTF8とVSの問題だった
-
- 428
- 2012/05/19(土) 11:47:34.43
-
Windows, Linux環境で使えるアプリを作っているのだが
Windowsの場合はバイナリを配布すればいい
Linuxの場合はソース互換だからソースを配布するべきなんだよな?
-
- 429
- 428
- 2012/05/19(土) 11:51:05.86
-
あとwx2.9をFedora15 x86_64でビルドしてインストールしたんだが
なぜか実行時にwxCSConvでコケる。同じ症状の方おまへんか〜?
この現象はwx2.8では起きてない。
(gdb) backtrace
#0 0x000000000079c785 in wxCSConv::DoCreate() const ()
#1 0x000000000079d7bd in wxCSConv::wxCSConv(wxFontEncoding) ()
#2 0x000000000079dacd in wxGet_wxConvLocalPtr() ()
#3 0x00007ffff3a79018 in _GLOBAL__sub_I_strconv.cpp () from /usr/local/lib/libwx_baseu-2.9.so.3
#4 0x0000003c4400e2b6 in call_init.part.0 () from /lib64/ld-linux-x86-64.so.2
#5 0x0000003c4400e393 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#6 0x0000003c440016ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#7 0x0000000000000001 in ?? ()
#8 0x00007fffffffe815 in ?? ()
#9 0x0000000000000000 in ?? ()
-
- 430
- 2012/06/13(水) 22:49:56.47
-
EVT_CLOSE に対して Close(True) しても終了出来ません
-
- 431
- 2012/06/25(月) 07:17:22.37
-
http://cametan-001.tumblr.com/post/5864304659/wxpython
-
- 432
- 2012/07/04(水) 17:16:02.11
-
ほす
ttp://www.youtube.com/watch?v=8v52QIP4L9Y
-
- 434
- 2012/07/05(木) 16:30:39.73
-
wxWidgetsでShift_JISからUTF-8変換
ttp://nantonaku-shiawase.hatenablog.com/entry/2012/05/16/031005
wxNotebookとwxAuiNotebookの違い
ttp://nantonaku-shiawase.hatenablog.com/entry/20120211/1328967345
-
- 435
- 2012/07/08(日) 23:42:42.45
-
>>430
EVT_CLOSEのハンドラの処理では終了処理した後event.Skip(false);
Closeを呼ぶとまたハンドラが呼ばれる
-
- 436
- 2012/07/09(月) 07:12:24.08
-
http://wxpython.org/docs/api/wx.CloseEvent-class.html
You should check whether the application is forcing the deletion of the window
using CanVeto(). If it returns False, you must destroy the window using wx.Window.Destroy.
If the return value is True, it is up to you whether you respond by destroying the window or not.
For example you may wish to display a message dialog prompting to save files or to cancel the close.
-
- 437
- 2012/07/13(金) 19:00:38.12
-
ソースに
const char sjis[3] = {0x88, 0xa2, 0x00};
wxString s(sjis, wxCSConv(wxT("CP932")));
cout << s.mb_str(wxConvUTF8) << endl;
という部分があるとリンク時に下のようなエラーになります。
"hoge.sln" (Rebuild target) (1) ->
(hoge:Rebuild target) ->
hoge.obj : error LNK2001: 外部シンボル ""class wxMBConvUTF8 & wxConvUTF8" (
?wxConvUTF8@@3AAVwxMBConvUTF8@@A)" は未解決です。
hoge.obj : error LNK2001: 外部シンボル ""public: static unsigned int const
wxStringBase::npos" (?npos@wxStringBase@@2IB)" は未解決です。
..\hoge.exe : fatal error LNK1120: 外部参照 2 が未解決です。
何が足りないのでしょう?
-
- 438
- 2012/07/13(金) 20:37:03.69
-
ヘッダファイルの読み込みかライブラリのリンクを行ってない
VC++なんて捨ててMinGWでやろうぜ!
MinGW + EclipseCDTで環境用意すればいい
-
- 439
- 2012/07/13(金) 20:49:50.67
-
どのライブラリが足りないのか判らないんで
どのライブラリに含まれているかを教えろ
-
- 440
- 2012/07/13(金) 21:49:44.49
-
>103-
ttp://diary.imou.to/~AoiMoe/2004.09/middle.html#2004.09.13
-
- 441
- 2012/07/14(土) 23:52:18.18
-
c++とwxWidgetsを勉強中です。
わからないことがあるので教えていただけませんか。
void functestFrame::OnButton2Click(wxCommandEvent& event)
{
wxString str1 = L"まっぎょ";
functestFrame::wxStringfunc(&str1);
}
void functestFrame::wxStringfunc(wxString* str)
{ wxMessageBox(*str);}
4-10はコンパイルと実行できました。
void functestFrame::OnButton3Click(wxCommandEvent& event)
{
wxArrayString temp1;
temp1.Add(wxT("ぽけもん"));
functestFrame::wxArrayStringfunc(&temp1);
}
void functestFrame::wxArrayStringfunc(wxArrayString *arraystring)
{
for (int i=0 ; i< *arraystring.GetCount() ; i++)
{*arraystring.Item(i);}
}
コンパイルエラーがでます。
C:\Users\x\Desktop\functest\functestMain.cpp||In member function 'void functestFrame::wxArrayStringfunc(wxArrayString*)':|
C:\Users\x\Desktop\functest\functestMain.cpp|169|error: request for member 'GetCount' in 'arraystring', which is of non-class type 'wxArrayString*'|
C:\Users\x\Desktop\functest\functestMain.cpp|170|error: request for member 'Item' in 'arraystring', which is of non-class type 'wxArrayString*'|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 1 seconds) ===|
wxstringと同じ方法をしているつもりなのですが、どのようにすればコンパイルができるのでしょうか?
-
- 442
- 2012/07/15(日) 11:07:19.04
-
>>441
ちょっとしたコードを書いてみた
http://pastebin.com/KCE8eyDe
コンパイルが通らない原因
wxArrayStringの通常変数とポインタ変数の違いがわかっていない
C++では実体に対しては「.」でアクセス、ポインタ変数に対しては「->」アロー演算子でアクセスする
参考:http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/13-03.html
× arraystring.GetCount();
○ arraystring->GetCount();
あと関数の入り口で「wxArrayString *arraystring」と宣言されているならば
その関数内部では「*arraystring」ではなく「arraystring」でアクセスする
「*」をつけてしまうと「arraystring」のポインタのポインタになってしまう
void functestFrame::wxArrayStringfunc(wxArrayString *arraystring)
{
for (int i=0 ; i< *arraystring.GetCount() ; i++)
{*arraystring.Item(i);} ← ここもいまいち何をしようとしてるかわからん
}
-
- 443
- 2012/07/15(日) 11:14:03.55
-
あと細かいことを言うと文字列の宣言を以下のようにしているようだが
wxString str1 = L"まっぎょ";
せっかく用意されているので「wxT」マクロを使った方がいい
wxString str1 = wxT("まっぎょ");
これでどのような環境でも日本語が変数に入れられるはず
-
- 444
- 2012/07/15(日) 21:32:47.77
-
>>442
ありがとうございます。
サンプルをコンパイルして、実行できました。
通常変数と、ポインタ変数ですか。
リンク先を読んで理解します。
すみません、あと一点教えてください。
wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?
下記マニュアルをどのように調べればよいのでしょうか?
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx368.htm
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx32.htm
-
- 445
- 2012/07/16(月) 05:30:47.00
-
>>444
>wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?
C/C++ではクラスや変数の宣言時に実体を宣言するかポインタで宣言するか決められるので
その質問はそもそもちょっとポイントがずれている
【ポインタ】
例えば
wxButton *btn1 = new wxButton(panel, wxID_BUTTON1, wxT("ボタン1"));
はwxButtonクラスをポインタ変数で宣言している
*btn1内のクラスメソッドをいじるには「*btn1->GetLabel();」と書く必要がありますよ、と
普通は大きなクラスはポインタ変数でインスタンスを作って宣言したほうが良い
【実体】
wxString myTestStr;
myTestStr = wxT("テスト文字列");
myTestStr.IsEmpty(); ← 空文字であるかどうか調べてる
>下記マニュアルをどのように調べればよいのでしょうか?
もうお気づきかもしれないが
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx368.htmに載っているのは
wxStringという「クラス」についてのリファレンス
wxString::Hogehoge のように「::」がくっついた後半部分がそのクラスが使用出来るメソッド(関数)
myTestStr.IsEmpty(); ← wxStringのIsEmptyというメソッドをつかっている
自分が欲しい機能をクラスリファレンスで探し、クラスを宣言してどのように使えるかは
メソッド部分を見れば良いということ。
-
- 446
- 2012/07/16(月) 07:23:17.68
-
DLLよりもstaticの方が配布サイズ小さくなるな
-
- 447
- 2012/07/16(月) 10:56:52.47
-
逆でわ?
-
- 448
- 2012/07/16(月) 11:06:12.02
-
DLLリンクで作るともちろんexeは小さくなるけど
DLLも一緒に配布するとなるとでかくなるって意味
-
- 449
- 2012/07/16(月) 11:08:34.14
-
そりゃあんたのプログラムの規模が小さいだけでわ?
-
- 450
- 2012/07/16(月) 11:12:44.68
-
いや先入観無しで聞いてくれ
最初はそう思ってたんだが
確かにDLLリンクで作るとexeはめっちゃ小さい
しかし実際そこそこの規模のプログラム書いて
staticで作ってみて出来たexeが
(前者のexeに必要なDLLを合わせたサイズに比べると)
意外と小さい
-
- 451
- 2012/07/16(月) 11:15:19.52
-
exe だけ配布汁!
-
- 452
- 2012/07/16(月) 11:22:57.42
-
そりゃDLLはwxWidgets全部入りだしな
-
- 453
- 2012/07/16(月) 12:51:54.82
-
規模によるとしか言いようがない
-
- 454
- 2012/07/16(月) 12:57:22.32
-
MFC 最強ですねわかります
-
- 455
- 2012/07/16(月) 13:25:13.34
-
DLLはwxWidgetsのシンボル全部入ってるけど、
staticリンクだと本体が使うシンボルだけ.aから
引っ張ってくるんだから、そうなるのは当たり前
-
- 456
- 2012/07/16(月) 14:12:18.33
-
規模によるとしか言いようがない
-
- 457
- 2012/07/16(月) 14:13:00.02
-
DLL ってなんのためにあるんだっけ?
-
- 458
- 2012/07/16(月) 14:13:47.36
-
ワロタ
-
- 459
- 2012/07/16(月) 14:34:56.55
-
wxWidgetsで作ったexeが一個(あるいは少数)しかないときはそうなるのは当たり前。
DLLのメリットが生きるのはOS等のようにexeが無数にあってさらに共通部分(API)が多い場合。
趣味でやってるならSTATICでいいんじゃね?
-
- 460
- 2012/07/16(月) 14:56:37.82
-
めずらしくwxWidgetsスレが伸びている・・・
-
- 461
- 2012/07/16(月) 15:55:58.62
-
規模によるとしか言いようがない
-
- 462
- 2012/07/16(月) 15:56:38.27
-
2.9.4 出たからな
このページを共有する
おすすめワード