プログラム関連~チラシの裏~―Qt/Windowsメモカテゴリーの記事一覧プログラム関連~チラシの裏~スパム対策したりプログラム組んだり色々やってる為替とは別の面を表に出してみた。ないブログに表示されています。新しい記事を書く事で広告が消えます。()Category:QFileDialogでファイル名取得QFileDialogを利用したサンプルを作成してみました。WindowsAPIでいう所GetOpenFileNameとGetSaveFileNameを簡単に設定できるようにした機能です。MFCでいうならGetOpenFIleDialogだったかな?では、ファイルオープンのダイアログを表示する。●フィルタリストの作成をします。ファイルを開く時などのダイアログでBitmapファイルだけ表示したり、jpgだけ表示したりする時に活用できます。(*.*)");●ダイアログの作成と設定。コンストラクタで一度に色々と設定する方法。デフォルトでQWidget*とQFileDialog::AcceptOpenかAcceptSaveを指定して簡単に作り出す方法の2種類があります。実用性があるのは面倒な設定を行う方法です。QFileDialogのコンストラクタで親Widget,ダイアログタイトル、初期ディレクトリの設定、フィルタリスト。設定を行うのがいいでしょう。フィルタは後からも設定できます。ちなみにQStringでフィルタを作成する場合は;;で区切りを作成します。デフォルトはリストの最初。ファイル名を取得するとリストにつかされます。ファイルリストの取得。ファイル名取得複数ファイルある場合は、foreach等で取得するといい。画像ファイルをQLabelに設定してイメージサイズを設定する。(openDlg);//最後にダイアログを削除。●ファイルを保存する場合ファイルを保存する場合も同じQFileDialogを使います。ファイル名取得複数ファイルある場合は、foreach等で取得するといい。Labelに設定したPixmapを保存します。(saveDlg);なんか、変なファイルツールでダウンロードを連続する人がいて警告メールもらってるので1クッションおく形に変更させてもらいます。Qt/WindowsメモeventFilterを使ってみたQObjectを継承したQWidget系のクラスはeventFilterでイベントを監視する事が可能。エディットボックスやコンボボックスに来たイベントを実行する前に「監視」できる。いうか、仕事上じゃ必須か・・・。リストボックスでリストを選択したときに来るマウスイベントを取得して強制キャンセル。tabキーを押したときにフォーカスを変更したりできるのかも~。※キー入力はkeypressEventというのがあるのでなんていろいろ考えてみました。いうわけで、色々操作したときに来るイベントをeventFilter上で監視してコンソールに表示するサンプル。エデットボックスのクラスポインタ等をinstallEventFilterしてイベントが来る前に表示するクラスにしてみました。);これで、BのクラスにeventFilterを用意するだけでAのイベントを取得する事ができます。サンプルコードの中にある通りです。イベントフィルタを消したいときはremoveEventFilterをインストールと同じ方法で呼び出すだけ。イベントフィルタの監視対象になった物はイベントが来るたびに、eventFilterに飛ばされます。QObjectクラスにあるvirtualのeventFilterの中身を作くれば監視可能。戻り値でeventを実行するか判別する事ができる。trueならフィルタしeventを発行しない。mouseイベントが来たときにtureの戻り値になるようにすればマウスイベントを無視する設定にもできる。*event)第一引数はイベントを受けるQObject。第二引数は発行されるイベント。イベント監視クラスをQObjectを継承して作って監視する。キーイベント色々やったがTABでフォーカスを移動した場合。あれ?フォーカスが変わるイベントが来るわけでもない。eventFilterに対してキーイベントがきていない件。赤文字は4.4.0で追加されたものです。左右に関係なくマウスボタンを押した場合。QMouseEventにキャスト可能。Pressの後にくる。QMouseEventにキャスト可能。ダブルクリック時にくる。PressとReleaseにもメッセージが飛びます。QMouseEventにキャスト可能。マウスボタンを押してるときのみ。QMouseEventにキャスト可能。マウスカーソルがQWidgetの矩形内に入った場合。マウスカーソルがQWidgetの矩形外に出た場合。マウスの真中にあるホイールを回転させた場合。QWheelEventにキャスト可能。マウスで右クリックをした場合。ポップアップメニューを出すためにある模様。マウスを同じ位置に置いておくと出る小さなヘルプです。QLabel等のWidget上にマウスカーソルを乗せたままで発行。発行後はマウスカーソルがLeave(11)するまでMouseMove(5)の変わりに発行されつづけます。QHelpEventにキャストしマウス座標取得可能。ウィンドウとして使うWidgetに来るメッセージです。タイトルバーやウィンドウサイズを変更する場合のライン上でメッセージが来ます。ほかにメッセージが来る場所があるかもしれない。マウス座標はクライアント領域から判定するのでマイナス値来ます。ウィンドウとして使うWidgetに来るメッセージです。NonClientAreaMouseMoveと同じ条件でメッセージが来ます。ツールチップを変更した場合にくるらしいが・・・ツールチップを表示するプログラムにしないと効果が無い。4.4.0以降に追加された。今のところ、QLabelにeventFilterを入れて見張った所。多くのイベントが到着してる事がわかった。マウスの動作をまとめてみて何が起きるのかチェックしました。いっても、みんな知ってるか。Message;でオブジェクトを作成する。↑使い方を考え直して、staticで絶対的なオブジェクトつくったので不用になった。あとは、インストールするQObjectに対してMessageChecker::Install(ui.inputLabe1);を呼ぶ。これでメッセージ表記するようになります。consoleを追加してください。詳しい中身はソースコード見てください。Asisstantのヘルプみながらやるといいかもしれません。●メッセージチェッカーサンプルコード(zip)一応、マウスイベントのみ全て見地。関係ないイベントは番号で表示するようになってます。バージョンアップしとります。RC1が公開されてたQTの使い方がイマイチのままだったので色々と調べてました。気づいたらQT4.4が公開されている。4.3.4と何が変わったんだろう。英語みるとWindowsCEに対応したらしい。あと、マルチメディアがどうのこうの?また、英語力の無さが打撃を与えてきます。正直な所、英語力が全く無いと使えないツールでございます。CEをサポート[マイコミジャーナル]正直、トロールテックは日本語環境に関して努力を一切しない。どんなにあがいても「1億人しか居ない相手に対してサポートする必要なんてありませんねwwwwプギャーww」という事でしょう。それでも仕事で使わなければならない人のために調べておくか。?・XMLの強化DOMだと全部読み込んでからの処理。SAXだと1行づつ読む。タグ最初、アトリビュート、中身、最後。なんか1つづつ使うんだよね。QXmlDefaultHandlerのクラスを継承して読み取り部分つくる。個人で調べたから間違ってるかもしれないけど。何か簡単になったのか?ただ使うだけならDOMのほうが楽。3との互換性を備えた。いう事らしいが、何ができるんだ?なんか記事だけ読んでも先に進まないので実際にダウンロードしてみる。Candidate117Mあるよ。ダウンロードは覚悟するんだ。package)↑のがWindows用。つづいて、LinuxやWindowsCE用と色々あります。Windowsというのがあってエクリプス対応したファイル落とせる。これ設定すればデバッガつかえるのか?使い方を調べろってことですけど。エクリプス自体をインストールしてないので何ともいえませんが。※RC1なので正式リリースしたら無くなるかもしれない。冒険するためだけに使うならいいとおもう。仕事の上で新しく対応したものを利用して何かする!!という人用だけかも。●QT/Windows(OpenSource)4.3.4のセットアップ~その1~●QT/Windows(OpenSource)4.3.4のセットアップ~その2~以前のセットアップ方法が役に立つ?なんておもってましたが、ダウンロードできるのはZIPだけ。ビルドからやる事になると思います。ダウンロードが終わらない罠。セットアップおわったら続きかいてみます。2.とりあえず、C:\qt\4.4RC1にコピーbinの中身は空。3.minGWでビルド。compile_debug※QTのライブラリを入れた中のbinにqtvars.batを作る。4.適当にENTERおしてyを押す。※環境はWindows2000のSP4+MinGWVC6.0以降は貧乏で買ってない。2005等でやれって話なんですが、MinGWに頼るしかないなり。※MinGWは4.3.4をセットアップするときにダウンロードします。qtvers.batの中身だけさらしておく。debug:END---ここまで---ちなみに、2時間以上ビルドしてる。古いPCでは駄目な様子。Qt/WindowsメモQ_OBJECTって何だ?QTを使い始めていろいろ学習した。マクロがあるのでマクロの正体を探らないと何もできん。いうわけで、Q_OBJECTのマクロから追いかけてみた。マクロのマクロのマクロは、同じヘッダの中にあります。*/--ファイルここまで--こんなマクロがあったのかよ!びっくりダヨ!Q_OBJECT_CHECKとQT_TR_FUNCTIONSも追いかけなきゃいけなくなったじゃないか。謎が謎をよびマクロがマクロを呼び。