1 名前:デフォルトの名無しさん [2009/10/01(木) 12:08:27 ] Qt(キュート)は C++ ベースの GUI ライブラリです。 フォーム、ボタンなどの各種ウィジェットからネットワーク、マルチスレッド、グラフィックス(OpenGL)や 各種コンテナ、XMLパーサー、組み込み JavaScript など、ライブラリの機能は多岐に渡ります。 Qt Creatorのリリースにより単なるGUIライブラリ・ツールキットから、 単体でGUI作成、コーディング、デバッグも可能な クロスプラットフォーム対応のRADベースのIDE(統合開発環境)での 開発が可能となりました。 ■対応プラットフォーム(デスクトップ用途の場合) Windows 98, Me, NT4, XP, Server2003, Vista Mac OS X 10.3, 10.4, 10.5 Linux ■ライセンス ・オープンソース版(Open-source version) LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。 LGPL を選んだ場合は商用利用が可能です(いくつか制限あり)。 ・商用版(Commercial version) こっちはQt Softwareか日本の代理店(SRA社)とライセンス契約(年間30万くらい?)を結んで使います ■Qt を使って作られたソフト例 KDE、Adobe Photoshop Elements、Google Earth、Skype、DAZ Studio など ■前スレ 【GUIツールキット】Qt 総合スレ 4【Win/Mac/Linux】 pc12.2ch.net/test/read.cgi/tech/1239996587/
2 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 12:08:56 ] ■リンク ・Qt Software (旧Trolltech社/現在はNokia社の一部門) www.qtsoftware.com/ ・Qt のダウンロードページ(オープンソース版は、LGPL/Free Downloads タブから) www.qtsoftware.com/downloads ・Qt のダウンロード(FTP) ftp://ftp.qtsoftware.com/qt/source/ ・SRA社(日本の代理店)の日本語で読める Qt 関連ドキュメント www.sra.co.jp/qt/relation/index.html ■ライセンス関連まとめ 各ライセンスでの自作アプリのソース公開/頒布 Qtのライセンス アプリのライセンス Qtの頒布/(変更部分のソース公開) GPL GPL(ソース公開必須) 必須 LGPL 任意(ソース公開不要) 必須 商用 任意(ソース公開不要) 不要 *: LGPLは動的リンク時 実際には他にも条件(リバースエンジニアリング関係とか)あるので、 きちんとライセンスの条文を読むこと。
3 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 12:09:32 ] Windows ユーザー向け Tips ■どれをダウンロードするの? ・Download Qt SDK for Windows* (194 Mb) IDE&コンパイラ付きインストーラー(Qt Creator&MinGW) すぐに使える。オススメ ・Download Qt libraries 4.5 for Windows (136 Mb) MinGW(gcc)版インストーラーや、その他のコンパイラ(VisualC++など)用のソースコード VisualC++等でQtを使うには、これを落として Qt 自体をビルドする必要がある(2〜3時間かかる) ■Qt Creator&MinGW Windows版について ・プロジェクトのパスに半角スペース、日本語を入れちゃダメ ・日本語のソースコードは UTF-8 にする 「Projects」タブの「Editor Setting」設定でエディタの Encoding を「UTF-8」にする デフォルトの System(ShiftJIS)は gcc と相性が悪い ・デバッグ出力はとりあえず英語にする qDebug() に日本語を出力するとデバッガコンソールが文字化けする(UTF-8、ShiftJISどっちもムリ) ・配布時は mingwm10.dll も忘れずに一緒に入れておく MinGW 環境でコンパイルするとこのDLLが必要になる。このファイルは public domain で配布上の制限はない
4 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 12:11:04 ] Qt Creator 日本語化プロジェクト Qt Creator を日本語化するプロジェクトです(非公式) qt-creator-jp.sourceforge.jp/
5 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:54:53 ] もう新スレか。Qtのスレが盛り上がっていてちょっと嫉妬するよ。 やっぱLPGLになったのが大きいのかな。
6 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:10:46 ] 俺的にはQt Creatorが大きい。 インストールするだけで、RADで開発できる 環境が整うのは大きいよ。
7 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:25:18 ] タイポした。LPGLってどこのガス会社だ… >>6 新しいIDEができたんだ。 みんなKDevelopを使ってるのかと思ってた。
8 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 01:01:00 ] KDevelopはWindowsでつかえないじゃん。
9 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:51:00 ] Qt Creator、Windows版にVCコンパイラ用のビルド済みバイナリパッケージ用意すればさらに流行ると思うんだけどな
10 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:13:56 ] 画面1024X600のミニノートにLinuxを入れて、Qt Createrを入れたんだけど Linuxのほかのアプリでは問題ないが、Qtではエディタ内をクリックすると 画面が上下に行ったりきたりする 全画面モードにすれば、ちらつくだけで何とか使えるんだけど だれか対処法知らない?
11 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:48:23 ] >LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。 >LGPL を選んだ場合は商用利用が可能です(いくつか制限あり)。 最近ライセンスについて調べたばかりの知識で 間違っていたら申し訳ないんだが GPLでも商用利用は可能じゃね? 儲かるかどうかは別として それとも3.0は別もん?
12 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:59:54 ] >>11 GPLだと、ライブラリを利用する自社開発分のソースも公開する必要があるので、 競争の優位性を保とうと思うなら事実上使えないと判断されることが多いようである。
13 名前:デフォルトの名無しさん [2009/10/04(日) 13:18:19 ] 入門 Qt 4 プログラミング www.amazon.co.jp/dp/487311344X
14 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:23:28 ] GPLのソフト作って儲かってるのは、ウェブサービスぐらいだろう。 (結果を返しているだけだからサービスのユーザーにソースを公開する必要がない!) Qtでウェブサービス。作るかなぁ・・・。
15 名前:デフォルトの名無しさん [2009/10/04(日) 13:26:21 ] >>1 Linuxを含むX Windowプラットフォームでは、Linuxがもっともアクティビティが高いけど、 それ以外もちゃんとサポートされている。 doc.trolltech.com/4.5/supported-platforms.html
16 名前:デフォルトの名無しさん [2009/10/04(日) 14:06:48 ] >>11 GPLでも商用利用可能だけれど儲からないです。 LGPLなQtを使って作ったアプリケーションは、そのアプリケーションのライセンスで、 コピーの配布を禁止でき、有料販売できます。しかし、GPLなQtを使っているならば アプリケーションのソースコードを公開しなければならないだけではなく、受取った アプリケーションのコピーを無料で配れて、禁止もできないため、有料販売はできて も利益を上げられません。
17 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:59:40 ] >>2 今は Qt Development Frameworks qt.nokia.com が正しいみたい。
18 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 16:01:00 ] >>16 最初の一人に高く売りつけるwww
19 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 16:04:28 ] >>14 つMySQL サーバ系だと、どうしても継続的に保守が必要なので、GPLで出して、保守費で稼ぐというモデルが作れる。(本当に儲かるかどうかはケースバイケースだが) しかし、Qtだとクライアントサイドだから、有償にし辛いのではないかなぁ。
20 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 16:44:04 ] ふぅ。QT4本見ているが、Qt Creatorで生成されるコードと違っていて疲れるわw ■Qt Creatorでのコード ユーザーが作ったクラスで、実際の動作させたいコードを書くMainWindowは、 Qtライブラリの QMainWindow を継承している。基本的にここにはGUI配置のコードはない。 GUI配置のコードはUi::MainWindowにある。(※Ui::MainWindowはMainWindowとは別のクラス) MainWindowは、内部にUi::MainWindowのポインタuiを持っており、 MainWindowのコンストラクタでUi::MainWindowを生成し初期化(ui->setupUi(this))する。 Ui::MainWindowクラスは、mainwindow.uiファイルを元に生成されるui_mainwindow.hによると、 何からも継承していないクラスであるUi_MainWindowでGUIを定義し、 Ui_MainWindowを継承してUi::MainWindowを作っている。 ややこしいなぁw
21 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 16:53:10 ] ■Qt4の2章のコード ユーザーが作った検索用ダイアログクラスで、実際の動作をさせたいコードを書くGoToCellDialogは QDialogと Ui::GoToCellDialogを継承している。GoToCellDialogには同じくGUI配置のコードはない。 GUI配置のコードは、Ui::GoToCellDialogにある。(※Ui::GoToCellDialogはGoToCellDialogとは別のクラス) GoToCellDialogは、Ui::GoToCellDialogを多重継承しているので、Qt Creatorのように、uiポインタを経由せずに、 ui->setupUiを呼ぶことができる。 Ui::GoToCellDialogクラスは、・・・たぶん、Qt Creatorと一緒w あぁ、なるほど。GUI配置のコードを継承して実行するか、 継承せずに委譲で行うかで違っているわけか。
22 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:09:21 ] >>11 もちろん商用利用は可能だよ。 その場合はパッケージその物の販売ではなく、保守・改修やマニュアル、 トレーニング、追加パッケージ等で収入を得るモデルになると思うけど、 商用利用することは問題ありません。例えばLinux関連ビジネスで収入を 得ている企業はそれをやってたりする訳です。 だから、その一文はミスリーディングかもね。
23 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:17:55 ] >>22 でも、それ作ったものを商用利用していることになるのかねぇ。 仮に君がQtでアプリを作ってそういうビジネスモデルをやっていたとする。 そして俺がそのQtアプリを入手して、君の代わり俺がその ビジネスモデルで商売しても良いわけだ。 つまり俺が商売している部分は、アプリを除いた部分であって、アプリ自体は商用といえるのかねぇ?
24 名前:デフォルトの名無しさん [2009/10/04(日) 17:47:41 ] >>20 こちらは、少し前にビルドした開発途上版のQt Creator1.2.91を使っているけど、 設定で選べるようになっていて、継承をさせることも可能になっているよ。
25 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:05:14 ] >>23 そのアプリを取り除いたら商売にならない訳だから、商用利用と言って良いでしょう。 誰かが代わりを務めることが出来ると言うけど、どうしてもついてしまう『差』というのも あるものです。その原因は事業方針だったり、技術力だったり、ブランド力だったり、 色々ですが。例えば私がQtのコミッタで、あなたがQtのソースコードを読んだことが なかったら、あなたは私のビジネスモデルで商売ができると言えるでしょうか。
26 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:13:13 ] >>24 使い分けはどうしたら良いんだろう?
27 名前:デフォルトの名無しさん [2009/10/04(日) 18:29:52 ] GPL3の場合、サーバー側のコードも感染すると思ったほうがいいよ。 それどころか、画面を構成するのに必要な画像など一式が感染する。 GPL2とはちょっと様相が変わった。
28 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:40:56 ] 前スレ>>874 >自分のソースにQtのLGPL版を静的リンクした場合、必ず自分のソースを公開する必要があるの。 無いよ。リンク可能なオブジェクトファイルを同梱すれば良いだけです。 自作部分のソースの公開は、静的リンクでも動的リンクでも必要ありません。 これは、ユーザがQtのソースコードを書き換えた時に、改変したQtを 再びあなたのプログラムにリンクできるようにするための決まりです。 例えばQtにバグがあった時なんかに、こういう仕組みが必要です。 >>>2 にLGPLのときは、わざわざ動的リンク時と断ってソース公開が任意となっている。 静的リンクでも一緒です。ただし動的リンクの場合は既に再リンク 可能なオブジェクトファイルが配布されているので、場合分けを しているのでしょう。
29 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:45:33 ] オブジェクトファイルって同梱じゃないとダメ? 配布サイズでかくなるのが嫌だから別に公開しようと思ってるんだけど
30 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:59:28 ] 同梱じゃなくても良いですよ。
31 名前:デフォルトの名無しさん [2009/10/04(日) 23:19:05 ] >>5 >もう新スレか。Qtのスレが盛り上がっていてちょっと嫉妬するよ。 >やっぱLPGLになったのが大きいのかな。 普段何使っているの?
32 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:38:01 ] SMPlayer ttp://ringonoki.net/tool/movie-p/smplayer.php これもQt製じゃね?
33 名前:デフォルトの名無しさん [2009/10/05(月) 00:10:42 ] >>26 Preferencesから3つの内のひとつを選択できるようになっています。 Aggregation as a pointer member: ui->setupUi(this)、ui->lineEdit->text()というように使う場合。uiを デストラクタでデリートする必要あり。 Aggregation: ui.setupUi(this)、ui.lineEdit->text()というように使う場合。デストラクタ でのuiのデリートは必要ない。 Multiple Inheritance: ui. や ui-> なしで、setupUi(this)、lineEdit->text() というように簡潔にしたい場合。
34 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 08:47:41 ] 社内アプリにはQt Creatorで十分なんだけど 「なんでVC/C#/VBにしねーの」って話になって導入しづらいんだよなあ 昔のDelphiみたいな感じに知名度高くなってほしい
35 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 09:41:07 ] Qt Creator コンパイル遅すぎる
36 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 13:00:01 ] g++が遅いんだよ、clはええ〜
37 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 13:37:51 ] moc挿んでるせいじゃなくて?
38 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:07:16 ] QtCreator1.2でインクルードファイルディレクトリを指定するのはどうやるのですか? gcc -I"dir" のdirを指定させたいのだが。
39 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:35:37 ] .proの適当な位置に「INCLUDEPATH += インクルードディレクトリ」って書くか 環境変数CPLUS_INCLUDE_PATHとC_INCLUDE_PATHにインクルードディレクトリを書き込んでOS再起動する
40 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:37:15 ] >39 ありがとう。
41 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:30:55 ] QTで作成したツールをVistaマシンで動かすと、色の描画がおかしくなってしまいます。 真っ黒になったり、色が変わったり…。 XP環境では普通に描画されるのですが、どなたか対処方法をご存じないですか? VistaマシンはレッツノートCF-Y8です。 ドライバは最新のものになっています。
42 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 11:15:43 ] CreatorでQDialogにQTreeViewとPushButtonを貼り、QTreeViewにQDirModelをセット して、ファイルディレクトリをツリー表示してます。 表示、展開などは問題なく出来るんですが、ボタンを押すと選択されている ディレクトリのフルパスを取りたいんですが、その考え方が分かりません。 選択項目の取得法、戻り値はフルパスなのか
43 名前:デフォルトの名無しさん [2009/10/07(水) 10:41:10 ] >>42 >CreatorでQDialogにQTreeViewとPushButtonを貼り、QTreeViewにQDirModelをセット >して、ファイルディレクトリをツリー表示してます。 >表示、展開などは問題なく出来るんですが、ボタンを押すと選択されている >ディレクトリのフルパスを取りたいんですが、その考え方が分かりません。 QTreeViewは、アイテムをクリックするとそれを知らせる clicked(const QModelIndex & index)シグナルを発する。 それと、自分で定義したスロットを接続すればよい。
44 名前:43 [2009/10/07(水) 10:42:56 ] つづき 下記は、MainWindowの中のコードだから、カスタムTreeViewを定義しているときは、適宜修正して。 まず、コンストラクターなどで、シグナルとスロットを接続。 connect(m_TreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(displaySelectedDirectory(QModelIndex))); 以下は、スロットの実装例 void MainWindow::displaySelectedDirectory(const QModelIndex& index) { QDirModel* dirModel = qobject_cast<QDirModel*>(ui->m_TreeView->model()); if(dirModel) { if(dirModel->isDir(index)) { QString seletcedDirPath = dirModel->filePath(index); qDebug() << seletcedDirPath; } } } 返す値は、絶対パス。 リファレンスのQDir、QDirInfo、QCoreApplicationなどをみれば、 ファイルやパスなどの便利なメソッドがあるよ。
45 名前:43 [2009/10/07(水) 10:45:02 ] 訂正 QDirModel* dirModel = qobject_cast<QDirModel*>(ui->m_TreeView->model()); のui->は、いらない。 下記が正しい。 QDirModel* dirModel = qobject_cast<QDirModel*>(m_TreeView->model());
46 名前:デフォルトの名無しさん [2009/10/07(水) 11:08:20 ] >>41 よく分からないから自信ないけど。 再描画が適切に行われていないとか。 QWidget::update()を直接呼んでみるとかればいいかも。
47 名前:41 mailto:sage [2009/10/07(水) 13:55:11 ] >>46 レスありがとうございます。 QWidget::update()を直接呼んでもやってみたのですが、 現象は変わりませんでした。 オブジェクトを移動/回転させると色が変わったりするので、 光の当て方とかが、何かいけないのかな…と思いつつ調べています。
48 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:03:39 ] >>41 Vista で描画の問題が起こった覚えはないけど、 可能性があるとすると OpenGL を使っているとか、 (INTEL系のチップセットだとドライバの出来が悪い) ディスプレイの設定が16bit colorになっているとか。 後者は16bit colorが原因のバグが以前にあったと思うので、 未修正のがあるとすればだけど。 paintEvent() を自分で実装しているクラスで起こるとか、 QWidget にパレットを設定しただけでも起こるとか、 もっと詳しい情報があればもうすこし調べられるかもしれないが。
49 名前:41 mailto:sage [2009/10/07(水) 15:21:18 ] >>48 描画にはOpenGLを使用してます。 更にチップセットはINTELのものです(Intel(R) 965 Express Chipset Family)。 最新のドライバにしたのですが、相性が悪いとかあるのでしょうか…。 paintEvent()は自分では実装していません。 パレットを設定しただけで起こるかは…ちょっとわからないです。
50 名前:41 mailto:sage [2009/10/07(水) 16:40:33 ] 自己解決しました。 ドライバが「最新」と表示されていたものの、 よくよく調べてみたら、最新では無いというオチでした…。 ダウンロードしたインストーラでは普通にインストールが不可だったので、 手動でインストールし、最新のものにしたら正しく表示されました。 レスしてくださった方々、ありがとうございました。
51 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:15:09 ] ケンちゃんラーメンは新発売って言っていたのに、 新発売ではないというオチでした・・・。
52 名前:42 mailto:sage [2009/10/07(水) 22:25:16 ] >43 そうか、継承元のQAbstractItemViewのclicked シグナルがIndexを渡して くれるんですね。 継承元クラスを調べわすれてました。 ありがとうございました。
53 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 13:52:00 ] Ubuntuで QtをシステムでWebインストール(Synaptic)してQtCreatorのみをインストールしました。 Qtは自動アップデートされて4.5です。 こんどQtCreatorをバージョンアップしたらコンパイルできなくなってしまった。 どうも、Creatorのオプション>Qt4 を見ると自動検出したQtが検出できてないらしく ここにパスを手動で入れれば良いみたいなんだけど usr/shareとかusr/lib/qt4とか入れてみてもだめみたいで なんのパスを入れれば良いでしょうか?
54 名前:デフォルトの名無しさん [2009/10/08(木) 15:18:54 ] >>53 パスを指定したあと、下のRebuildボタンを押す必要がある。 また、そのあと下のデフォルトQtバージョンから 使用したいバージョンを選ぶことで選択できるようになる。
55 名前:54 [2009/10/08(木) 15:26:14 ] こちらはDebian GNU/Linuxだけど、debパッケージでインストールしたものへの パスは/usr/share/qt4になっている。 たぶんUbuntuのそれらしいところの、パスを指定すればいいと思う。
56 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:43:40 ] Windowsはドライバの出来が悪いのでQtで不具合が出る。 Linuxにしたほうがいい。 以上、報告終わり。
57 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:04:02 ] Qtの不具合だろw ドライバの問題なら、他のソフトでも問題が出ているはず。 DirectXやOpenGLを使っていて問題が出るのならまだしも 普通のソフトで問題が出るのだからQtの不具合で間違いない。
58 名前:デフォルトの名無しさん [2009/10/08(木) 17:12:36 ] >>56 クロスプラットフォームだからという理由で、Qtが選ばれる場合があるので それは難しい気がする。 57の人がいうようにQtの不具合かもしれないし、そうではないかもしれない。 とにかく、理由が分からないのにそう決めるのは、個人的には賛成できない。
59 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:52:13 ] Linux->不具合なし完璧に動く。 Windows->不具合ありまともに動かない。 これがWindowsを使ってはいけない証拠。
60 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:02:12 ] そうだね
61 名前:デフォルトの名無しさん [2009/10/08(木) 21:46:16 ] >>57 OpenGLで問題が出ているかどうかを確認せずにそのようなことは言えない。 そして、DirectXは、Qtは使っていないのに持出すのもおかしい。
62 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:23:46 ] ちょっと確認 VCではダイログを開くとき、モーダル、モードレスって考え方があって モーダルモードで開くとダイアログを閉じるまで制御が帰ってこなっかた。 Qtの場合.show()を実行してもステップは次に進むので、 .show()で閉じて、ダイアログを閉じたときシグナルを投げ、元のクラスの スロットで受けて続きの処理を書くの? モーダルモードみたいなものはないよね?
63 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:31:49 ] QDialogならexecで呼べば、普通に処理終わるまで戻ってこないモーダルフォームとして表示できるけど そういうことじゃないの?
64 名前:62 mailto:sage [2009/10/08(木) 22:45:42 ] >>63 そう言うことです。知らなかった(^^; ありがとう
65 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:42:27 ] モーダルあなた疲れてるのよ
66 名前:デフォルトの名無しさん [2009/10/09(金) 20:17:12 ] show()でもモーダルにできます。show()なので表示後すぐに戻って来て、モーダルになります。 1) setModal(true) を設定 - アプリケーションモーダル。 2) setWindowModality(Qt::ApplicationModal) を設定 - アプリケーションモーダル。 3) setWindowModality(Qt::WindowModal) を呼出し、親ウィジェットを 0 以外に設定 - ウィンドウモーダル。
67 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:56:37 ] グループボックスって境界線着いてなかった? 以前のバージョンではGroupBoxをドラッグすると枠つきだったような
68 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:13:11 ] >>67 4.5.2 Windows XP だけど付いてるよ。 どの環境、スタイルでの話?
69 名前:67 mailto:sage [2009/10/10(土) 08:37:06 ] >>68 Linux Ubuntu+Qt45 以前、ボタンの色を設定しようとして断念したものです。 やっぱり、その関係かな?
70 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:52:15 ] >>69 Plastique Style でも Cleanlooks Style でも枠は付いてるな。 ttp://qt.nokia.com/doc/4.5/images/plastique-groupbox.png ttp://qt.nokia.com/doc/4.5/images/cleanlooks-groupbox.png プロパティを変更してないデフォルトのままの QGroupBox を置いて、 プレビューでスタイルを選択しても枠が付いていないようなら 一度Qtをインストールし直してみるのも手かも。
71 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:27:48 ] VCでコンパイルするとソフトの動作が安定したり早くなったり あとコンパイルの時間も早くなったりするの?
72 名前:デフォルトの名無しさん [2009/10/11(日) 15:20:58 ] >>71 使ったことないからよくは分からないけれど、 MinGWにくらべて実効速度が明らかに速いというのは よくネット上で見かける。
73 名前:デフォルトの名無しさん [2009/10/11(日) 19:32:07 ] >>71 安定度は同じ、実行速度はVCの方が見て分かる位に速い。
74 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:55:23 ] >>73 それはない。 MinGWのコンパイラはGCCで、これはVC++より明らかに速い。 たとえばGCCは同一の文字列を一つにまとめるような最適化までする。 有名な話だ。 こういった最適化によって3D計算などではVC++より100倍以上高速化 されたという。 これもinfoに書かれている有名な話。
75 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:00:04 ] Xの描画速度がWindowsより明らかに速いのはgccの最適化が効いているから。 DVDの書き込み速度もLinuxのほうが速い。 俺の環境ではWindowsで1時間かかったのがgccでコンパイルしたLinuxでは 1分かからなかった。 話にならないくらい違う。
76 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:17:53 ] GCCが遅いというのは有名な話だと思ったが、意外にも健闘してるね。 AMDのエンジニアが手を入れたりしてたからなのかな。 bvector.blogspot.com/2009/08/compilers-test-icc-vs-msvc-vs-gcc.html 単に整数演算がそこそこ速いというだけかもしれないけど。 www.osnews.com/story/5602/Nine_Language_Performance_Round-up_Benchmarking_Math_File_I_O/page3/ まぁGCCがMSVC++より明らかに速いというのはどうかなあ…
77 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:17:57 ] QtCreatorでプロジェクトをコンパイルしようとしたのですが、 以下のエラーが出て進みません。 Could not find make command: mingw32-make.exe in the build environment Error while building project testproj When executing build step 'Make' Canceled build. MinGWはインストールしてあります。 何か設定をしていないのでしょうか・・・
78 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:25:20 ] >>76 インテルコンパイラはgccの倍以上遅いんだなあ。
79 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:27:53 ] どっからそんな情報を受信したんだw
80 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:33:15 ] 100倍以上の差があるらしい
81 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:11:24 ] VCでビルド済みのQtを配布しているプロジェクトとかないのかな。 GPL/LGPL用ならライセンス的には問題ないよね?自分でコンパイル したら何時間もかかるから、あったら助かるんだけど。
82 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 22:25:13 ] Qt Creatorも自分で用意すればVCのコンパイラ使えるんだっけ?
83 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 22:33:41 ] DVDの書き込み速度ってOS関係あんの?
84 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 22:49:28 ] >>81 ごっごるこーどにあったと思う
85 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 22:57:19 ] >>84 これかな?最新版はないみたいだけど、いいかも。 ttp://qt.windows.binaries.googlepages.com/index.html あとこんなのもあった。 ttp://code.google.com/p/qt-msvc-installer/
86 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:40:15 ] QtCreatorを使うとき、QPlastiqueStyleなどをデフォルトに指定することは できるの? a.setStyle(new QPlastiqueStyle)で、できるみたいだけど
87 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:23:47 ] >>77 PATH で mingw32-make.exe のあるディレクトリを指定してある?
88 名前:デフォルトの名無しさん [2009/10/12(月) 13:55:59 ] >>86 他には、 アプリケーションのならば、プロジェクトの実行時の設定で-styleオプションでスタイル指定できます。 フォームの編集でならば、場合によっては、オプションのEmbedded Designでスタイル指定という方法もあります。
89 名前:86 mailto:sage [2009/10/12(月) 17:15:45 ] >>88 >プロジェクトの実行時の設定で プロジェクトの実行時の設定タブ内の引数の項目に -style Plastiqueを入れると出来ました。 ただ、ここの引数はRelease版でも、実行時に引数として渡さないとダメですよね?
90 名前:デフォルトの名無しさん [2009/10/12(月) 20:43:09 ] >>89 いつもスタイルを特定のものにするならQApplication::setStyle("plastique") [static] でよいのではないですか。
91 名前:89 mailto:sage [2009/10/12(月) 21:38:36 ] >>90 この書き方もあるんですね ありがとうございまいた。
92 名前:デフォルトの名無しさん [2009/10/14(水) 21:38:08 ] Qt 4.6 Beta と Qt Creator 1.3 Betaがリリースされた。
93 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 13:12:31 ] >>92 そうだね Nokiaが「Qt 4.6」ベータ版を公開、認定プログラムも導入 sourceforge.jp/magazine/09/10/15/0315259 > Nokiaは12日、Qt開発者認定制度「Qt Certification Program」も発表している。 > Qt開発者のスキル、知識などを数段階で評価するもので、「Qt Essentials」 > という試験に合格する必要がある。受験料は199ドル。 おまいら受ける?
94 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 16:01:14 ] ちょーウケルwww
95 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 18:27:48 ] アプリ内で動画再生したいと思うんだけどなんか方法無い? 普通のプレイヤー見たく対応コーデックはなるべく多く
96 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 19:18:32 ] >>95 まずは Phonon で問題ないか調べてみては。
97 名前:デフォルトの名無しさん [2009/10/16(金) 01:48:27 ] Qt Visual Studio Add-in 1.1が出た。 このバージョンは、Visual Studio Integrationに置き換わるものらしい。 これからは、Add-inだけが作り続けられるようだ。
98 名前:デフォルトの名無しさん [2009/10/16(金) 04:14:51 ] >このバージョンは、Visual Studio Integrationに置き換わるものらしい。 このバージョンは、Visual Studio Integrationを置き換えるものらしい。
99 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:50:29 ] いつかはいろんなOSで作ってみたいと思ってるときは VSのAddinでやるよりQT Creatorの使い方を覚えた方がいい?
100 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:37:42 ] 以前は、日本語のHPからQt SDK for Linux/X11 32ビットをDLして インストールするとCreator1.2.1で勝手に日本語になってたと思うんだけど 最近は日本語になってないし、QGui.soがないとかlibがないとか一筋縄で いかないみたいなんだけど、なんかかわった?
101 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:11:15 ] >>100 落としたのは beta? 1.2 から 1.3 でメッセージ関連の変更が多いので今までの飜訳が そのままは使えなくなっている。 1.3 向けの飜訳はまだこれからというところ。 なので現状では日本語は出ない。 正式リリースを待とう。 後者はわからない。どの distribution?
102 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:58:19 ] >>99 たとえWindowsでしか使わなくても、Qt Creator 結構使い勝手いいわよ。
103 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 23:39:57 ] >>99 むしろQT Creatorを使いやすいように改造してしまう 左の縦のボタンバーとか場所取りすぎや…
104 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 23:43:15 ] FakeEmacsつけてほしい。さもなければ、FakeVimをもうちょっと気合い入れてほしい。 FakeVimで使っててもそのうちイーってなって、外部のvim立ち上げてしまう。
105 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:11:24 ] vi厨、Emacs厨はIDEなんかに手出さずテキストエディタでシコシコ開発すればいいじゃん
106 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:13:37 ] 結局のところそれが一番効率良いしな
107 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:32:43 ] なんで、vi、Emacsに IDE風な拡張アドイン作れないんだろうね。 ピリオドおしたらメソッドのリスト表示とか 難しいのかな。
108 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:37:07 ] >>107 vi(クローン)は知らんが、EmacsLispは大量のソースを解析させるには非力過ぎる上にマルチスレッドが使えない。 ……それでもEmacsから逃れられないんだがorz
109 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:39:10 ] Emacsやvimの補完も役に立つけど、今時のIDEの賢い意味のある補完に比べるとな orz
110 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:55:26 ] >>107 ここら辺を使えばできるんじゃないかな。 cedet.sourceforge.net/ ecb.sourceforge.net/ 俺に取っては UNIX が IDE だから、わざわざ 屋上屋を架そうとは思わないけどね。
111 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 02:11:27 ] そのIDEのUNIXで、ピリオド押したら、 そのクラスのメソッドの一覧をだせるのですか?
112 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 02:28:35 ] Creatorは何よりもGo to slotが便利だ これのためだけにVS AddinじゃなくてCreator使ってるといっても過言じゃない
113 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 02:28:37 ] >>96 ありがとう。Phononでいけそうだ。 ただ、WindowsでPhononモジュール追加して コンパイルができない。あははははorz なんかのライブラリとか足りないだけなんだけど、 Windows SDK入れてコンパイルしないといけない?
114 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 09:05:26 ] >>111 それが必要なら勿論そうだよ。俺は要らないけど。
115 名前:デフォルトの名無しさん [2009/10/17(土) 09:26:09 ] >>111 クラスメソッドの一覧が出るとどれくらい楽になりますか。
116 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 10:31:05 ] >>113 mingw が DirectShow をサポートしてないから Nokia のオープンソース版の バイナリだと Phonon が入ってない。 ttp://labs.trolltech.com/blogs/2009/07/15/phonon-and-mingw-a-story-about-true-windows-love/ を参考に Qt を作り直す手もあるけど、どうせ作り直すなら Windows SDK でビルドし直した方がいいか。 試してないけど、 >>85 にVCでビルドしたバイナリについて書いてあるから、 それに Phonon が入ってるか確認してみるのもいいと思う。
117 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 11:25:17 ] >>116 やっぱそういうことなのか。 ちょっと大変だな。 Visual Studio 2008は持っているんだが、オープンソースで作ることを考えると 無料のWindows SDKでのやり方を知っておいたほうが良いし、 phonon使うだけで、Windows開発環境のお勉強w 環境変数の設定とか、何がなにやら。VSは基本IDEでやっていたしなー。 将来のqt(mingw)ではデフォで含まれるようになるのだろうか? WindowsだとDirectShow以外にもVLCバックエンドとかmplayerバックエンドも 使えるみたいだが、それを利用する方法(VLCインスコ? そのまま使える?)とかまだ調べて無いし、 道のりは長そうだ。phonen利用のための最短ルートの日本語解説がほしいぜ
118 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:09:57 ] Windows SDK でのビルドは難しくないし、VS2008 が入ってるなら VS2008 のコマンドプロンプトからやっても同じと考えていい。 メニューからそれぞれのコマンドプロンプトを立ち上げれば環境変数も あらかた設定されてるし。 手順的には VS2008 or Windows SDK のコマンドプロンプトから <Qtの展開したディレクトリ>/bin を PATH に追加して、 configure && nmake でだいたいはOK。 configure のログはちゃんと確認して欲しいモジュールが含まれているかの チェックはしておくべき。 後、シャドービルドはいろいろめんどくさかった記憶がある。 ので、展開したディレクトリでビルドだな。 Qtのビルドはかなりディスク容量を食うのが問題なんだが。
119 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:39:33 ] VS2008 のコマンドプロンプトつかってないもんでw あと、俺のマシンがWin7 RC & 64bit なんで、 64bit 版 SDK入れれば良いの? 64bitコンパイラ? 32bit 版入れればどうなるんだろう?そもそも64bit版を作るときはどうするの?とか 最新のSDKはWin7対応の7.0だけど、6.1使ったほうが良いかな? 無理に新しいのを入れると、なんか変なところではまりそうだけど 古いのでWin7で動くのか?とか。 今すでにmingw別にいれてんだよなー。とか変にコンパイラ、ライブラリ ごっちゃにならないよなぁ。環境変数の変更が、今ある別の開発環境に影響しないよなーとか そういう基本的な知識を放置していたので、そういう疑問点が気になってしまってw
120 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:12:21 ] VC++ 2008 Express Editionでもビルドできますか
121 名前:デフォルトの名無しさん [2009/10/17(土) 13:43:49 ] Pythonで開発してます qtのいろんなオブジェクトはconnectっていうメソッドを持ってますが どれでconnectしてもかまわないのでしょうか?
122 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:02:16 ] >>120 できる 検索すれば手順を書いたブログが出てくるよ
123 名前:デフォルトの名無しさん [2009/10/17(土) 14:14:05 ] >>121 Pythonのことはよく理解していないので、質問の意味が今ひとつ分からないんだけど、 それでいいと思う。 C++での話だけど。 シグナルとスロットを使用しているQtのクラスは、QObjectを継承して、 そのQObjectにはconnect()が定義されている。 C++では、各オブジェクトからconnect()を使用するときは、 static版の同一のconnect()を使用している例が多い。
124 名前:123 [2009/10/17(土) 14:28:15 ] pythonのことちょっと調べてみたので補足する。 pythonの場合、selfが省略できない。C++では、thisがこのselfにあたる。 C++では、thisを省略して書くことが多い。だら、C++の例題で connect(... となっているのは、 this.connect(.. の可能性がある。少なくともQtを使用しているならそうなる。 PythonもC++と同じような実装ならば、 self.connect(... と書いてあるのは、同じconnectを使用していることになる。
125 名前:123 [2009/10/17(土) 14:29:35 ] 訂正 誤)this.connect(.. 正)this->connect(...
126 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:39:03 ] _ ∩ ( ゚∀゚)彡 ぱいそん!ぱいそん! ( ⊂彡 | | し ⌒J
127 名前:デフォルトの名無しさん [2009/10/17(土) 16:32:16 ] Ubunutu9.04を使ってます。 qtcreatorが日本語にならないのですが、 どこかに日本語化の手順をまとめたサイトはないでしょうか???
128 名前:デフォルトの名無しさん [2009/10/17(土) 16:55:39 ] >>127 知らないんだけど。 qtcreatorのバージョンはいくつ? パッケージシステムでインストールしたの?
129 名前:128 [2009/10/17(土) 17:14:44 ] 環境は、i386? もし、qt-creator_1.0.0-0ubuntu3_i386.debをインストールしたのなら、 バージョンが古いから、下記サイトから最新安定版の1.2.1をダウンロードした方が いいよ。これは、日本語化されているから。 qt.nokia.com/downloads i386/32-bitなら”Qt Creator 1.2.1 Binary for Linux/X11 32-bit (31 Mb)” を選べばよい。 インストーラーがついているから、インストールは簡単。 一般ユーザー権限しかなくても自分のホームディレクトリ以下にインストールできる。 ビルド時にQtディレクトリーが無いって、エラーが出たら メニューの「ツール」->「オプション」->「Qt4」->「Qt Versions」のところで、 インストール済みのQtへのパスを追加指定して、「Rebuild」ボタンを押す。 チェックマークがつけばOK。 そして、「デフォルトQtバージョン」のところから追加したQtを選択すればよい。
130 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:33:45 ] スレタイに Mac って入ってるけど、Mac 版の Qt は Cocoa 化されてからまともになったの? 以前試した時は見た目も日本語化も使えるレベルに到達していないと感じたけど、wx みたいに OS にバンドルされる様になるのかな。
131 名前:デフォルトの名無しさん [2009/10/17(土) 17:56:59 ] >>130 ここに情報が載っている。 ttp://gihyo.jp/dev/serial/01/qt-2009/0003
132 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:02:49 ] >>131 ありがとん。Mac でも使えるという情報がもう少し出てきたら試してみます。
133 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:23:16 ] QMainWindow上にQGraphicsViewを置いて、GraphicsView上でマウスがクリックされたら その座標を知りたいのですが、mousePressEvent()ってGraphicsViewをサブクラス化して 使わなくてはならないのでしょうか? QtCreatorのDesignerからこの辺さくっと書けないのですかね?
134 名前:デフォルトの名無しさん [2009/10/17(土) 20:14:51 ] ウィンドウにボタンを二つ上下に並べてみようと思ったんですが これだとめっさ小さなボタンになってしまいます. ウィンドウ一杯に(日←みたいな感じで)二個並べたいんですが どうしたらいいんでしょう?wxPythonでサイザーをちょっと 使ったことがある程度です. import PyQt4.QtGui,PyQt4.QtCore, ys class HelloButton(PyQt4.QtGui.QPushButton): def __init__(self, parent, text): PyQt4.QtGui.QPushButton.__init__(self, parent) self.setText(text) class HelloWindow(PyQt4.QtGui.QMainWindow): def __init__(self, *args): PyQt4.QtGui.QMainWindow.__init__(self) self.hello_button_1 = HelloButton(self, "hello1") self.hello_button_2 = HelloButton(self, "hello2") self.qVBoxLayout = PyQt4.QtGui.QVBoxLayout() self.qVBoxLayout.addWidget(self.hello_button_1) self.qVBoxLayout.addWidget(self.hello_button_2) self.q_widget = PyQt4.QtGui.QWidget(self) self.q_widget.setLayout(self.qVBoxLayout) q_application = PyQt4.QtGui.QApplication(sys.argv) hello_window = HelloWindow() hello_window.show() q_application.connect(q_application, PyQt4.QtCore.SIGNAL("lastWindowClosed()"), q_application, PyQt4.QtCore.SLOT("quit()")) q_application.exec_()
135 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:22:50 ] >>134 各ボタンの sizePolicy に Expanding とか MinimumExpanding とか指定する。 ttp://qt.nokia.com/doc/4.5/qsizepolicy.html#Policy-enum
136 名前:デフォルトの名無しさん [2009/10/17(土) 20:31:12 ] 127 NOKIAのサイトからダウンロードしたqtcreatorも日本語化されてないようです。 試してみたけどだめでした。 具体的に日本語化されるには何というファイルがどこにあればいいのでしょうか? qtcreatorはUbuntu9.04の奴です。
137 名前:デフォルトの名無しさん [2009/10/17(土) 21:17:22 ] >>135 ありがとう.望むものになりました. setCentralWidget をしてなかった. それが何を意味するのかこれから勉強します. QMainWindow に直接 setLayout しようとしてみたり, なんか基本が分かってない俺. 新しいフレームワークを使い始めた時はそんなもんかな.
138 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:28:51 ] 一覧から選ぶより自分でtypeした方が速いから ピリオド押した瞬間にドロップダウンが出てくると イラッとする漏れって
139 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:30:54 ] >>136 ubuntu 9.04 で Nokia から取ってきた qtcreator 1.2.1 / qt-sdk 2009.04 で 問題なく日本語になってるぞ。 1.2.1 で日本語になってないとしたら、 LANG 環境変数は何になってる? LANG を ja_JP.UTF-8 にして起動してもだめ?
140 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:31:11 ] なら、そのまま入力すれば? 別に選ばなくても良いんだよ。
141 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:32:23 ] QtCreatorの方式なら自分でタイプした方が早いってのは稀だろ
142 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:05:27 ] そうやってどんどん重量級になっていくんだなw
143 名前:デフォルトの名無しさん [2009/10/17(土) 22:29:27 ] /opt/qtsdk-2009.04 $ echo $LANG /opt/qtsdk-2009.04 ja_JP.UTF-8 なぜだ??
144 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:32:09 ] 一つ気になるのは、PyQtを動かすためにQtが必要であること。 まぁQtへのバインディングと考えれば必要なのは理解できるんですが、 これを各マシンにインストールするのは面倒すぎます。 もし可能であればネットワークにQtを置いて、環境変数でそこを指すようにして、 ネットワークで共有、ってことをやりたい。 それが出来るんならまぁ使ってもいいかな、って気がします。 ところで、wxPythonと比較してPyQtは何に優れてるんですかね。 AutodeskがPyQtを推す意味って何なんだろうか。
145 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:36:29 ] 誰かがwxスレでQtの宣伝をし過ぎた所為なのかしらんが、二つのスレがシンクロしだしたな
146 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:40:15 ] 要らん時までパカパカ補間ウインドウひらくわりに肝心なときには補間できないという難点がある品。 調べたいことがあったらその時バッファにカーソル下の該当ワード拾ってヘルプウィンドウ開くさ。 Windows流の窓最大化文化ばかりが全てじゃないって話。
147 名前:デフォルトの名無しさん [2009/10/17(土) 22:43:39 ] >>133 アイテム以外のところ? だったら、Designerで格上げ機能を使えば、カスタムクラスみたいにできるよ。 でもこれだと、カスタムクラスを書くのと変わらないかもしれない。 コードを書くのででいいのならば、イベントフィルターをそのGraphicsViewにインストール すれば、イベントをハンドルできるよ。 でも、GraphicsViewをカスタムクラスを使わないで作るのって大変じゃない?
148 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:47:36 ] >>146 補間ウインドウ? 最大化? お前さ、実はしらんだろ。何も。
149 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:55:04 ] スレがめっちゃ伸びててびっくりした Autodesk?Mayaで使うの?そのうちPyQtスレが必要になるのかも知れないなあ
150 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:57:38 ] Qtはいま絶好調だからね。 企業サポート LGPL Qt Creator WebKit統合 マルチメディア統合 組み込み・モバイル対応 開発速度も速い。
151 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:01:15 ] >147 レスありがとうございます。 Designerの格上げってサブクラス作るって事なのですね。。 格上げするのはいいけど、格上げしたクラスのヘッダファイルがないと言われました。 これがカスタムクラス書くのと変わらないという意味なのでしょうか。 イベントフィルター云々はどのようにやるのでしょうか? やりたいことは、単に何かのコントロール(QtではWidget?)に絵を表示させて、 マウスを当てたらその座標の画素の色情報をツールチップかなんかで見れるということです。 .NETだとイベントを選べば、勝手に関数ができてそこにコードを書くだけで良かったのですが、 Designer使ってもそこまで簡単には行かないっぽいのかな。
152 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:07:51 ] でも今 PyQtの品質が微妙なので、PySideにがんばってもらわなければ。 PySideががんばっている分、 boost.python もどんどん良くなってる。
153 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:09:50 ] >>150 >組み込み・モバイル対応 iPhone でも Android でも webOS でも使えないんだよね? Maemo は結局 Gtk+ のままだし、Qtopia は Zaurus も とっくにディスコンになって、どうなるんだろね
154 名前:デフォルトの名無しさん [2009/10/17(土) 23:20:33 ] >>136 前スレ(Qt総合スレ4)の804、805、811、816、819、820、821を呼んでみたらいいと思う。 特に、816以降。 こちらでは、グーグルで検索して、キャッシュで見ることができた。 話は変わるけど。 こっちで試してみたら、2回目の起動で日本語化された。 もう一回起動してみても日本語化されない。
155 名前:154 [2009/10/17(土) 23:21:37 ] 訂正 >もう一回起動してみても日本語化されない。 もう一回起動してみても日本語化されない?
156 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:35:44 ] >>153 QtはNokiaが買収したんだぜ? スマートフォン世界最大販売数を誇るSymbian提供してるところに
157 名前:デフォルトの名無しさん [2009/10/17(土) 23:37:03 ] >>144 >もし可能であればネットワークにQtを置いて、環境変数でそこを指すようにして、 >ネットワークで共有、ってことをやりたい。 >それが出来るんならまぁ使ってもいいかな、って気がします。 今は無理だけど、将来そうなると思う。 >ところで、wxPythonと比較してPyQtは何に優れてるんですかね。 >AutodeskがPyQtを推す意味って何なんだろうか。 Pythonは詳しくないけどC++でいえば、やっぱり楽にプログラミングできる ことじゃない? PythonのバインディングにPySideも加わった。 ttp://sourceforge.jp/magazine/09/08/20/072238
158 名前:デフォルトの名無しさん [2009/10/17(土) 23:43:59 ] >>153 >Maemo は結局 Gtk+ のままだし、Qtopia は Zaurus も >とっくにディスコンになって、どうなるんだろね Qt4.6でMaemoのサポートが入ってくる。 ttp://journal.mycom.co.jp/articles/2009/10/15/qtdev1/ ttp://qt.nokia.com/about/news/nokia-releases-qt-4.6-and-qt-creator-1.3-betas-including-support-for-symbian
159 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:44:13 ] >>156 開発者を S60 から Qt に移行させるのは大変だと思うぜ。 最大販売数って言うけど、Qt なんか関係ないローエンドの機種を 大量に売ってるからじゃなかったっけ。ハイエンド機種も日本じゃ 売ってないし、iPhone や Android に比べてどうだろうね。
160 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:52:04 ] >>158 Maemo のネイティブ API も Qt ベースになるんだね。 古い情報を見てたわ。 wiki.maemo.org/Qt4_Hildon
161 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 23:56:14 ] 今はまだ過渡期状態だけど、 凄いスピードで進んでいると思うよ。 停滞しているどっかの何かよりかは ずっと期待できるな。
162 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 00:08:07 ] NOKIA は Maemo も Symbian も全部 Qt ベースにするつもりだね。 もっとも、製品に乗るのは早くても来年の終わりか再来年になるだろうけど。 けど、日本ではあまり関係なさそうだな。 もう一度日本市場に戻ってくるかは疑問だし、戻ってきたとしても売れるかというと。 Symbian Foundation にも Qt が入ってくるだろうから、そのときに 日本で Symbian 使ってるところが使うことになるのかな。
163 名前:デフォルトの名無しさん [2009/10/18(日) 00:30:14 ] >>162 >NOKIA は Maemo も Symbian も全部 Qt ベースにするつもりだね。 >もっとも、製品に乗るのは早くても来年の終わりか再来年になるだろうけど。 下記に、Qt4.6 のリリース予定は、2010年の第1四半年となっているけど、 これだとそれくらいになるの? qt.nokia.com/about/nokia-announces-official-qt-port-to-maemo-5
164 名前:デフォルトの名無しさん [2009/10/18(日) 00:39:41 ] Symbian Foundation Japanの公式ブログ ttp://blogjp.symbian.org/ ここで、YouTubeにアップされた携帯電話で動くQtのデモのが見れる。 下記はリンク元。Qtのデモ映像がたくさん見れる。 www.youtube.com/user/QtStudios
165 名前:デフォルトの名無しさん [2009/10/18(日) 01:54:45 ] >>151 >Designerの格上げってサブクラス作るって事なのですね。。 >格上げするのはいいけど、格上げしたクラスのヘッダファイルがないと言われました。 カスタムクラスなんだけど、格上げは、Designerで配置したQWidgetなどに、 カスタムクラスを組み込むもの。 だから見た目は、Designer上で設定できて、なおかつそのクラスの振る舞い定義として、 コードを各個とができる。 通常のサブクラス化で行うようなクラスヘッダファイルと、実装ファイルを定義すればよい。 >これがカスタムクラス書くのと変わらないという意味なのでしょうか。 そう。結局コード書かないといけないという意味で。 >イベントフィルター云々はどのようにやるのでしょうか? QObjectを継承したクラスのイベントをハンドルできる機能。 QWidgetもQObjectを継承しているから、ほかのウィジットのイベントをハンドルできる。 イベントをハンドルする側にeventFilter()を定義し、ここでイベント処理の内容を書く。 そして、イベントをハンドルされる側のinstallEventFilter()をコールして、 イベントをハンドルする側のオブジェクトを引数として渡す。
166 名前:165 [2009/10/18(日) 01:57:05 ] >>151 >やりたいことは、単に何かのコントロール(QtではWidget?)に絵を表示させて、 >マウスを当てたらその座標の画素の色情報をツールチップかなんかで見れるということです。 例えばメインウィジットMainWidgetがイベントをハンドルする側で、イベントをハンドルされる側が PictWidgetとすると、MainWidgtにeventFilter()を定義し、 pictWidget->installEventFilter(mainWindow); などすればよい。 MainWidet::eventFilter()は、例えば次のようになる。 bool MainWidget::eventFilter(QObject* iObject, QEvent* iEvent) { Q_UNUSED(iObject); if(iEvent->type() == QEvent::MouseButtonPress) { // ここに処理を書く return true; } return false; } なお、もちろんイベントをハンドルするクラスを独立に定義してもよい。 イベントフィルタでは、全部のイベントがハンドルできるから特定のイベントをif文で 切り分けなければならない。 個人的には、イベントフィルター専用クラスを用意して使いまわすようなことがないのなら、 やっぱり、通常のカスタムクラスか格上げのほうがいいような気がするけど。
167 名前:165 [2009/10/18(日) 01:58:51 ] >>165 訂正 >コードを各個とができる。 コードを書くことができる。
168 名前:165 [2009/10/18(日) 02:08:20 ] >>166 ごめん。再び訂正 bool MainWidget::eventFilter(QObject* iObject, QEvent* iEvent) { if(iObject == pictWidget) { if(iEvent->type() == QEvent::MouseButtonPress) { // ここに処理を書く return true; } return false; } else { return QWidget::eventFilter(obj, event); } } 上記の return QWidget::eventFilter(obj, event); のQWidgetは、MainWidgetの基底クラスと仮定して書いた。
169 名前:デフォルトの名無しさん [2009/10/18(日) 02:13:22 ] >>168 再び訂正 誤)return QWidget::eventFilter(obj, event); 正)return QWidget::eventFilter(iObject, iEvent);
170 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 02:13:28 ] >157 ttp://blog.taikomatsu.com/2008/06/21/pyqt4メモ/
171 名前:デフォルトの名無しさん [2009/10/18(日) 13:42:32 ] >>151 >Designerの格上げってサブクラス作るって事なのですね。。 >格上げするのはいいけど、格上げしたクラスのヘッダファイルがないと言われました。 格上げとは、DesignerプラグインにはしていないウィジェットをDesignerのフォームで使えるようにする機能です。 例えば、QPushButtonを継承して作ったPushButtonウィジェットがあって、Designerプラグインにはしていないとします。 そうすると、これから作ろうとするフォームにPushButtonウィジェットを入れることができません。そこで、Designer で既に使えるようになっているQPushButtonを格上げ、つまり、サブクラスのPushButtonと入換えれば、殆どの属性は 同じなので、独自に追加したプロパティの他は、Designerで操作しながらフォームを作成できます。PushButtonは、 別に作成しておくクラスなので、その実装コードやヘッダーは別に用意します。PushButtonは、C++のみで作成してもよいし、 Designerを使って作成してもよいです。
172 名前:デフォルトの名無しさん [2009/10/18(日) 13:52:34 ] 821 :818[] 投稿日:2009-09-15 16:59:28 >819-829 おっけー! 日本語表示になりました。 他の誰かが幸せになれるようにFreeBSD 7.2 でQtCreator導入の手順をまとめておきます。 ================================================== 1. portsからmake install # cd /usr/ports/devel/qtcreator # make install 2. そのままだと(参照する翻訳ファイルの名前が間違えているので)日本語で表示されないのでリンクを張る # cd /usr/local/share/qtcreator/translations # ln -s qtcreator_ja.pm qt_ja_JP.qm 3. 環境変数のLANGを日本語ロケール(うちの場合はja_JP.UTF-8)にしてqtcreatorを立ち上げればメニュー等が日本語で表示される # exports LANG=ja_JP.UTF-8 ==================================================
173 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:07:51 ] みんな知ってるよ
174 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:26:07 ] プログラム中でLayoutするのが面倒ですが QWidgets配置をdesignしたschemeをXMLとかで出力して それに応じてプログラム中でautoでQWidgetsを 配置していってくれるツールはありますか?
175 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:29:39 ] Qtでは,ウィンドウのデザインは次の3つの方法でできます. * C++のソースに直接記述 必要なクラスを作成して,プログラム中に直接記述します. * XMLでインターフェースを記述 WindowsのXAMLのように,デザインの情報をXML(uiファイル)で記述します. 私は,この方法がもっとも性に合っていますが,QtのインターフェースのXMLのマニュアルを見つけることができませんでした.今のところ,諦めています. * Qt Designerでuiファイルを作成 マウスとキーボードを用いて,uiファイルを作成します.もっとも手軽に,インタフェースの作成ができるでしょう.
176 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:34:24 ] www.off-soft.net/ja/develop/qt/qt1-3.html
177 名前:デフォルトの名無しさん [2009/10/18(日) 15:58:59 ] >>171 >PushButtonは、C++のみで作成してもよいし、Designerを使って作成してもよいです。 Designerで作成する方法は、今のバージョンでも使用できる?
178 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 16:15:04 ] >>176 出来ました ありがとうございました
179 名前:デフォルトの名無しさん [2009/10/18(日) 17:30:03 ] >>177 Qt Creatorと併せて使えばできます。 Qt Creatorの "新規作成" の "Qt デザイナフォームクラス" を使えば、 フォームに加えて実装部とヘッダー部のテンプレートが作られます。
180 名前:デフォルトの名無しさん [2009/10/18(日) 17:39:52 ] >>174 Qt Desingerで配置して、QUiLoaderを使うというのはどうですか。 Qt 4.5: QUiLoader Class Reference doc.trolltech.com/4.5/quiloader.html
181 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:58:16 ] >>180 ありがとうございます >>176 さんのところに書いてありました
182 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:15:42 ] >>180 横から便乗だけど PyQt でも QUiLoader 使える?
183 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:21:28 ] >>182 ダメポ 12 Using Qt Designer Qt Designer is the Qt tool for designing and building graphical user interfaces. It allows you to design widgets, dialogs or complete main windows using on-screen forms and a simple drag-and-drop interface. It has the ability to preview your designs to ensure they work as you intended, and to allow you to prototype them with your users, before you have to write any code. Qt Designer uses XML .ui files to store designs and does not generate any code itself. Qt includes the uic utility that generates the C++ code that creates the user interface. Qt also includes the QUiLoader class that allows an application to load a .ui file and to create the corresponding user interface dynamically. PyQt does not wrap the QUiLoader class but instead includes the uic Python module. Like QUiLoader this module can load .ui files to create a user interface dynamically. Like the uic utility it can also generate the Python code that will create the user interface. PyQt's pyuic4 utility is a command line interface to the uic module. Both are described in detail in the following sections. ttp://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html ttp://www.nabble.com/QtUiTools,-QUiLoader-and-uic-module-td19878875.htmlwww.nabble.com/QtUiTools,-QUiLoader-and-uic-module-td19878875.html
184 名前:デフォルトの名無しさん [2009/10/18(日) 18:28:15 ] >>179 レスありがとう。 でも知りたいのは、Qt Creatorではなく、今のバージョンのDesignerにPushButtonを 作る機能があるのかないのかが知りたいんです。
185 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:33:36 ] >>183 それ出来るっていう意味で書かれてるんじゃないの?
186 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:36:38 ] Qtスレがこれほど活発だってのに、Gtkスレは閑古鳥だな… うらやましい限りだ。
187 名前:デフォルトの名無しさん [2009/10/18(日) 18:42:27 ] >>186 Gtkスレってどれのこと?
188 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:51:20 ] Qtのコンパイルってどんだけ時間かかるんだよorz
189 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:58:14 ] >>187 Gtkプログラミング on Windows!!! pc12.2ch.net/test/read.cgi/tech/1147024203/ 上のスレのことだけど、他にもあったのか?
190 名前:デフォルトの名無しさん [2009/10/18(日) 19:01:13 ] >>189 やっぱりこれのことか。 ありがとう。 Gtkならほかにもスレッドがありそうな気がして、自分が見落としているのかと思って。
191 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 19:09:13 ] 他にもあるよ。 GTK+プログラミング pc11.2ch.net/test/read.cgi/linux/1188968326/
192 名前:デフォルトの名無しさん [2009/10/18(日) 19:11:29 ] Gtkはなぁ・・・ Windowsで使うものじゃないと なぜか決めつけてかかってる俺
193 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 19:24:50 ] 奇麗に棲み分けできてるからね。 Win : 色々ある UN*X : ほぼ Gtk+ Mac OS X : ほぼ Cocoa
194 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:10:25 ] KDE派だからLinuxでもQtな俺
195 名前:デフォルトの名無しさん [2009/10/18(日) 20:28:35 ] >>191 ありがとう。 見てきた。
196 名前:デフォルトの名無しさん [2009/10/18(日) 21:19:24 ] >>184 Designerは、フォームの上にウィジェットを並べる機能のみを提供するので、 将来サブクラスを作れるような機能は追加されません。
197 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:26:25 ] やっとコンパイル終わったよ。4時間ぐらいたってねーか?
198 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:38:21 ] 友愛とUIを掛けてるのか
199 名前:デフォルトの名無しさん [2009/10/18(日) 23:25:59 ] >>196 ありがとう。
200 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:27:18 ] QtCreatorのソースファイルツリーってフォルダ階層作れないのかな? ファイル数増えたら見づらくなりそう。
201 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:41:59 ] >>182-185 QUiLoader そのものはだめだけど uic.loadUi で逝けるみたい import sys from PyQt4 import QtCore, QtGui, uic class HelloWindow(QtGui.QMainWindow): def __init__(self, *args): QtGui.QMainWindow.__init__(self, *args) uic.loadUi('mydesign.ui', self) self.connect(self.myPB, QtCore.SIGNAL('clicked()'), self.onMyPBClicked) @QtCore.pyqtSignature('') def on_myPB_clicked(self): print 'a' def onMyPBClicked(self): QtGui.QMessageBox.information(self, self.tr('clicked'), self.tr('hoge')) app = QtGui.QApplication(sys.argv) w = HelloWindow() w.show() sys.exit(app.exec_()) ttp://techbase.kde.org/User:Axiom
202 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:02:46 ] >165 MainWidget +PictWidget +StatusBar みたいに、メインウィンドウ上に画像Widgetとステータスバーがあり、 画像の画素情報をステータスバーにも反映させたいような場合、 MainWidgetでイベント処理するのが適当だと思うのですが、 mouseMoveEvent()メンバ関数をオーバーライドするような感じではないのですね。 もう少し勉強してみます。ありがとう。 仮にDesignerで何らかのWidgetを格上げしたPictWidgetのmouseMoveEvent()を オーバーライドして処理しようにも、親のMainWidgetのメンバ(例えばStatusBar)とかアクセスできない ですよね。入門Qt4プログラミングは購入したので、7章あたり読んでみます。
203 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:03:19 ] >>201 ありがとうございます @QtCore.pyqtSignature('') def on_myPB_clicked(self): print 'a' これだけでも呼ばれているってことは connectも自動でやってくれるんですね
204 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:06:27 ] あ myPB の位置を XML で property geometry で指定してても その位置に出て来ないですね 指定の仕方が間違ってるのかな もう少し勉強してみます
205 名前:デフォルトの名無しさん [2009/10/19(月) 00:20:33 ] >>200 次期リリースの1.3のベータ版なら実ファイル階層を区分けして表示してくれるよ。 ただし、ヘッダ、実装ファイル、リソースファイルなどに大きく区分けされて、 その中にそれぞれのフォルダーが表示される。 ただし、この版では日本語化されていないし、日本語の入力もできなかった。 (環境がLinuxでの話) qt.nokia.com/developer/qt-creator-1.3-preview 下記のYouTubeのQtStudiosのQt Creator-Rename, find...というのを見れば、 新しく実装されたリネームや検索機能の使用の様子が見れるよ。 ここには、その他にもQt Creatorの使っている様子などアップされている。 www.youtube.com/user/QtStudios
206 名前:デフォルトの名無しさん [2009/10/19(月) 00:27:25 ] Qt iPhone: qt.gitorious.org/+qt-iphone/qt/qt-iphone-clone
207 名前:デフォルトの名無しさん [2009/10/19(月) 00:52:23 ] >>202 >MainWidget >+PictWidget >+StatusBar QtのQMainWindowには、MenuBar、ToolBar、DockWidget、CentralWidget、StatusBar を配置する場所が予め用意されているから、通常は、ステータスバーはメインウィジットに配置する。 MainWidgetがQMainWindowを継承していないのならば、継承させた方が楽できていいと思うけど。 下記に、メインウィンドウと書いてあるから、QMainWindowから派生していたら、ごめん。 >MainWidget >+PictWidget >+StatusBar >みたいに、メインウィンドウ上に画像Widgetとステータスバーがあり、 >画像の画素情報をステータスバーにも反映させたいような場合、 >MainWidgetでイベント処理するのが適当だと思うのですが、 >mouseMoveEvent()メンバ関数をオーバーライドするような感じではないのですね。 >もう少し勉強してみます。ありがとう。 1例として、PictWidgetでは、クリックされたらそれを知らせるシグナルを発生するようにし、 引数として、必要な情報を渡すようにする。 そして、MainWindowにスロットを定義して、そこで処理関数を書けばよい。 もちろん両者を接続する必要する。
208 名前:207 [2009/10/19(月) 00:53:19 ] つづき >>202 >仮にDesignerで何らかのWidgetを格上げしたPictWidgetのmouseMoveEvent()を >オーバーライドして処理しようにも、親のMainWidgetのメンバ(例えばStatusBar)とかアクセスできない >ですよね。入門Qt4プログラミングは購入したので、7章あたり読んでみます。 Qtでは、Widgetに親子関係がある。通常コンストラクト時に親ウィジットを引数として渡す。 あるいは、レイアウトクラスが参照処理を行ってくれる。 だからparentWidget()をコールすれば親ウィジットのパブリックな関数をコールできる。 このばあい、 MainWindow* mainWindow= qobject_cast<MainWindow*>(parentWidget()); if(mainWindow) { //... } のようにキャストの必要がある。 それに、親ウィジットに限らず、必要なら通常C++と同様にのメンバーポインターとして ほかのウィジットを参照させればいいだけ。
209 名前:207 [2009/10/19(月) 00:57:33 ] つづき >>202 >ですよね。入門Qt4プログラミングは購入したので、7章あたり読んでみます。 ごめん、購入したいとは思っているんだけど、まだ買ってない。
210 名前:207 [2009/10/19(月) 01:02:16 ] >>202 >オーバーライドして処理しようにも、親のMainWidgetのメンバ(例えばStatusBar)とかアクセスできない >ですよね。 MainWidgetがQMainWindowを継承しているのならば、StatusBarを取得する関数がある。 無ければ自分で書けばいいだけの話のような気がするけど。
211 名前:207 [2009/10/19(月) 01:26:31 ] >>202 >MainWidgetでイベント処理するのが適当だと思うのですが、 これは、設計によりけりだと思う。 >mouseMoveEvent()メンバ関数をオーバーライドするような感じではないのですね。 上で書いた方法で、StatusBarを参照できるから、この方法、つまりCentralWidgetが 自分に関する処理を自分で行うのも、ありだと思うけど。
212 名前:200 mailto:sage [2009/10/19(月) 02:06:19 ] >>205 おお、もう実装予定なのか! リネーム機能も良さげだし、QtCreatorすばらしいな。
213 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:18:50 ] Windowsで64bitアプリって作れますか?
214 名前:デフォルトの名無しさん [2009/10/19(月) 02:59:28 ] >>212 205に書いてある通り、開発版では実装済み。 リンクたどって、開発版を試しにインストールしてみれば試せるよ。
215 名前:デフォルトの名無しさん [2009/10/19(月) 03:10:38 ] >>213 MSVCなら可能。MinGWは、コンパイラーが対応してないせいで今のところ無理みたい。 doc.trolltech.com/4.5/supported-platforms.html
216 名前:215 [2009/10/19(月) 03:14:38 ] ごめん、MinGWも可能みたい。
217 名前:213 mailto:sage [2009/10/19(月) 03:25:20 ] とりあえずMSVCでできたっぽい。 バイナリ無くてコンパイルに時間がかかるから試行錯誤にも時間がかかる。 やりかた書いて良いよね? でも疲れたから今日は寝る。 一応qt creatorの64bit版を置いとく。 ftp://ftp.trolltech.com/qtcreator/snapshots/2009-05-25/ 64bit版を使わないとデバッグができない。32bit プロセス(qt creator)から 64bit DLL(CDBデバッガ)を読み込めないから当然か。 残念ながらこれ以降、今日までの間に64bitバイナリは無いようだ。 最新のが使いたいなら自分でコンパイルしろと。
218 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 15:19:29 ] Qt Creator 1.3 betaをダウンロードしてWindows/TDM's MinGWでQtを使い始めてみてるんだけど, なかなか調子よく動くんで喜んでいたら,UNICODE関連で引っ掛かった。 ::MessageBox(NULL, "こんにちは", "Title", MB_OK); と書いたら,コンパイルエラーになったので,MessageBoxAに変えたらコンパイル通って,ちゃんと 動いた。つーことは _UNICODE が定義されてるってことだよね。 ソースファイルは他のエディタで開いてみたらShift_JISだったので, ::MessageBox(NULL, L"こんにちは", L"Title", MB_OK); にしてみたり,tchar.hをインクルードして, ::MessageBox(NULL, _T("こんにちは"), _T("Title"), MB_OK); と書いてもコンパイルエラーになる(もちろんMessageBoxWでも同じこと)。 MinGW32-g++のコマンドラインオプションに -finput-charset=CP932 と -fexec-charset=CP932 を 設定すれば直ることはわかってるんだが,ヘルプを見てもプロジェクトファイル(.pro)にそのような 指定はできないようだし,どこかで設定できないのかな? 今回の例はMessageBoxなのでQMessageBox使えって言われそうだけど,他にもAとWの両方が あるWIN32 APIは沢山あるわけで,どうやって解決したらいいのか知ってる人がいたら教えてください。
219 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 15:44:01 ] なんでクロスプラットフォームなQt使っていて わざわざWindows専用のMessageBoxなんて使うの? QMessageBoxつかえばいいじゃない。
220 名前:219 mailto:sage [2009/10/19(月) 15:45:33 ] うん。最後の一段落見逃してたw 言い直す、 他にもWIN32 APIの代わりのQなんたらがあるじゃない。
221 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 15:47:53 ] コンパイルエラー、貼らないと
222 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 15:58:14 ] ソースをUTF-8で保存
223 名前:218 mailto:sage [2009/10/19(月) 16:04:02 ] >>219 Qtの設計思想からして,何でも揃ってるんなら,そういう行き方で行くべきなんでしょうね。 始めたばかりだからよくわからないんですが,WIN32 APIにあるような機能をもったものは, ほぼ何でもあるんでしょうか? >>220 ですね。よく調べたら定義済みなのは UNICODE で _UNICODEじゃなかったので_T( )を使った場合は ::MessageBoxAが呼び出されてたんですが,少なくとも, ::MessageBoxW(NULL, L"こんにちは", L"Title", MB_OK); と書くと, C:/Documents/Software/Qt/DialogTest/mainwindow.cpp:35: error: converting to execution character set: Illegal byte sequence というエラーメッセージが出ます。MinGW32-g++のコマンドラインオプションに -finput-charset=CP932 と -fexec-charset=CP932 を書くと,ソースコードがSJISでも問題ないことはQtとは無関係の他のIDEで 確認済です。
224 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 16:13:53 ] -fexec-charset=UTF-16LE?
225 名前:218 mailto:sage [2009/10/19(月) 16:21:11 ] >>223 自己レス。 > ですね。よく調べたら定義済みなのは UNICODE で _UNICODEじゃなかったので_T( )を使った場合は > ::MessageBoxAが呼び出されてたんですが, この記述はウソでした。_T( )が wchar_t* じゃなくて char* になってたんでした。呼び出されるのはMessageBoxW の方です。いずれにしろL""を使ってMessageBoxWを呼び出すとエラーになります。 >>222 どこで保存時のエンコードを指定するんでしょうか? 外部エディタでUTF-8で保存し直すのですか? それともQt Creatorの設定でフォントにMS ゴシックを指定したのがいけなかったのかな? >>224 それはないと思います。仮にそうだとしても,Qt Creatorのどこでコンパイラのコマンドラインオプションを 指定するのでしょうか?
226 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 16:25:54 ] >>218 QMAKE_CXXFLAGS += --input-charset=cp932 --exec-charset=cp932
227 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 16:41:40 ] >>225 左の"Projects"ボタンから下の方に "Editor Settings" として "Default File Encoding" がある。 また、開いているファイルには"Edit"に文字コード指定用の項目がある。
228 名前:218 mailto:sage [2009/10/19(月) 16:47:15 ] >>226 .pro ファイルにそのように書いたらうまく行きました。 ヘルプをよく探してみたら「qmake Platform Notes」に載ってました。 ヘルプの「qmake Advanced Usage」のところを見ていたら,グローバルに定義したい #define のやり方も書いてありました。 「qmake Variable Reference」にいろいろ載ってますね。じっくり読んでみます。 助かりました。ありがとうございました。
229 名前:218 mailto:sage [2009/10/19(月) 16:56:41 ] >>227 おっしゃるとおりありました。 UTF-8に変えたら,>>226 で教えていただいた方法を使わなくてもすんなり行きました。 用途によって使い分けます。 ありがとういございました。
230 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:36:32 ] ぼそ。。。作りにくいと思ったとき、それは間違った道。。。
231 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:57:12 ] 独り言...Windows上のいろんなコンパイラで共通に使えるライブラリ作って 使ってるんだよな〜
232 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:48:39 ] UNICODE化推進したのに WindowsはいつまでSJISに縛られるんだろう
233 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:50:14 ] しばられてるのはお前だアホ
234 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:04:30 ] VCだとソースがSJIS固定じゃない
235 名前:デフォルトの名無しさん [2009/10/19(月) 21:50:49 ] ファイル名取得ダイアログのWindowsでの振る舞いについて質問があります。 リファレンスのQFileDialog::getOpenFileName()のところに ”On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers” とあるけどこれはどういう意味か教えてください。 ttp://doc.trolltech.com/4.5/qfiledialog.html#getOpenFileName
236 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:00:15 ] 218は正しくはWin32APIスレ行くべきだったな。 L""やTEXT(),_T()書いたからと言って、SJISでソースかいてりゃ文字列リテラルの中身はSJISだ。 それをUnicodeですと言いはればそりゃコンパイラも怒るわ。
237 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:12:20 ] Qt CreatorをMSVCで64bitでコンパイルすると Qt Creator起動時に Failed to load core: QTパス/lib/qtcreator/plugins/Nokia/Core.dll: Cannot load library QTパス/lib/qtcreator/plugins/Nokia/Core.dll: 指定されたモジュールが見つかりません。っていわれる。ちゃんとDLLあるのに・・・
238 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:54 ] じつはそのプラグインdllが32bitだったりしない?
239 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:21:42 ] 禿げ敷く胴衣
240 名前:237 mailto:sage [2009/10/19(月) 22:33:31 ] QTへのPATHの設定が必要なだけだった。 エラーメッセージ紛らわしい。 でもQt creatorは起動したがまだコンパイルできず。 jom.exeってなんだ? どうすれば現れる?
241 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:36:57 ] コンパイル済みのqt creatorからたぶん32bitのjom.exeをコピったら動いた。 もしかして別作者のツール? とりあえずこれでWindows 64bitへの旅は終わったかな?
242 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:38:57 ] ついでに、プラグインdllが32bitかどうか 調べるツールとかしりませんか? 他にもいろいろ情報を知りたい。 7zipでDLLを開いてそのプロパティで調べたけどw
243 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:07:51 ] >>241 jom も Nokia(Qt) のツール。 nmake でサポートしてない並列ビルドをするためのツール。 詳しくは下記を参考に。 ttp://labs.trolltech.com/blogs/2009/03/27/speeding-up-visual-c-qt-builds/ ttp://qt.gitorious.org/qt-creator/pages/FrequentlyAskedQuestions
244 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 04:14:38 ] ttp://www.cycleof5th.com/tips/index.php?date=2007-10-18
245 名前:218 mailto:sage [2009/10/20(火) 05:59:18 ] >>236 あんたわかってないね。 VC++やBCCはSJISのソースコードでL""と書けばそれをコンパイラが自動的にワイド文字列に 変換するし(何の指定も必要なし)、MinGW gccだって -finput-charset=CP932 と指定すれば SJISでL""で書いた文字列リテラルをきちんとワイド文字列に変換する。 MinGW gccはたまたまデフォルトがUTF-8なだけ。そもそもUTF-8はWIN32 APIの 何たらW( )関数が要求するwchar_t*文字列(UTF-16LE)とはエンコーディングが 違う。dmcなんかはL""と書いても_T( )と書いても受け付けてくれないので、 \uを使って文字コードで書く必要があるんだよ(Digital Mars スレの261に これを解決する方法を書いた)。 要するにコンパイラ依存の問題なわけで、 > L""やTEXT(),_T()書いたからと言って、SJISでソースかいてりゃ文字列リテラルの中身はSJISだ。 > それをUnicodeですと言いはればそりゃコンパイラも怒るわ。 なんて単純な話じゃない。あんたUNICODEは一種類だと思ってるのか? Qt Creatorだって、VCでやれば、逆にソースコードをUTF-8で書いたらL""のコンパイル 通らなくなると思うよ(VCが頭良くて、自動変換する可能性はあるけど)。
246 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 08:51:34 ] いいえVCはアホの子です ソースに日本語コメントが有って utf-8で保存されてたりするだけで コンパイルすら通らなくなります
247 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 09:00:11 ] Windowsのインストーラは標準ではUTF-8の環境をインストールしてくれないので インストール時に項目をチェックしてないのではないかな?
248 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 09:19:15 ] UTF-8の環境ってなんだ? UTF-8ってのはASCIIコード互換なんだよ。そのように作られている。 ASCIIの文字の範囲なら1バイト、それ以外なら最大4バイトの可変長文字コード だから、ソースに日本語が入っていてもUTF8なら ASCII文字と認識されるだけなので、コンパイルが通らないことは無い。
249 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 09:23:38 ] >>243 jom ぱねぇwww マルチコア使い切ってる。長いQtのコンパイル時間が半分になるw これ本当にnmake完全互換ってことでいいのかな? それならQt以外でも使えるな。nmakeにリネームしてやるかw
250 名前:デフォルトの名無しさん [2009/10/20(火) 10:41:40 ] >>245 >MinGW gccはたまたまデフォルトがUTF-8 GCCのデフォルトはASCIIでは?
251 名前:デフォルトの名無しさん [2009/10/20(火) 10:50:55 ] >>235 Qtのファイル取得ダイアログは、デフォルトではWindows固有のファイル取得ダイアログを 呼出してイベント処理されるため、そのファイル取得ダイアログの表示中には、 Qtの主イベントループで処理されるタイマーは、タイムアウトしても直ぐには処理されません。
252 名前:245 mailto:sage [2009/10/20(火) 10:51:47 ] >>250 正しくはそう言うべきなのかもしれないが,>>248 の言うとおりUTF-8はASCII互換なので, UTF-8でソースコードを書いてL""の""の中に日本語書いても異常なコードとは認識せず, ちゃんとUTF-16に変換してくれるので,「なんたらW」のWIN32 APIを呼び出したとき文字化けしない。 本家gccは知らないが,MinGW gccはそうなってるよ。
253 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 11:15:32 ] Qt CreatorでMainWindowをデスクトップの中心に表示させようとしたんだけど,UIデザイナ画面の プロパティにはそれに相当するものはなさそうだったので,MainWindowのコンストラクタに, QPoint screenCenter = QApplication::desktop()->screen()->rect().center(); setGeometry(screenCenter.rx() - width() / 2, screenCenter.ry() - height() / 2, width(), height()); って書いて一応解決したんだけど,もっと良いやり方はありませんか?
254 名前:235 [2009/10/20(火) 11:38:57 ] >>251 ありがとうございます。 理解できました。
255 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 11:54:57 ] >>250 UTF-8だよ。3.xも4.xも。
256 名前:デフォルトの名無しさん [2009/10/20(火) 12:37:25 ] >>253 タイトルバーを含めて中心に表示するのならば、frameGeometry()を使うというのもありそうです。 Qt 4.5: Window Geometry doc.trolltech.com/4.5/geometry.html QDialogの親を0にするとデスクトップの中心に表示されるので、そのコードを調べてみるというのはどうですか。
257 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:15:10 ] >>252 ありがとうございます。 理解できました。
258 名前:デフォルトの名無しさん [2009/10/20(火) 13:23:35 ] >>253 今のところ、256の人が書いているように、Dialog以外でメインウインドウを 含めてWidgetをダイレクトにスクリーンの中央に表示させる関数や属性は、 Qtには実装されていないと思う。 だから、コンストラクタにコード書くしかないんじゃない。 知っているかもしれないけど、QSettingsを使って、設定値を覚えさせるようにしておけば、 次回起動時に終了時の位置やサイズで表示されるようになる。 初回起動時は、中央に表示されなくても2度目からユーザーが好みのMainWindowの位置を 指定できるので、これで十分だと思うけど。 ちなみに、最大化するのなら下記のコードが有効。 setWindowState(windowState() ^ Qt::WindowMaximized); show();
259 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:26:15 ] 最大化uzeee
260 名前:253 mailto:sage [2009/10/20(火) 16:45:03 ] >>256 レスありがとうございます。 > タイトルバーを含めて中心に表示するのならば、frameGeometry()を使うというのもありそうです。 なるほど,そちらの方が正確に中心に来ますね。 > QDialogの親を0にするとデスクトップの中心に表示されるので、そのコードを調べてみるというのはどうですか。 これはgrepを使ったりしてやってみましたが,QDialogのparentを0にしてコンストラクタを呼び出すと, 基底クラスであるQWidgetのコンストラクタのparentが0で呼び出されるところまではわかりましたが, それ以上はd_func()なる謎の関数が出てきて追いきれませんでした(grepで膨大な件数がマッチした)。 >>258 > 知っているかもしれないけど、QSettingsを使って、設定値を覚えさせるようにしておけば、 > 次回起動時に終了時の位置やサイズで表示されるようになる。 > 初回起動時は、中央に表示されなくても2度目からユーザーが好みのMainWindowの位置を > 指定できるので、これで十分だと思うけど。 > ちなみに、最大化するのなら下記のコードが有効。 > setWindowState(windowState() ^ Qt::WindowMaximized); > show(); いえ,知らないことばかりで勉強になります。 ご教示ありがとうございます。
261 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:30:29 ] >248 ソースコードの文字コードについてだけど、VCでのUTF-8はBOMありをUTF-8と認識する。 BOMなしUTF-8でやっていると、あるとき突然コンパイル時エラーやら警告が出たりする。(これが246の言っていることかな) gccはBOMなしUTF-8しかダメで、これのせいで、両方でUTF-8でソースコードが共通化できなかった。 結局、Shift-JISで統一して、gccでinput-charsetオプションでごまかした。 (なんで同じUTF-8でこうもコンパイラの対応が異なるかと思う)
262 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:54:08 ] そもそもUNICODEという仕様がクソ
263 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:54:48 ] そしたら何コードだったらいいの
264 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:59:20 ] TRONコード
265 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:39:05 ] そもそも Byte Order なんてある訳ない UTF-8 に Byte Order Mark 付けるのは 気が狂ってるとしか思えない。
266 名前:デフォルトの名無しさん [2009/10/20(火) 23:45:11 ] Creator1.3 Betaの日本語化の方法が書いてある。 Qt Creator 1.3 Beta リリース ttp://qt-creator-jp.sourceforge.jp/2009/10/14/qt-creator-1-3-beta-%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9/
267 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:31:44 ] ソースコードにASCII文字以外を書くなよw
268 名前:デフォルトの名無しさん [2009/10/21(水) 00:46:28 ] >>267 コメントは英語にするの? 英語が苦手だからちょっときつい。 それに、doxygenなんかを使って、コメントを日本語ドキュメントとして 出力させたいときはやっぱり日本語が必要になる。
269 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:46:48 ] >>267 今時ソースコードにASCII文字以外をかけないってドンだけ遅れてるんだよwwww
270 名前:デフォルトの名無しさん [2009/10/21(水) 02:04:38 ] >>269 書けないんじゃなくて、方針として書かないといいたいんだと思う。 でも個人的には、人に押し付けることではない気がする。 それにプロジェクトか何かに参加していて、日本語でコメントを書くのが 決まっていたらそうせざるを得ないし。
271 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 02:41:09 ] UTF-8やEUC-xx系はバイト数増える分だけいろいろ互換ではあるけどな。 ttp://nowsmart.s93.coreserver.jp/nws/Japanese/chara_code_compare.htm
272 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:00:12 ] Visual C++ の概念 : C/C++ プログラムのビルドコンパイラおよびリンカでの Unicode のサポート ttp://msdn.microsoft.com/ja-jp/library/xwy0e8f2.aspx ・BOM (Byte Order Mark) 付き、または BOM なしの UTF-16 リトル エンディアン。 ・BOM 付き、または BOM なしの UTF-16 ビッグ エンディアン。 ・BOM 付きの UTF-8
273 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:09:26 ] gcc ttp://wiki.monaos.org/index.php?%B5%C4%CF%C0%2Flibc%2F%A5%EF%A5%A4%A5%C9%CA%B8%BB%FA gcc-3.4からちゃんとiconvで変換するようになったようです。 gccの-finput-charsetを使うとソースの 文字コードが指定できます。何も指定しない場合はUTF-8として扱われます。 gcj ttp://wiki.monaos.org/index.php?gcj%2F19
274 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:13:47 ] UTF-16 and UTF-32 support in GCC added ttp://blogs.oracle.com/ezannoni/2008/04/utf16_and_utf32_support_in_gcc.html なんだこれは、あたらしく文字列型追加したのか * u'c-char-sequence' char16_t character literal (UTF-16) * U'c-char-sequence' char32_t character literal (UTF-32) * u"s-char-sequence" array of char16_t (UTF-16) * U"s-char-sequence" array of char32_t (UTF-32)
275 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 05:34:46 ] Why do you stay in wrong thread? ttp://pc12.2ch.net/test/read.cgi/tech/1236529563/
276 名前:デフォルトの名無しさん [2009/10/21(水) 10:33:50 ] >>268 文字列にASCII文字以外を書かないようにということじゃないでしょうか。
277 名前:デフォルトの名無しさん [2009/10/21(水) 11:13:17 ] >>276 勘違いしてた。ごめん。
278 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:06:42 ] Windowsで64bitのQt Creatorで 32bitアプリのデバッグできている人いる? さらにDebugging Helperまで正常動作している人いる? 一度32bitアプリのデバッグができた気がするんだけど、 Debugging Helperが正常に動かなかった。 もっかいやり直したら、32bitアプリのデバッグまで動かなくなった。 Linuxの場合はどうなってるんだろ?
279 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:27:10 ] 32bitアプリのデバッグができた気がする
280 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:32:48 ] 勘違いしてた。ごめん。
281 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:37:29 ] いいお。。。
282 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:38:59 ] >207 202です。いろいろ教えていただいてありがとうございます。とりあえず以下のように実装してみました。 MainWindow(QMainWindowから派生) +ImageView(QGraphicsViewから派生, QtDesignerで格上げ) +statusBar(QStatusBarから派生) という構成で、 MainWindowにsetStatusBar(int x, int y)というpublicなメンバ関数を作成した。 ImageViewにmousePressEvent()を作成し、 MainWindow* mainWindow = qobject_cast<MainWindow*>(parentWidget()); if (mainWindow) { setStatusBar(event->x(), evetn->y()); } としたのですが、mainWindowが0になって、parentWidget()が機能していないみたいです。 たしかにMainWindowクラスでImageViewのインスタンスを生成した覚えがないのですが、 QtDesignerの格上げを使った場合、この辺どのようにすれば親Widgetのポインタを得ることができるのでしょう?
283 名前:デフォルトの名無しさん [2009/10/22(木) 02:19:55 ] >>282 ごめん。説明が足りなかった。あるいは間違っていた。 その前に確認。 >setStatusBar(event->x(), evetn->y()); は mainWindow->setStatusBar(event->x(), evetn->y()); の間違いだよね。
284 名前:283 [2009/10/22(木) 02:21:19 ] >>283 のつづき (説明) 通常、メインウインドウにはメニュー、ドックウィジット、ステータスバーのほかに、 中心となるウィジットを1つ配置し、その中にレイアウトクラスを使って複数のウィジットを配置する。 この中心となるウィジットのことをQtでは「セントラルウィジット」といっている。 フォームエディタのDesignerやQt Creatorの組込みのもので作成したMainWindowには、 デフォルトでセントラルウィジットとしてQWidgetが配置されていている。 よって、そのままImageViewを配置したのならば、このQWidgetが親ウィジットになる。 (こちらで確認した限り、このセントラルウィジットを取り替える方法が分からなかった。 見落としているような気がするけど。 ソースコードからならQMainWindow::setCentralWidet()でセットできる。) これは、フォームエディタの右側に表示されるオブジェクトインスペクタとよばれる クラス名やオブジェクトのレイアウトの状況が分かる部分をみれば分かる。
285 名前:283 [2009/10/22(木) 02:22:56 ] >>284 のつづき また、このセントラルウィジット上で右クリックし、コンテクストメニューの 「レイアウト」->「水平に並べる」などを選べば、セントラルウィジットの中に配置したウィジットに対して レイアウトを適用できる。また、どうように「レイアウト」->「レイアウトを破棄」を選べば、その トップレベルのレイアウトを破棄できる。 もちろんレイアウトの中にほかのレイアウトを配置することも可能で、その時は フォームエディタの左上に表示されるレイアウトオブジェクトをマウスで配置すればよい。 1つ注意したいのは、フォームエディタではセントラルウィジット内のトップレベルレイアウトだけ ラバーバンド(選択を表す外枠)が視覚化されないので分かりにくい、ということ。 それ以外の、マウスで配置するレイアウトオブジェクトはちゃんとラバーバンドが表示される。 よって、コードは下記のように修正すればちゃんと動くはず。 QWidget* centralWidget = qobject_cast<QWidget*>(parentWidget()); if(centralWidget) { MainWindow* mainWindow = qobject_cast<MainWindow*>(centralWidget->parentWidget()); if(mainWindow) { mainWindow->setStatusBar(event->x(), evetn->y()); } }
286 名前:283 [2009/10/22(木) 02:35:06 ] あるいは、私がよくするのは、カスタムアプリケーションクラスを定義して、 ポインターメンバーとしてMainWindowを持たせ、このクラスにgetMainWindow()を 定義する。 そして、Qtに予め定義されているアプリケーションを指すグローバルなポインターのqApp を使って、MainWindowを得るようにする。 Application* myApp = qobject_cast<Application*>(qApp); if(myApp) { MainWindow* mainWindow = myApp->getMainWindow(); if(mainWindow) { mainWindow->setStatusBar(event->x(), evetn->y()); } } こうすれば、レイアウトのどのレベルにいてもメインウインドウにすぐに アクセスできるようになる。
287 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 04:13:26 ] 質問です。 GUIプログラミング自体が初めてなので、 初歩的な質問をしているかもしれませんが、ご了承ください。 QGraphicsItemから派生させたカスタムクラスを作成し、 変数や関数を宣言しました。main関数でこのカスタムウィジェットからいくつかitemを作成しました。 QGraphicsSceneからインスタンスsceneを作成し、 先ほど作成したクラスから作成したitemをsceneに追加しました。 次に、 QGraphicsItem * QGraphicsScene::itemAt ( const QPointF & position ) const メソッドを用いて、sceneのある地点のitemを取り出しました。 この取り出したitemから、自分で付け加えた変数や関数を呼び出すことはできないのでしょうか? QGraphicsScene::itemAt メソッドで取り出したitemの型がQGraphicsItem * ということは分かるのですが、 追加した時点でのitemは自分で作成したカスタムクラスのインスタンスなので、 カスタムクラスで宣言した変数や関数を使用できると思いました。 間違っている点を指摘していただければ助かります。
288 名前:デフォルトの名無しさん [2009/10/22(木) 05:41:37 ] >>287 まず、そのカスタムアイテムクラスにenum値として、そのアイテム固有のタイプ値を定義する。 次に、この値を返すtype()を定義する(オーバーライドする)。 下記は、Qt Refrenceより class CustomItem : public QGraphicsItem { ... enum { Type = UserType + 1 }; int type() const { return Type; } ... } そして、qgraphicsitem_cast()を使って、そのアイテムをキャストすればよい。 CustomItem customItem = qgraphicsitem_cast(item); これで、カスタムアイテムのメンバー関数が呼び出せるようになる。
289 名前:288 [2009/10/22(木) 05:48:51 ] ごめん。間違えた。 qgraphicsitem_cast()が返すのは、そのクラスのtype()の値だった。
290 名前:288 [2009/10/22(木) 06:19:12 ] ごめん再訂正。やっぱりポインターのキャストだった。 CustomItem customItem = qgraphicsitem_cast<CustomItem*>(item); if(customItem) { //... } でいける。
291 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 06:19:43 ] QGraphicsItem *hoge = scene.itemAt(fuga); QGraphicsItemから派生させたカスタムクラス *moge = (QGraphicsItemから派生させたカスタムクラス *)hoge;
292 名前:288 [2009/10/22(木) 06:22:50 ] 本当にごめん。*が抜けていた。 CustomItem* customItem = qgraphicsitem_cast<CustomItem*>(item); if(customItem) { //... }
293 名前:デフォルトの名無しさん [2009/10/22(木) 06:31:04 ] >>291 従来のキャストだとキャストの失敗を確かめられないから少し不安な気がする。 やはり、qgraphicsitem_castを使った方がいいと思う。 もしくは、RTTIが使用できる最近のコンパイラーならdynamic_castを使った方がいいと思う。
294 名前:287 mailto:sage [2009/10/22(木) 08:40:23 ] レスありがとうございます。 >>291 私もこのキャストの方法は試したのですが、うまくいっていませんでした。 でも、書き込みのように記述したところ思い通りの動作をするようになりました。 (キャスト)hoge -> customArg; このように利用していたのですが、 ( (キャスト)hoge ) -> customArg; のように全体の括弧が抜けていることに気が付けました。 >>288 試行錯誤しているときに、ヘルプのqgraphicsitem_castの説明を読んだのですが、 使用法などまったく意味が分かりませんでした。 しかし、指示されたとおりに記述したところ、こちらの方法でも呼び出すことができました。 キャストの種類が複数あるなど、色々と勉強になりました、ありがとうございました。 ただ一つ分からないところがあったので、よかったら教えてください。 CustomItem* customItem = qgraphicsitem_cast<CustomItem*>(item); ここで、<CustomItem*>のように<>による記述を使っており、これがないとエラーが出るのですが、 なぜ必要なのでしょうか?(C++の勉強不足かもしれない質問ですが、、、) ヘルプには T qgraphicsitem_cast ( QGraphicsItem * item ) Returns the given item cast to type T if item is of type T とあり、どうも理解できません。よろしくお願いします。
295 名前:デフォルトの名無しさん [2009/10/22(木) 09:47:34 ] >>294 >ここで、<CustomItem*>のように<>による記述を使っており、これがないとエラーが出るのですが、 >なぜ必要なのでしょうか?(C++の勉強不足かもしれない質問ですが、、、) <>の中に型を指定して、その型にキャストしたいことを、qgraphicsitem_castに教えるためのもの。 >ヘルプには >T qgraphicsitem_cast ( QGraphicsItem * item ) >Returns the given item cast to type T if item is of type T >とあり、どうも理解できません。よろしくお願いします。 リファレンスの記述のしかたが、分かりにくいだけだと思う。 個人的な好みだけれどむしろ T2* qgraphicsitem_cast<T1*>(QGraphicsItem * item) と書いてあってキャストに失敗したときT2が0になり、キャストに成功するとT1=T2になる、みたいに表記してあった方が わかりやすいと思う。 ちなみに、()を使うキャストは、C言語に元々あるキャスト方法で、C++でも使用できる。 C++には、C言語にはないキャストが4種類あってその記述方法では、qgraphicsitem_castのように、<>を用いる。 (ただし、まったく機能が違うという意味ではない。Cのキャストと機能が重なっているものもある。) qgraphicsitem_castや、qobject_castはQtだけで使用できるキャストで、使用する対象がQObjectであったり、QGraphicsItemに 限定されている。
296 名前:295 [2009/10/22(木) 09:58:05 ] 訂正、補足。 >T2* qgraphicsitem_cast<T1*>(QGraphicsItem * item) >と書いてあってキャストに失敗したときT2が0になり、キャストに成功するとT1=T2になる、みたいに表記してあった方が >わかりやすいと思う。 C++には、ポインターや通常の変数の他にリファレンスというのがある。 これをキャストするときにも使用する可能性があるので、*をつけた例だけを 示すのはまずい可能性がある。 少なくともC++のdynamic_castは、リファレンスのキャストが可能で、 キャストに失敗したときは例外をスローする。 qgraphicsitem_castがリファレンスに対応しているかは未確認。
297 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 11:26:31 ] >>294 <type T> template
298 名前:デフォルトの名無しさん [2009/10/22(木) 13:23:11 ] >>297 castのTは、templateという意味はないのでは?
299 名前:298 [2009/10/22(木) 13:24:40 ] 訂正 >castのTは、templateという意味はないのでは? castのtype Tは、templateという意味はないのでは?
300 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 15:13:44 ] iya wakaran nonara ii
301 名前:デフォルトの名無しさん [2009/10/22(木) 23:41:17 ] Qt Designer上で、フォームに配置したオブジェクトの シグナルと別のシグナルを接続することは可能ですか? 自分で方法を探しても見つかりませんでした。
302 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:44:49 ] >286 ありがとう。狙い通りの動作ができました。 ちなみに、statusBarはフォームエディタでMainWindowを作ると、 uiの方で生成されていますが、statusBarにQLabelなどを追加するのは、 フォームエディタではできないですよね? MainWindow::createStatusBar()のような関数を自作して、 MainWindowコンストラクタのui->setupUi(this);の後で呼ぶような コードが考えられると思うのですが、そんな感じになるでしょうか。
303 名前:デフォルトの名無しさん [2009/10/23(金) 01:42:58 ] >>302 >ちなみに、statusBarはフォームエディタでMainWindowを作ると、 >uiの方で生成されていますが、statusBarにQLabelなどを追加するのは、 >フォームエディタではできないですよね? 残念ながら知らない。 >MainWindow::createStatusBar()のような関数を自作して、 >MainWindowコンストラクタのui->setupUi(this);の後で呼ぶような >コードが考えられると思うのですが、そんな感じになるでしょうか。 それでいいと思う。 ただ、選択肢として既に配置されているstatusBarを格上げして、 そのソースからQLabelを追加する方法が考えられる。
304 名前:287 mailto:sage [2009/10/23(金) 03:17:16 ] >>295 なるほど、C++には<>を用いるキャストの構文があり、 キャストでは常識なのですね。 詳しい説明ありがとうございました。 大変勉強になりました。
305 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 08:27:05 ] ねーよ
306 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:28:50 ] static_cast<>() dynamic_cast<>() const_cast<>() reinterpret_cast<>()
307 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 13:19:12 ] Qt Creatorでデバッグを開始すると、デバッグウィンドウの 一番上のウィンドウバーに 40個のカスタムダンパが見つかりました。 ってしばらく表示されるんだけど あれって何の意味?
308 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 14:03:53 ] 今までqDeleteAll()の存在を知らずに、 毎回イテレータをぐるぐる回してた…
309 名前:デフォルトの名無しさん [2009/10/23(金) 14:17:48 ] >>301 Qt Designer上ではできません。
310 名前:301 [2009/10/23(金) 15:24:33 ] >>309 レス、ありがとうございます。 >Qt Designer上ではできません。 そうですか、あまり使われないからなんでしょうね。
311 名前:デフォルトの名無しさん [2009/10/23(金) 15:28:27 ] >>310 たまに使います。
312 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:23:33 ] プログラムでstd::stringを使っていますが、デバッグ中に ローカル変数で内容が確認できません。 確認する方法はないでしょうか。
313 名前:デフォルトの名無しさん [2009/10/23(金) 21:40:54 ] >>312 確認できないというのは、具体的にどのようなことをして、どのようになったのでしょうか。 もし、最適化でローカル変数がなくなって、デバッガでローカル変数が見えないならば、 まったく最適化がかからないようなデバッグレベルでコンパイルしてみてはどうでしょう。
314 名前:312 mailto:sage [2009/10/24(土) 10:08:09 ] >313 std::pass = "test"; QString qpass = pass.c_str(); とすると、ローカル変数は ▽pass ▽_M_dataplus ▽_M_p 0xXXXXX "$XXXXXX ▽*_M_p 36 '$' qpass "test" みたいな
315 名前:デフォルトの名無しさん [2009/10/24(土) 12:47:38 ] >>314 >std::pass = "test"; これは std::string pass = "test"; のタイポだよね。 こちらはLinux/X11 g++だけど、問題なくデバッグできるけど。
316 名前:315 [2009/10/24(土) 12:51:26 ] OSやコンパイラーやIDE(使っているなら)は何?
317 名前:デフォルトの名無しさん [2009/10/24(土) 14:37:13 ] >>314 std::stringをtypedefしていない?
318 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 14:50:10 ] >>317 >>314 とは別人ですが。 std名前空間の中に新しいtypedefを作るのは 未定義の動作では?
319 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:26:23 ] QGraphicsSceneにaddPixmapしてQGraphicsView::setScene()で画像を表示しているのですが、 画像が真ん中に表示されます。 この場合、GraphicsViewをマウスクリックした座標とpixmapの画像座標の対応関係は、 どのようになるのでしょうか? QGraphicsView, Itemあたりのヘルプを読んでみたのですが、いまいち概要が把握できませんでした。
320 名前:317 [2009/10/24(土) 15:37:33 ] >>318 >std名前空間の中に新しいtypedefを作るのは >未定義の動作では? これはどういう意味? こちらが317でいいたかったのは、314の人が typedef std::string StringT; //... StringT aString("test"); std::cout << aString << std::endl; などとしているのではないのか、ということを聞きたかったんだけど。 これって未定義?
321 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 16:12:34 ] これでどう。 QMessageBox(QMessageBox::NoIcon, "title", "text").exec();
322 名前:314 mailto:sage [2009/10/24(土) 16:44:39 ] すいません std::sritng pass でした。 Debian で QtCreatorを使ってます。 デバッグは問題なくできるんですが、ローカル変数の表示で std::string pass は 内容がバケテ表示され QString qpass はそのまま正しく表示されます。 std::string の文字化け?を何とかできないかと言うことです。 紛らわしくて、すいません。
323 名前:デフォルトの名無しさん [2009/10/24(土) 18:07:04 ] >>322 こちらもDebian GNU/LinuxでQt Creatorを使用してるけど、 文字化けはしていない。 debianのパッケージ版の安定版Qt Creator 1.2.1を # aptitude -t sid install qtcreator でインストールしたやつだけど。 一度そのバグが再現するシンプルなコードを作って、 コンソール上で、gdbを直接使っても文字化けしないか 確かめればいいんじゃないかな。 ・本当に問題を起こしている部分が特定できる。(Qt Creatorで) ・Qt Creatorの問題なのかがわかる。 エラーの原因を絞るためにこのことは有効だと思うけど。
324 名前:323 [2009/10/24(土) 18:11:36 ] もし、それでQt Creatorが原因でないと分かったのなら、 違うスレにもっと詳しい人がいるかもしれない。 そちらで聞くのもいいと思う。
325 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 18:30:30 ] >>314 debugging helper は enable?
326 名前:デフォルトの名無しさん [2009/10/24(土) 19:30:58 ] >>319 QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent*) やQGraphicsSceneMouseEvent::lastScenePos() を調べてみてはどうでしょうか。
327 名前:322 mailto:sage [2009/10/24(土) 19:57:56 ] 大変失礼いたしました。 文字化け表示は別の原因だったみたいです。 ただ、 QString qpass = pass.c_str(); でqpassが正常表示だったためてっきり 改めて、この部分だけテストプログラム書いてみたら正常に表示されました。
328 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 23:59:41 ] >326 とりあえずQGraphicsView::mousePressEvent(QMouseEvent* event)で if (QGraphicsItem *item = itemAt(event->pos())) { qDebug() << item->pos(); } で追加したQGraphicsItemでゲットできることがわかりました。 ただ、item->pos()がおそらくView上でitemが追加された座標で(0, 0)となります。 知りたいのはitemオブジェクト内での座標なのですが、 これを知るには、QGraphicsItemから派生したクラスのmousePressEvent()をオーバーライドして、 座標を得るしかないのでしょうか。
329 名前:デフォルトの名無しさん [2009/10/25(日) 01:49:42 ] >>328 >これを知るには、QGraphicsItemから派生したクラスのmousePressEvent()をオーバーライドして、 >座標を得るしかないのでしょうか。 それでいいと思うけど。 あとは、アイテムにアイテム用のイベントフィルターをシンストールするか。
330 名前:329 [2009/10/25(日) 02:01:16 ] 訂正 >あとは、アイテムにアイテム用のイベントフィルターをシンストールするか。 あとは、アイテムにアイテム用のイベントフィルターをインストールするか。 アイテム用のイベントフィルターは、アイテムが他のアイテムのイベントをフィルターする から、今の場合は役に立たないかも。
331 名前:329 [2009/10/25(日) 02:19:56 ] 補足 基本的にビューは、ウィジットとしてアイテムやシーンにを描画する役目と、 シーンへイベントを伝える役目をになう。 だからビューのイベントハンドラーをオーバーライドしてするときは、 主に、見た目に関することや、イベントをシーンに伝える役目としての処理を 書けばいいと思う。 文字通りビューウィジットとしての役割。 シーンには、ロジカル座標を提供し、背景の設定を提供する。 アイテムのリストを持っていてこれを管理する。 またビューから伝達されたイベントをアイテムに伝える。 だから、シーンのイベントハンドラーをオーバーライドして、 アイテムの共通のイベントは、こちらで処理すればいいと思う。 シーンはQObjectだから、シーンQApplication::sendEvent() で直接イベントを送ることもできる。 アイテムはそれぞれがそれぞれの振る舞いがあるから、 アイテム自身のイベントハンドラーをオーバーライドして、 そのアイテム独自の振る舞いはそこで書けばいいと思う。
332 名前:329 [2009/10/25(日) 02:23:58 ] 訂正。いつも訂正ばかりでごめん。 >基本的にビューは、ウィジットとしてアイテムやシーンにを描画する役目と、 基本的にビューは、ウィジットとしてアイテムやシーンを描画する役目と、 >シーンはQObjectだから、シーンQApplication::sendEvent() シーンはQObjectだから、シーンにQApplication::sendEvent()
333 名前:329 [2009/10/25(日) 03:33:00 ] >>329 本当にごめん。329を直してみた。 基本的にビューはウィジットとして、アイテムやシーンを描画する役目と、 シーンへ、イベントを伝える役目を担う。 だからビューのイベントハンドラーをオーバーライドしてすることは、 主に、拡大縮小などの見た目に関することを操作したり、イベントをシーンに伝える役目 としての処理を書けばいいと思う。文字通りビューウィジットとしての役割。 シーンは、ロジカル座標を提供し、背景の設定を提供する。 シーンはアイテムのリストを持っていてこれを管理する。 またビューから伝達されたイベントをアイテムに伝える。 だから、シーンのイベントハンドラーをオーバーライドして、 アイテムの共通の処理は、こちらで書けばいいと思う。 もちろん、その中でアイテムリストをイテレートして アイテムのメソッドをコールしてもよい。 シーンはQObjectだから、シーンにQApplication::sendEvent() で直接イベントを送ることもできる。 アイテムには、それぞれがそれぞれの振る舞いがあるから、 アイテム自身のイベントハンドラーをオーバーライドして、 そのアイテム独自の振る舞いはそこで書けばいいと思う。
334 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:28:58 ] Windowsでgccとvisual c++使ってQtビルドしてみたのだけど、 デモの動きはVCの方が明らかに早い。
335 名前:デフォルトの名無しさん [2009/10/25(日) 08:58:06 ] >>334 同じく。>>74 で、VC++の方が速いのは、どうしてだろうか。
336 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 09:03:39 ] CよりJavaの方が早い、と同じ話 もしくはそれ以下としか思えない俺 バイナリサイズも同じソースかと疑いたくなるぐらい肥大するし
337 名前:デフォルトの名無しさん [2009/10/25(日) 09:32:48 ] >>335 です。間違えました。>>74 では、GCC の方が速いというのが分かりません。 VC++でビルドしたQtの方が、デモの動きが速いと見て分かります。
338 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 10:05:06 ] 実際にQtに関してGCCの方が速かった、って人は出てないんだし、気にしないでいいんじゃね
339 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 10:05:56 ] >>337 >>74 はネタです。釣られないように。
340 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 10:09:55 ] そもそもGCCのほうが早いならQt CreatorがいちいちVCでビルドされてる理由がないしな
341 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 11:01:17 ] なんでVCビルド版をフリーで出してくれないの(><)
342 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 12:56:04 ] >>341 たぶんライセンスの関係じゃね?
343 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:38:35 ] 既出かもしれませんが、QLineEditで日本語入力(ATOK)中にESCを押すとIME ではなくダイアログを抜けるので、それまで確定した内容が消えてしまいます。 入力中だった文字はそのままの状態で消えたダイアログの親に行きます。 IME入力中のESCキーがIMEのウィンドウ?に飛ばず下のQDialog or QLineEditに 飛んでいるように見えますがが、回避するにはどこを見たらいいでしょうか。
344 名前:デフォルトの名無しさん [2009/10/25(日) 15:43:34 ] >>343 WindowsとMac OS Xのどちらですか。
345 名前:デフォルトの名無しさん [2009/10/25(日) 15:45:26 ] >>344 ATOKのLinuxもあるので、3つの内のどれでしょうか。
346 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:46:28 ] IME って Windows 用語でしょ。
347 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:02:11 ] SCIM-Anthy使ってるけどそんな事なったこと無いなぁ
348 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:08:30 ] Qt やるなら wxWidget のスレも読んだ方が良い
349 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:10:27 ] s が抜けた… Qt やる人は wxWidgets のスレも見に行った方が良いよ
350 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:50:42 ] なんで? Qtと比べたらwxとか使いにくくて仕方がないじゃん 知る価値ないと思う
351 名前:デフォルトの名無しさん [2009/10/25(日) 16:53:03 ] >>343 QWidget(QDialogを含む)にフォーカス属性があるから、 このフォーカス関係の属性をセットすれば いいのかもしれないんだけどよく知らないから、思いつく方法を列記する。 (1) QLineEditのカスタムクラスを書いてキーイベントをハンドルして ESCキーのときは、accept()して、親ウィジットであるダイアログに イベントを伝えないようにする。 (2) または、QLineEditにイベントフィルターをインストールして、 同様の処理をする。 (3) デザインフォーム(Qt DesignerまたはQt Creatorに組み込まれたもの)を使用しているのなら QLineEditを格上げして、そこで同様の処理をする。 (4) あるいは、ダイアログのキーイベントをハンドルして、lineEdit->hasFocus()して、 QLineEditにフォーカスが当たっているときは、ESCキーに対してデフォルトの 振る舞いをしないようにする。
352 名前:351 [2009/10/25(日) 16:54:06 ] >>351 のつづき (4)の例 void Dialog::keyPressEvent(QKeyEvent* keyEvent) { if(keyEvent->key() == Qt::Key_Escape) { if(ui->lineEdit->hasFocus()) { keyEvent->accept(); } } else { QDialog::keyPressEvent(keyEvent); } } (注意) ちなみに、キャンセルボタンが配置されているときは、そのボタンがESCキーに対応している可能性もある。 ただし、QLineEditにフォーカスが当たっているときにどうなのかは未確認。
353 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:55:26 ] >>650 なんで? wxと比べたらQtとか使いにくくて仕方がないじゃん
354 名前:351 [2009/10/25(日) 16:56:21 ] 毎度すいません。訂正 >if(ui->lineEdit->hasFocus()) { if(lineEdit->hasFocus()) {
355 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:58:18 ] >>350 そう毛嫌いせずに視野は広く持った方が良いよ。 まぁ見に行けば分かるさ。
356 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:01:28 ] >(4) あるいは、ダイアログのキーイベントをハンドルして、lineEdit->hasFocus()して、 >QLineEditにフォーカスが当たっているときは、ESCキーに対してデフォルトの >振る舞いをしないようにする。 IME入力モードになってるときに限ることって出来ますか?
357 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:04:52 ] ・何がしたいのか ・現状どうなっているのか ・それに対する自分の意見 ・自分の環境は何なのか(OS,CPU,GPU) ・IMEを他のものにして同じ症状があるのかどうか、ないならそのIMEは何なのか。 ・可能ならサンプルをアップローダーに。 このくらいは質問するなら情報として欲しいわ。
358 名前:デフォルトの名無しさん [2009/10/25(日) 17:05:15 ] >>355 賛成。 それぞれに長所、短所あるから一概にいえないと思う。
359 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:09:27 ] wxスレなんてQtの話題が出て荒れてたような記憶しかないんだが で、なんでいきなりwxの話題が出たの? Qt Creatorが熟れてないとかそういう話題から?
360 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:10:45 ] >>359 wx スレを見に行けば分かる。
361 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:12:42 ] 聞き逃げ?
362 名前:351 [2009/10/25(日) 17:14:21 ] >>356 インプットメソッドイベントをハンドルすればできそう。 inputMethodEvent()をオーバーライドすればよい。 ただ、私は使用したことはないので、具体的にどうすればいいかは はわからない。
363 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:17:05 ] >>360 久々に見てきたが IDE議論とwxの新IDE、あとはQt他ライブラリとの比較ぐらいしかこれといったものはなかった もう少し具体的に書いてくれ
364 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:23:55 ] >>363 最新10レス位を見ただけでも何か気付くもんだと思うが… 別に謎なぞしてる訳じゃないから、本当に分からないならスルーしてくれ。 >>349 を書いたのは親切心のつもりだったが、邪魔して悪かったな。
365 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:31:20 ] IMEがらみの話ってこと?
366 名前:デフォルトの名無しさん [2009/10/25(日) 17:35:09 ] >>357 >IMEを他のものにして同じ症状があるのかどうか、ないならそのIMEは何なのか。 特にこれだと思う。ATOKが悪さをしているか、ATOKに渡すべきキーイベントを Qtが食っているか。ATOK絡みでは、問題があったりするのか。 どっちも古めだけれど。 www.kde.gr.jp/ml/Qt-devel/msg00686.html ATOK/一太郎 統合スレッド[ その2 ] pc11.2ch.net/test/read.cgi/linux/1193271272/
367 名前:デフォルトの名無しさん [2009/10/25(日) 17:41:53 ] >>366 こちらは、Debian GNU/Linux 上で Qt immodule/anthyで日本語入力しているけれど、 同じように、日本語入力中にESCを押すとダイアログが閉じるよ。
368 名前:デフォルトの名無しさん [2009/10/25(日) 18:01:00 ] >>367 kinput2は、日本語入力中にESCを押してもダイアログが閉じませんでした。
369 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:15:11 ] QDialog::rejectをオーバーライドして 件のテキストボックスにフォーカスがある間はescを押してもQDialogのreject()が呼ばれないようにする ってのはどうか class なんか : public QDialog, ... { void reject() { if (! lineEdit->hasFocus()) QDialog::reject(); } }; 参考: Qt-interest Archive - QDialog and ESC lists.trolltech.com/qt-interest/2005-04/thread00872-0.html
370 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:19:57 ] ↑ あ、御免スルーして...
371 名前:367 [2009/10/25(日) 18:34:14 ] >>368 >>343 の意味を取り違えていたかもしれない。 >既出かもしれませんが、QLineEditで日本語入力(ATOK)中にESCを押すとIME >ではなくダイアログを抜けるので、それまで確定した内容が消えてしまいます。 この「日本語入力中」というのは、変換確定前の日本語入力中ということなの。 それとも、日本語入力モードになっているときということなの。 >>367 で出る症状は後者のことをいっているので、 質問者が前者の意味のことをいっているのなら、 私の環境でもダイアログが閉じないということになる。 話をややこしくしてごめん。
372 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:58:27 ] >この「日本語入力中」というのは、変換確定前の日本語入力中ということなの。 です
373 名前:デフォルトの名無しさん [2009/10/25(日) 18:59:10 ] >>371 文字列が確定しているときに、日本語入力モードかどうかに拘らず、ESCでダイアログ が閉じてしまうということならば、普通の動作ではないでしょうか。
374 名前:371 [2009/10/25(日) 19:14:22 ] >>372 >です やっぱり勘違いだったみたいね。ごめん。 >>373 >文字列が確定しているときに、日本語入力モードかどうかに拘らず、ESCでダイアログ >が閉じてしまうということならば、普通の動作ではないでしょうか。 その通りです。勘違いしていました。
375 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:44:40 ] OKボタンがデフォルトボタンになっていると 変換中の文字を確定するときのenterで 入力枠に文字が入ると同時に(残りの枠が未入力でも) ダイアログが確定してOKボタンを押したことになってしまいます
376 名前:362, 367 [2009/10/25(日) 19:48:08 ] >>356 QLineEditのカスタムクラスを書いて、inputMethodEvent()をオーバーライドし、 受け取ったイベントのevent->preeditString()が空かどうかで、 入力中かどうかが判断できるみたい。 また、こちら(Linux, qt immodule, anthy)では、日本語入力中(変換確定前)は、 途中でESCキーを押してもkeyPressEventは発生せず、inputMethodEventだけが発生した。 だからそちらも同じ動作ならinputMethodEvent()だけをオーバーライドすればいいと思う。 ただ、こちらの環境と違うし、ATOKの問題かもれないから、そちらの環境では、 日本語入力中にESCを押したときに、keyPressEventが発生しているかもしれない。 そのときは、keyPressEvent()もオーバーライドする必要があるかもしれない。 場合に依ってはフラグを立てて入力中かどうかを判断すればよい。
377 名前:デフォルトの名無しさん [2009/10/25(日) 20:07:45 ] >>375 >OKボタンがデフォルトボタンになっていると >変換中の文字を確定するときのenterで >入力枠に文字が入ると同時に(残りの枠が未入力でも) >ダイアログが確定してOKボタンを押したことになってしまいます >>343 の人だよね。 こちら(Linux/X11)では、単に日本語入力の確定になる。 そしてもう一度Enterを押すとデフォルトボタンにより、ダイアログが閉じる。
378 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:28:02 ] キーボード壊れてんじゃね
379 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 21:27:25 ] >>346 MS-IMEはマイクロソフトの製品だけど。 > IME - Wikipedia > ttp://ja.wikipedia.org/wiki/IME > IMEはWindowsにおける用語であり、 > 広く文字入力のためのシステムを表す一般名称はインプットメソッドである。 > ただし、最近ではWindows以外のプラットフォームで使われるインプットメソッド > (Mac OSの「ことえり」など)についてもIMEと呼ばれることがある。 > AndroidプラットフォームではWindows同様、IMEという用語を使用している。 うむ、微妙。
380 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 21:33:16 ] IME と呼ぶ人はほぼ Windows ユーザと考えてオケです。
381 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 10:42:48 ] Qt Creatorの一番したのバーに検索ボックスがありますよね あれ、メソッドとか検索できて便利なんだけど ついでに、変数も検索できないですか?
382 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:52:48 ] 無理を承知の上でのQt初心者の質問です。 Windowsで,QMainWindowのウィンドウハンドル(HWND)を取得する方法ってないんでしょうか? 今まで他の開発環境で書きためたソースやライブラリでHWNDを引数やリターン値に持つ WIN32 APIをかなり使っているので,楽に移植したいのです。 Qtの設計思想からOS依存するようなものは排除されているのもわかりますし,WIN32 APIの 代替となるような機能が用意されているようではあるんですが... 現在アクティブなウィンドウのハンドルならWIN32 APIの ::GetActiveWindow() で取得できましたが, その他のウィンドウについては,::FindWindowEx()とか使って取得するしかないんでしょうか。
383 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:58:04 ] ありますが
384 名前:382 mailto:sage [2009/10/26(月) 12:59:29 ] >>383 質問する前にヘルプを探したんですが見つかりませんでした。 教えてください。
385 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:09:04 ] >>382 Qt-interest Archive - Qt 4.2.0: How to get HWND handle? lists.trolltech.com/qt-interest/2006-10/thread00800-0.html WIdはWindowsではhwndだから、WId QWidget::winId() constを使うんだってさ
386 名前:382 mailto:sage [2009/10/26(月) 13:24:22 ] >>385 やってみたらうまく行きました。ありがとうございました。
387 名前:デフォルトの名無しさん [2009/10/26(月) 16:08:56 ] >>381 できないんじゃないかな。 多分知っていると思うけど、現在開いているドキュメント以外を検索したいのなら。 「編集」メニューの「検索・置換」->「Find Dialog」や 「編集」メニューの「検索・置換」->「ディスク上のファイル」 などを選んで、複数のファイルの中の検索ができるからそれを使うしかないんじゃないかな。 検索結果は、Qt Creatorの中でリストアップされるので便利。 でもこれだと、変数限定というわけにはいかないけど。 ディスク内を検索するときは、ディレクトリを指定した方がいいよ。
388 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:19:11 ] >333 遅レスですが、レスありがとうございます。 >だから、シーンのイベントハンドラーをオーバーライドして、 >アイテムの共通の処理は、こちらで書けばいいと思う。 これを実践しようと思い、QGraphicsSceneから派生したPixmapSceneクラスを つくり、mousePressEvent()を実装して、そこでマウスクリックされた論理座標を 得ようとしました。 class PixmapScene : public QGraphicsScene { public: PixmapScene(); protected: void mouseMoveEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event); }; この書き方だと、マウスイベントが発生されないのですが、 どこが間違っているでしょうか?
389 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:26:23 ] virtual
390 名前:デフォルトの名無しさん [2009/10/26(月) 23:33:00 ] >>388 Q_OBJECTマクロ書かないといけない。 class PixmapScene : public QGraphicsScene { Q_OBJECT public: PixmapScene(); //...
391 名前:390 [2009/10/26(月) 23:45:23 ] >>390 の続き もう一つ QGraphicsSceneのイベントハンドラーのほとんどは、 QGraphicsSceneEventから派生したイベントタイプのイベントを ハンドルする。 lass PixmapScene : public QGraphicsScene { Q_OBJECT //... protected: void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) void mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) //... QGraphicsSceneやQGraphicsItemは、qrealやQRectFなどの浮動小数点数型 の値で座標値を保持、計算する。 だから、自分でカスタムクラスを書く時は、これらの浮動小数点数型を使う。 ちなみに、一部の組込みのものを除いて、ほとんどのプラットフォームでは、 qrealはdoubleがtypedefされたも。 ただし、ユーザーとして使う時は、論理座標ということでint型などの値を メンバー関数に渡してもよい。
392 名前:390 [2009/10/26(月) 23:54:53 ] 訂正);が抜けていた。 void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent); void mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent); 分かっているとは思うけど、PixmapSceneからさらに派生させ、 その派生クラスでイベントをハンドルする場合には PixmapSceneのイベントハンドラーにも virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent); とvirtualをつけないといけない。
393 名前:390 [2009/10/26(月) 23:58:18 ] 度々ごめん 誤)lass PixmapScene : public QGraphicsScene 正)class PixmapScene : public QGraphicsScene
394 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:06:04 ] >391, 392 virtualの件は承知しております。ご指摘ありがとうございます。 sceneのマウスイベントがうまく補足できません。 class PixmapScene : public QGraphicsScene { Q_OBJECT public: PixmapScene(); protected: void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent); void mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent); }; void PixmapScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) { int x = mouseEvent->lastPos().x(); int y = mouseEvent->lastPos().y(); qDebug() << QString("into PixamapScene::mousePressEvent() (x, y) = (%1, %2)").arg(x).arg(y); } とかやってみましたが、コンソールに何も表示されません。 MainWindowでPixmapScene m_scene;として、 m_scene.addPixmap(QPixmap::fromImage(m_imge)); ui->graphicsView->setScene(&m_scene); を行って、sceneをgraphicsviewにセットはしております。 何か根本的に理解が間違っているのか。。。
395 名前:デフォルトの名無しさん [2009/10/27(火) 00:10:24 ] >>390 > Q_OBJECTマクロ書かないといけない。 イベントハンドラをオーバーライドするためだけならば、なくてもよいです。 >>392 > virtualをつけないといけない。 付けなくて付けたことになるので、付けなくてもよいです。
396 名前:390 [2009/10/27(火) 00:32:13 ] >>395 誤解していた。 ありがとう。
397 名前:390 [2009/10/27(火) 00:47:07 ] >>394 ちょっと原因が分からない。 こちらで確認した限りでは、394のコードで問題なくマウスプレスイベントがハンドルできた。 ただ、ハンドラーの中でQGraphicsScene::mousePressEvent()をコールした方がいいと思う。 そうしないとアイテムが配置されている時に、そのアイテムにイベントが伝わらなくなる。 void PixmapScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) { qreal x = mouseEvent->lastScenePos().rx(); qreal y = mouseEvent->lastScenePos().ry(); qDebug() << QString("PixamapScene::mousePressEvent() (x, y) = (%1, %2)").arg(x).arg(y); QGraphicsScene::mousePressEvent(mouseEvent); }
398 名前:390 [2009/10/27(火) 01:12:38 ] >>394 一つ思いついた。 GraphicsViewのmousePressEvent()をオーバーライドしているのに、 その中で基底クラスのQGraphicsView::mousePressEvent()を コールしていないのが原因では? グラフィックスシーンフレームワークでは、イベントは QGraphicsView -> QGraphicsScene -> QGraphicsItem の順番に伝えられるから。
399 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:50:56 ] Qtのネットワークに関しての質問です。 HTTPプロトコルを使って、Webサイトにアクセスするために、今まではQHttpとその周辺のクラスを使っていました。 しかし、QHttpのヘルプを見ると、Qt 4.4で導入された、QNetworkAccessManagerを使ったほうがよいと書いてありました。 確かにこちらだと、アクセスした後に返ってくる返答をQIODeviceを継承しているQNetworkReplyで受け取れるみたいで、使いやすそうでした。 そこで、こちらに移行しようと思い、書き直しているのですが、QHttpで実装していたときに、 headerを記述するために用いたQHttpRequestHeaderクラスの QHttpRequestHeader::QHttpRequestHeader ( const QString & method, const QString & path, int majorVer = 1, int minorVer = 1 ) このメソッドの、request-URIを指定するpathや、protocol-versionを指定するmajorVerなどを 記述するものがQNetworkReplyクラスやその周辺クラスのQNetworkRequestクラスに見当たりません。 また、QHttp::setHost(...)のようなホストを指定するメソッドも見当たりません。 どうかご存知の方がおられましたら、ご教授お願いします。
400 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:09:43 ] QIODeviceを継承している
401 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:13:02 ] pathやhostはQNetworkRequestにQUrlで指定するんじゃないの?
402 名前:399 mailto:sage [2009/10/27(火) 07:44:54 ] >>401 できました! 自動でホストとパスを分けてくれるんですね。 他のところのバグもあってうまく行かず気づきませんでした。 どうもありがとうございました。
403 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:43:30 ] >390 void PixmapScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) に入ってくることができました。 がしかし、 mouseEvent->lastPos(), pos()など実行しても、(0, 0)しか返って来ません。 mouseEvent->scenePos()が目的としていた座標値のようです。 また、scenePos()がマイナスのところをクリックしても、上記イベントハンドラに来るみたいです。 てっきりそのscene内だけかと思ったら。。。 もう少しヘルプを読んでみます。ありがとうございました。
404 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:16:35 ] mousecapture
405 名前:403 mailto:sage [2009/10/27(火) 23:32:40 ] あと一息なのでお知恵を拝借いただけるとありがたいです。 MainWindow(QMainWindowから派生) +ImageView(QGraphicsViewから派生) +PixmapScene(QGraphicsSceneから派生) MainWindowでui->graphicsView->setScene()でPixmapSceneオブジェクトを設定 という前提で、 void PixmapScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) 上記イベントハンドラから、MainWindowのメンバ関数を呼びたいのですが、 どのようにしたらよいのでしょう? PixmapSceneからImageViewのポインタをゲットできれば、 ImageViewからMainWindowのポインタを得て、MainWindowのメンバ関数を呼べるのでは と考えております。 やりたいことに対して煩雑な気がするのですが、こんなものですかね。
406 名前:デフォルトの名無しさん [2009/10/27(火) 23:38:07 ] >>403 >また、scenePos()がマイナスのところをクリックしても、上記イベントハンドラに来るみたいです。 >てっきりそのscene内だけかと思ったら。。。 シーンは論理座標を表現するクラスなので座標値としてマイナスもとる。
407 名前:デフォルトの名無しさん [2009/10/28(水) 00:38:13 ] >>405 >あと一息なのでお知恵を拝借いただけるとありがたいです。 がんばれ。 >MainWindow(QMainWindowから派生) >+ImageView(QGraphicsViewから派生) >+PixmapScene(QGraphicsSceneから派生) ちょっとクラスの構成や参照関係が見えないんだけど。 これらのクラスは、全てコードで書いたの?それともフォームエディタを使った? フォームエディタを使ったのならMainWinodwの下に セントラルウィジットしてQWidgetがあるはずなんだけど。 >>285 で指摘したようなことが必要になる。 それとも、ImageViewは、setCentralWidget()で指定した セントラルウィジットなの? PixmapSceneは、親オブジェクトを参照している、それともしてない? その辺が分からないから一般論で回答する。
408 名前:407 [2009/10/28(水) 00:39:41 ] つづき QWidgetには、親ウィジットをポインターとして参照させることができるから もしコンストラクターなどで親ウィジットを参照させてないなら参照させるようにしてから そのparentWidget()で親ウィジットを参照してqobject_cast<>()でキャストして という処理を繰り返し、メインウインドウまで遡っていくか。 または >>286 で指摘した方法などの代替案をとるとか。 などが考えられる。 また、シーンのカスタムクラスを書いているのならばMainWindowをポインターメンバーとして参照し、 コンストラクト時に渡すようにすればいいんじゃないかな。 QGraphicsSceneはQWidgetではなくQObjectを継承している、parent()で親オブジェクトを得て、 qobject_cast<>()でキャストする必要がある。
409 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 08:30:44 ] ググっていたら,いつの間にか「Qt Users Forum Japan」なるフォーラムが出来てる のにたどり着いた。 qtusersforum.s2.zmx.jp/forum/viewtopic.php?f=9&t=97 ここもいいんだけど,ソースコード書くとインデントが無視されてしまうので,ソースコート を書く必要がある場合は上の方が向いてるかも。 管理人がどんなプロフィールで,どんな背景で作られたかはわからんが。
410 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:34:49 ] Qtでマルチスレッドのデザインパターンの実装例がほしい。
411 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:52:00 ] >>410 pthread(POSIX Thread)のパターンが、そのまま使えない?
412 名前:403 mailto:sage [2009/10/28(水) 22:30:47 ] >407 MainWindowとImageViewはフォームエディタで作成 MainWindow上にQGraphicsViewを格上げ QGraphicsSceneを派生したPixmapSceneを自作 PixmapSceneはMainWindowにメンバ変数としてインスタンス生成 PixmapSceneを派生する際、QGraphicsSceneがご指摘のとおり、 QObjectを引数とするコンストラクタしかなかったため、PixmapSceneの イベントハンドラからMainWindowのメンバ関数へどうやってアクセスしたら 良いのだろうと悩みました。 繰り返しになりますが、PixmapSceneのインスタンス生成は、MainWindowの メンバ変数としておりますが、この際、 PixmapScene::PixmaScene(QObject* parent) : QGraphicsScene(parent){} とコンストラクタを定義して、 MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow),m_pixmapscene(this) { ... } PixmapSceneにMainWindowのポインタを渡しておき、PixmapScene::mousePressEventQGraphicsSceneMouseEvent* mouseEvent) { MainWindow* mainwindow = qobject_cast<MainWindow*>(parent()); qDebug() << mainwindow; if (mainwindow != 0) { mainwindow->setPointToStatusBar(mouseEvent->scenePos().x(), mouseEvent->scenePos().y()); } } MainWindowのメンバ関数にアクセスすることができました。 どうもありがとうございました。 (長々と説明が下手ですいません。) >>286 のように、グローバルなアプリのポインタ使った方がスマートかなと思ったり。。。
413 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:45:29 ] >>410 サブスレッドからシグナルを送るとメインスレッドのスロットで捕捉されるので スレッド間通信がすっげー簡単になるよ
414 名前:デフォルトの名無しさん [2009/10/28(水) 23:08:30 ] >>412 >グローバルなアプリのポインタ使った方がスマートかなと思ったり。。。 MainWindowまでたどるのが大変なとき(遠いとき)は、有効。
415 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 01:24:46 ] >>413 まあ、そんなところの実装例が見たいんだよな。 4.6にはQFutureとかあるし、使い方も知りたい。
416 名前:デフォルトの名無しさん [2009/10/29(木) 08:18:19 ] >>415 QFutureは、4.4からあります。
417 名前:403 mailto:sage [2009/10/29(木) 23:45:58 ] >408 >>286 のようなコードに修正したいと思ったのですが、qAppはどこで生成されているものなのでしょう? 今現在main()は int main(int argc, char *argv[]) { QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } このような感じです。(今見るとa, wとか適当な変数名。。) QApplicationクラスを派生させて、getMainWindow()を追加するのはわかるのですが。
418 名前:デフォルトの名無しさん [2009/10/30(金) 06:10:04 ] >>417 >408 >>286 のようなコードに修正したいと思ったのですが、qAppはどこで生成されているものなのでしょう? qAppは、/QTDIR/src/gui/kernel/qapplication.h内で定義されているマクロで、 次のようになっている。 #if defined(qApp) #undef qApp #endif #define qApp (static_cast<QApplication *>(QCoreApplication::instance())) マクロなのでコンパイルする前処理としてプリプロセッサがソースコードに qApp があると、その部分全てを static_cast<QApplication *>(QCoreApplication::instance()) に(ソースコードとして)置き換えてくれる。 つまり、ソースコードにqAppと書いたら、そこにstatic_cast<QApplication *>(QCoreApplication::instance()) と書いたことと同じことになる。 それで、このQCoreApplication::instance()は、何かと言うと、QApplicationの基底クラスのQCoreApplicationで 定義されているstaticな関数で、アプリケーションのインスタンス(実例:メモリー上に実際に確保された変数)を指すポインターを返す。 つまり、アプリケーションを指すポインターを返す。
419 名前:418 [2009/10/30(金) 06:11:41 ] >>417 QApplicationのqApp [Macro] doc.trolltech.com/4.5/qapplication.html#qApp QCoreApplicationのinstanc() [static] doc.trolltech.com/4.5/qcoreapplication.html#instance >このような感じです。(今見るとa, wとか適当な変数名。。) 個人的な意見だけど、自分だけでプログラムするのなら、どんな名前でもいいんじゃないかな。 また、簡単な動作チェックなんかのときなどは、いちいち名前なんて考えてられないし。 でも、プロジェクトとかに参加して、ネーミング規約があるのならばそれに従わなければならないし、 他の人が見るものは、ある程度わかりやすくした方がよいと思う。 そして、その”他の人”というのは、数年後の自分である可能性がある。 そうすれば何年も前に書いた、規模の大きい、もう内容を忘れてしまったコードを見たときに、どんな処理をしているか把握するための 手助けになる。 だから普段から、ある程度はわかりやすい名前を付ける癖を付けておいた方がいいと思う。 個人的な意見だから気に障ったらごめん。
420 名前:デフォルトの名無しさん [2009/10/30(金) 20:43:18 ] QtCreatorが動かん、ハングアップする……と悶々としてたがAvast切ったら改善された。何故。 悩む人がいるかもしれないから参考までに……
421 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 21:33:21 ] >418 詳しく説明していただきありがとうございました。 変数名についてですが、たぶんMainWindowのexampleのmain.cppを そのまま持ってきた気がします。 自分で書くなら、ループ変数、局所的なテンポラリ変数以外に一文字 というのはあまり使いません。 ちなみに、Qtは初めて間もないです。MFCとかC++/CLIとか趣味でやっていましたが、 どちらも中途半端な気がしており、マルチプラットフォームで純粋なC++であるQtに 興味を持った次第です。
422 名前:デフォルトの名無しさん [2009/10/30(金) 22:21:39 ] >>421 >変数名についてですが、たぶんMainWindowのexampleのmain.cppを >そのまま持ってきた気がします。 >自分で書くなら、ループ変数、局所的なテンポラリ変数以外に一文字 >というのはあまり使いません。 言い過ぎた気がするので、謝ります。ごめんなさい。 >ちなみに、Qtは初めて間もないです。MFCとかC++/CLIとか趣味でやっていましたが、 >どちらも中途半端な気がしており、マルチプラットフォームで純粋なC++であるQtに >興味を持った次第です。 どっぷりとQtの世界につかってください。 これもおせっかいかも(^_^;)。
423 名前:403 mailto:sage [2009/10/31(土) 00:11:27 ] >422 >言い過ぎた気がするので、謝ります。ごめんなさい。 全く気にしておりませんよw ちなみに、>286のようにQApplicationの派生クラス(Application)にgetMainWindow()という MainWindowのポインタを取得できる関数を追加する場合、 MainWindowのポインタ自体をセットするのはどのようにするものでしょうか? 自分が考えるところでは、派生クラスApplicationにsetMainWindow(MainWindow* mainwindow);を 追加して、main()で { Application app(argc, argv); MainWindow mainwindow; mainwindow.setMainWindow(&mainwindow); mainwindow.show(); return app.exec(); } とやるくらいしか思いつかないのです。
424 名前:デフォルトの名無しさん [2009/10/31(土) 00:33:56 ] >>423 それでいいと思うけど。 >mainwindow.setMainWindow(&mainwindow); app.setMainWindow(&mainwindow); だね。
425 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 08:35:26 ] >424 ありがとうございます。 >app.setMainWindow(&mainwindow); easy missでした。 ちなみにQApplicationの派生クラスを作る際に気をつけることって ありますか? リンカから undefined reference to vtable for Application と怒られました。(ApplicationはQApplicationの派生) コンストラクタは Application::Application(int argc, char* argv[]) : QApplication(argc, argv) {} としております。
426 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 08:43:13 ] >425 自己解決しました。 randt.jp/?p=729 qmakeを再実行してリビルドしたら大丈夫でした。 すべてリビルドはやっていたのですが、qmakeの再実行はすべてリビルドに 入ってないのか。
427 名前:デフォルトの名無しさん [2009/10/31(土) 09:21:01 ] >>425 >Application::Application(int argc, char* argv[]) : QApplication(argc, argv) {} Application::Application(int &argc, char* argv[]) : QApplication(argc, argv) {}
428 名前:デフォルトの名無しさん [2009/10/31(土) 15:13:45 ] >>425 > コンストラクタは > Application::Application(int argc, char* argv[]) : QApplication(argc, argv) {} > としております。 Application::Application(int &argc, char* argv[]) : QApplication(argc, argv) {} &argc としないと落ちることがあります。
429 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 23:10:50 ] >428 QApplicationのリファレンスを見ると、コンストラクタはargcが参照型なのですね。 ご指摘ありがとうございました。
430 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 19:37:10 ] QFileDialogで、ダイアログのみのフィルタって掛けられますか?
431 名前:デフォルトの名無しさん [2009/11/03(火) 20:45:42 ] >>430 意味が分からないんだけど。 具体的に言うとどういうこと?
432 名前:デフォルトの名無しさん [2009/11/03(火) 20:55:18 ] >>430 質問しているのは、ファイルのフィルタじゃないよね?
433 名前:430 mailto:sage [2009/11/03(火) 21:05:32 ] えっと、すいません X ダイアログ ○ ディレクトリ でした
434 名前:デフォルトの名無しさん [2009/11/03(火) 21:38:34 ] >>433 ディレクトリのフィルタはできるよ。 static関数のgetExistingDirectory()を使用するか、オプションとしてQFileDialog::ShowDirsOnlyを 指定すればよい。 参考: doc.trolltech.com/4.5/qfiledialog.html
435 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 22:03:56 ] QMainWindowでshow()が実行される直前に呼ばれるイベントハンドラはないでしょうか? 以下のソースで、引数つきで実行された場合(argc>1)の引数の処理をMainWindow内で したいと考えています。 int main(int argc, char *argv[]) { Application app(argc, argv); MainWindow mainwindow; mainwindow.show(); return app.exec(); }
436 名前:デフォルトの名無しさん [2009/11/03(火) 22:25:04 ] >>435 show()を後からコールすればいいだけなんじゃない?
437 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 22:42:10 ] >436 たしかにそれでも可能です。 (MainWindowのコンストラクタで処理しても良いとも思います) あと、main()にあまりたくさん記述したくないなぁというつまらない理由でもあります。 MFCや.NETでフォームとかダイアログが生成されたときに、 一度だけ呼ばれる関数があったので、Qtでもそのようなものが あるのかなと思い、お伺いしました。
438 名前:デフォルトの名無しさん [2009/11/03(火) 22:46:01 ] QMainWindow を継承して MainWindow 創ったんなら MainWindow::show() の中で hogehoge; this->show(); とすればよかろう
439 名前:デフォルトの名無しさん [2009/11/03(火) 22:57:55 ] >>437 その処理をするメンバー関数を定義して、そのメンバー関数をコンストラクターからコールすればいいのではないかな。 そして、そのメンバー関数からshow()をコールすればいい。 あるいは、メインにQObjectを継承したカスタムクラスPreprocessのオブジェクトを作ってそれに引数に対する処理をさせてはどう? そして、そのオブジェクトのシグナルとMainWindowオブジェクトのshow()スロットでつなげるとか?
440 名前:デフォルトの名無しさん [2009/11/03(火) 23:18:13 ] >>435 処理の内容にもよるのかもしれないけれど、アプリケーションのカスタムクラスで コマンド引数に対する処理をしたほうが自然な気がするけど。
441 名前:430 mailto:sage [2009/11/04(水) 07:09:52 ] >>434 ありがとうございました。
442 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 08:14:05 ] ・・・無限ループ?
443 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:19:59 ] ℃-uteのファンだから、Qt使うことにしようかな?( ・ω・)y─┛〜〜
444 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:52:16 ] ど……どうて?
445 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 14:55:22 ] Qtのなるべく新しい日本語ドキュメントってどれでしょうか? 4みたいだけど、あまり日本語化されていない。 qt.linux-life.net/4/doc/ja/index.html 結構日本語化されているけど、2.3.2。 www.kde.gr.jp/~ichi/qt-2.3.2/index.html これぐらいでしょうかねぇ。
446 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:12:29 ] きっと非公式のは期待してないんだよね
447 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 15:36:12 ] いえ、非公式のでもいいです。
448 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 22:57:41 ] Qtの正規表現で最短一致を表現したいのですが、どうしたらいいのでしょうか。 Perl5では(.+?)で出来るそうなのですが、Qtでは出来ないようでした。 Key=Value で、Valueに=が含まれる場合に、Key側を最短にしたいです。 正規表現使わない方法もありますが、正規表現使ってシンプルに実装したいです。
449 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 23:22:49 ] perlの性器表現を標準だと思わない方が良い pc12.2ch.net/test/read.cgi/unix/1039165754/ pc12.2ch.net/test/read.cgi/tech/1241537764/ pc12.2ch.net/test/read.cgi/tech/1189246036/
450 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 23:37:33 ] 最短マッチにしたいならQRegExp::setMinimal(true); ただ(.+)も最短マッチになったはず
451 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:05:34 ] 449,450 ありがとうございます。 すみません、QRegExp::setMinimal(true); も試してだめだったの忘れてました。 Key=Value を QRegExp rxKey("^(.+)=(.*)$"); rxKey.setMinimal(true) とやっても、Key側にイコールが入ってしまいます。
452 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:39:09 ] QRegExp rxKey("^(.+)=(.*)$"); rxKey.setMinimal(true); rxKey.indexIn("Key=Value\n"); qDebug() << rxKey.cap(1); 普通にこれで切り出せるけど
453 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:46:16 ] QRegExp rxKey("^([^=]+)=(.*)$"); じゃだめ? setMinimal は全体を最短にするだけで、各要素を最短でとるわけではないっぽいな。
454 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 09:54:35 ] ttp://qt.gitorious.org/qt/qt のページにある様にgitで git clone git://gitorious.org/qt/qt.git Qtを落としてきたら、なぜかインストール先が /usr/local/Trolltech/Qt-4.7.0 になってた ……4.6.0betaのハズなんだけど
455 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 12:08:34 ] QImageとかQPixmapを使うときに、QPixmap::fromImage(const QImage&)が値渡しで返ってくるのですが、 入力のQImageと出力のQPixmapは別々の領域に確保されるんでしょうか? Implicitly Shared Classesの話がそうなのだと思うのですが、いまいち理解できなくて。 QImage img1, img2; img1.load(filename); img2 = img1; みたいに使っても問題ないということなのでしょうか。 いちいちポインタを使うものではないですか?
456 名前:デフォルトの名無しさん [2009/11/08(日) 14:22:05 ] gihyo.jp/dev/feature/01/qt/0003?page=2
457 名前:デフォルトの名無しさん [2009/11/08(日) 14:27:40 ] >>455 >>456 の「子ウィジェットの自動メモリ解放に関連して〜」 辺りを。 >Implicitly Shared Classesの話がそうなのだと思うのですが、いまいち理解できなくて。 その通りでISCが関連します。 >みたいに使っても問題ないということなのでしょうか。 問題ないです。 >いちいちポインタを使うものではないですか? ポインタを使わないようにするものです。
458 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:02:31 ] >457 レスありがとう。 仮に、 QImage img1, img2; img1.load(hoge1); img2.load(hoge2); img2 = img1; とした場合、img2は、hoge2の画像データを自動で内部deleteして、 img2もimg1もhoge1の画像を指すようになるんですよね? そして、img1かimg2どちらかに何らかの操作が行われた場合、初めてimg1のデータがimg2と 別々の領域になるように(内部の画像データコンテナだけだと思うが)、裏でコピー処理が行われる という理解で良いのでしょうか。
459 名前:デフォルトの名無しさん [2009/11/08(日) 15:35:14 ] >>458 その通りです。
460 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 19:13:58 ] >>454 master系のブランチは既に4.7向けになってる。 4.6系のソースが欲しいなら 4.6 / 4.6-stable 等の 4.6系のブランチを checkout する必要がある。
461 名前:デフォルトの名無しさん [2009/11/09(月) 00:54:58 ] イベントを受け取ったときに、QLabelのテキストの色を変化させたいのですが、 どのように変えればいいのでしょうか?
462 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:05:29 ] Q_SLOTSってなに?
463 名前:デフォルトの名無しさん [2009/11/09(月) 03:12:57 ] >>461 たとえばこんな感じ QPalette labelPalette = label->palette(); labelPalette.setColor(QPalette::WindowText, Qt::red); label->setPalette(labelPalette);
464 名前:デフォルトの名無しさん [2009/11/09(月) 03:57:13 ] >>462 Qt以外のライブラリでQtの”シグナルとスロット”と同様の機能があり、 そのライブラリでslotsていうキーワードが使用されているようなときに使用する。 このマクロはboostライブラリとQtを一緒に使用できるようにするために、 Qt4.1で導入された。 いつもは public slots: などと書いているQtのスロット部分に public Q_SLOTS: と書けばよい。 ほかにも、Q_SIGNALS、Q_SIGNAL、Q_SLOT、Q_EMITがある。 qt.nokia.com/doc/4.5/qobject.html
465 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 10:24:40 ] >>463 ありがとう出来た。 labelからQPalette取り出せば良かったのか。 ただ、デバッグビルドだと色変えた時にランタイムエラー出るのに、 リリースビルドだとすんなり動いた何故なんだ・・・。
466 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 13:40:34 ] >>464 オマエ、イイヤツ
467 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:46:02 ] Phononってさ、WindowsではDirectX、MacOSXではQuickTime、LinuxではGStreamerだけを使うの? いろいろ調べると、Phonon自体はWindowsでVLCバックエンドとかMPlayerバックエンドを使えるみたいなんだけど、 qtからじゃ変える方法があるのかないのかよくわかんない。 たまにDirectXのコーデックじゃうまくいかないことがあるから、 プレイヤーからVLC使って再生とかMPlayer使って再生とかしたかったんだけど。 qtは単にPhononを利用しているだけ。だけどqtが利用しているPhononに Windowsだと、DirectX以外のバックエンドサポートプラグインを加えてないってことなのかなぁ? 理屈上は、VLC or MPlayerサイトで配布されているphonon-backendを加えて qtのSDKを再コンパイルすると使えるようになるという話なのだろうか?
468 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:54:05 ] お、ちょっとわかった。 QTのライブラリの中にplugins\phonon_backendってディレクトリがあって そこに、phonon_ds94.dllとかあった。 もしVLCバックエンドを使うとしたらphonon_vlc.dll?とかいうファイルを入れるわけだな。 これを作れるのかどうか、どうやって作るのか、作った後の切り替え方はしらないけど。 ちなみに、他に興味がある人のために説明しておくと、phonon_backendは MSVC使って自分でコンパイルしたやつにしかない。つまり普通に配布されているmingw版には存在しない。 mingw版ではDirectShowあたりがコンパイルできないからPhononサポートしてないんだと。
469 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:25:18 ] Phononよか4.6の新機能に期待 Video関連はまだスケルトン状態だけどな・・・
470 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:48:45 ] 4.6の新機能ってなに?
471 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 21:54:14 ] >>470 ttp://qt.nokia.com/doc/4.6-snapshot/qt4-6-intro.html
472 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:15:59 ] あー最新の日本語ドキュメントが見たい
473 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 11:38:55 ] 4.6はQWebElementとQStateMachineに個人的に期待している
474 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:31:14 ] Qt Creatorの日本語化する手順について、ご存じの方がいらっしゃいましたら御教授お願いいたします。 環境は以下の通りです。 OS Windows7 64bit版 Qt qt-sdk-win-opensource-2009.04.exe Qtインストール先 C:\Qt
475 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 21:13:57 ] >>474 ttp://qt-creator-jp.sourceforge.jp/ このサイトに書いてある 『qtcreator_ja.qm ファイルを複製して qt_ja_JP.qm にリネームする事で日本語化させる事も可能です。』 自分は上の通りにやったら日本語化された
476 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 22:15:43 ] >475 レス感謝です。バッチリ日本語化されました。 ありがとうございました!!!
477 名前:デファルトの名無しさん mailto:sage [2009/11/11(水) 22:49:34 ] Ubuntu QtCreator 先日Ubuntu9.10にバージョンアップしたら、ボタンのテキストに日本語が使えなくなりました。 どおして?
478 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:46:07 ] QToolTipでツールチップの消える時間を制御できる方法はあるでしょうか? mouseMoveEvent()でツールチップを表示しているのですが、マウスを止めていても、 ツールチップを表示させたままにしたいのです。
479 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 07:19:28 ] >>477 こちらはDebian GNU/Linuxで、Ubuntuの9.1のパッケージのQt Creator1.2.1を ダウンロードして使ってみたけど、ちゃんと日本語が表示できたよ。 うまくいかないようなら、Nokia Development Frameworksのウェブサイトから インストーラー付きのQt Creator1.2.1がダウンロード出きるから それを入れてみるのもいいんじゃない? でも、Qt Creatorが原因ではないときには、同じ症状になるかも知れないけど。 ttp://qt.nokia.com/downloads-jp
480 名前:デフォルトの名無しさん [2009/11/12(木) 18:47:11 ] >>478 もっといい実装があると思うけど、下記のコードで実現可能。 enterEvent()、leaveEvent()ハンドラーをオーバーライドして、 マウスポインターがウィジットの中にあるかどうかを表すm_IsEnteredの値をセットし、 QTimerを使って、アイドル時にQHelopEvent(QEvent::QToolTip,..) を発生させている。 そして、event()ハンドラーをオーバーライドして、QHelpEventのtype()がQEvent::QToolTipの時に、 ツールチップを表示するようにしている。 下記のコードでは、0.5秒毎にQHelpEvent(QEvent::QToolTip,..)を発生させている。 class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); protected: bool event(QEvent* event); void enterEvent(QEvent* event); void leaveEvent(QEvent* event); void mouseMoveEvent(QMouseEvent* mouseEvent); private slots: void sendToolTipEvent(); private: bool m_IsEntered; QTimer* m_TipTimer; };
481 名前:480 [2009/11/12(木) 18:48:20 ] つづき MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_IsEntered(false), m_TipTimer(0) { setToolTip("Tooltip"); setMouseTracking(true); m_TipTimer = new QTimer(this); m_TipTimer->setInterval(0.5 * 1000); connect(m_TipTimer, SIGNAL(timeout()), this, SLOT(sendToolTipEvent())); resize(800, 500); show(); } bool MainWindow::event(QEvent* event) { QHelpEvent *helpEvent = static_cast<QHelpEvent*>(event); if(helpEvent) { if(helpEvent->type() == QEvent::ToolTip) { QToolTip::showText(QCursor::pos(), toolTip()); return true; } } return QWidget::event(event); }
482 名前:480 [2009/11/12(木) 18:50:17 ] つづき void MainWindow::enterEvent(QEvent* event) { m_IsEntered = true; if(m_TipTimer and !m_TipTimer->isActive()) { m_TipTimer->start(); event->accept(); } QMainWindow::enterEvent(event); } void MainWindow::leaveEvent(QEvent* event) { if(m_TipTimer and m_TipTimer->isActive()) { m_TipTimer->stop(); } m_IsEntered = false; event->accept(); QMainWindow::leaveEvent(event); } void MainWindow::mouseMoveEvent(QMouseEvent* mouseEvent) { Q_UNUSED(mouseEvent); QToolTip::showText(QCursor::pos(), toolTip(), this, frameGeometry()); } void MainWindow::sendToolTipEvent() { if(m_IsEntered == true) { QHelpEvent toolTipEvent(QEvent::ToolTip, mapFromGlobal(QCursor::pos()), QCursor::pos()); QCoreApplication::sendEvent(this, &toolTipEvent); } }
483 名前:480 [2009/11/12(木) 18:54:22 ] 訂正、event()内のshowText()の引数 誤)QToolTip::showText(QCursor::pos(), toolTip()); 正)QToolTip::showText(QCursor::pos(), toolTip(), this, frameGeometry());
484 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 19:44:15 ] ドラッグ&ドロップを実装しようと思っているんだけど、 ウインドウに乗せたリストビューだけに反応させたい。 この場合、リストビューを継承したMyListviewを作らないといけないのかな? そのMyListviewをQt Creatorでグラフィカルに使うために パッケージ?みたいな変なものを作らないといけないのだろうか?
485 名前:デフォルトの名無しさん [2009/11/12(木) 20:35:57 ] >>484 >ドラッグ&ドロップを実装しようと思っているんだけど、 >ウインドウに乗せたリストビューだけに反応させたい。 >この場合、リストビューを継承したMyListviewを作らないといけないのかな? コードで書くのならば、それが一番素直な気がする。 あとは、イベントフィルターをインストールするとか。 Qt CreatorのGUIフォームエディタ、Qt Desingerなんかで、既に配置したQListView何かに カスタムな振る舞いを追加したいのならば、「格上げ」でソースを追加することができる。 ソースは、通常のカスタムクラスを書くように、ヘッダと実装ファイルを用意する。
486 名前:485 [2009/11/12(木) 20:36:44 ] つづき >そのMyListviewをQt Creatorでグラフィカルに使うために >パッケージ?みたいな変なものを作らないといけないのだろうか? この意味がよく分からないんだけれど? Qtには、View/Modelフレームワークと呼ばれるViewがあり、 具体的にはQTableView、QTreeView、QListViewなどである。 これらはたぶんGUIでアイテムとかは配置できない。 こちらは、View-Control/ModelとDelegateを組み合わせて使用する。 柔軟性が高い。一つのモデルに対して二つのビューで表現させたりできる。 だけど、ちょっとしたものを表示するだけなら 下記のViewを使用するのがいいかもしれない。 もう一つQListWidget、QTreeWidget、QTableWidetというViewがあり、 こちらは、アイテムをGUIで配置できる(制限はあるとは思うけど:あまり使用したことがないのでよく知らない)。 これらは、Qt3に用意されていたViewと同様の機能を提供する。 大概のものはこれで間に合うので、こちらを使用するのもよい。
487 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:38:36 ] わからないなら解凍しないでください
488 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:41:31 ] パッケージ?ってのは、ようするにMyListviewを Qt CreatorのGUIパーツ置き場に起きたいって事。 そこからpush button見たいにフォームにドラッグ&ドロップして 大きさ変えたり、右のプロパティウインドウでいじれるようにしたいってこと。
489 名前:デフォルトの名無しさん [2009/11/12(木) 20:56:06 ] >>488 ありがとう。理解できた。
490 名前:デフォルトの名無しさん [2009/11/13(金) 06:22:27 ] >>488 Qt Designerのプラグインを作ればできますよ。 doc.trolltech.com/4.5/designer-creating-custom-widgets.html
491 名前:デフォルトの名無しさん [2009/11/13(金) 06:28:50 ] >>486 > もう一つQListWidget、QTreeWidget、QTableWidetというViewがあり、 > こちらは、アイテムをGUIで配置できる(制限はあるとは思うけど:あまり使用したことがないのでよく知らない)。 > これらは、Qt3に用意されていたViewと同様の機能を提供する。 > 大概のものはこれで間に合うので、こちらを使用するのもよい。 Q*Widgetは、そのままの機能使うだけならば、手軽に使えるのだけれど、 例えば、内部にモデルを抱えていて、差替えができなくて苦しくなったりするので、 機能を追加しようというなら、できるだけQ*Viewを使う方がよいと思う。
492 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 16:01:52 ] Model/Viewを使えるのって、 ListView/TreeView/TableView/ColumnView のViewシリーズのほかに何があるのかな? ComboBoxでも使えるってのはわかった。 でもLabelやTextEditでは使えないのだろうか? 最近データベース関係やってないから忘れているんだが、 VisualStudioのADO見たいに、フィールドに連結して 値を入れたり表示したりってのを簡単にできないのだろうかと思っているのだが。 Modelからシグナルが発生するようなので、 それを使ってLabelやTextEditに手動で入れるという方法があるというのはわかる。 ただ、setModelみたいにモデルと連結するだけでできる方法があるのかという話。
493 名前:デフォルトの名無しさん [2009/11/13(金) 21:10:19 ] >>492 QDataWidgetMapperはどうですか。 doc.trolltech.com/4.5/qdatawidgetmapper.html
494 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:05:12 ] ふう、やっとModel/Viewの具体的な書き方がわかった。 「入門Qt4プログラミング」は必須だな。 QDataWidgetMapperはこの本に載ってないなぁ・・・ ぱっとみ望んだものっぽいのでがんばってみる。
495 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 23:43:08 ] >480 コードまで書いてくれてありがとう。 ToolTipについてよく理解できてないのですが、 QMainWindow::setToolTip()を使ったら思い通りの動作になってくれました。
496 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:16:56 ] 【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05] namidame.2ch.net/test/read.cgi/hidari/1257990721/
497 名前:495 mailto:sage [2009/11/14(土) 00:46:39 ] できたできたw 代入コード書いてないのに、QListViewとQComboBoxとQLineEditとQLabelが 全部一緒に変更されるの面白いねw QLabelの場合、mapper->addMapping(ui->label,0,"text");って 三番目の引数に"text"を指定しなければ表示されなかったので注意。 これで、GUIコードを減らして、GUIの変更にも強いコードが書けるかな。
498 名前:デフォルトの名無しさん [2009/11/14(土) 11:11:19 ] >>497 >QLabelの場合、mapper->addMapping(ui->label,0,"text");って >三番目の引数に"text"を指定しなければ表示されなかったので注意。 QLabelにはUSER属性がtrueなプロパティがないからです。 QLineEdit Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged USER true) QLabel Q_PROPERTY(QString text READ text WRITE setText) ない理由は、 doc.trolltech.com/4.5/properties.html The USER attribute indicates whether the property is designated as the user-facing or user-editable property for the class. Normally, there is only one USER property per class (default false). e.g., QAbstractButton::checked is the user editable property for (checkable) buttons. Note that QItemDelegate gets and sets a widget's USER property.
499 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 11:31:21 ] >>498 おお。そっか。プロパティについては本に載っていたから あとで調べるつもりだったけど、毎度、丁寧に書いてくれてありがとw
500 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:10:56 ] dockされているQDockWidgetのメインウィンドウとの境界線部分を右クリックすると デフォルトコンテキストメニューが表示されてしまうのですが、このコンテキストメニューはどこで変更できますか?
501 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:16:37 ] Qt Creatorの狭さはどうにかならないのか・・・
502 名前:デフォルトの名無しさん [2009/11/14(土) 19:18:26 ] >>500 QMainWindow::createPopupMenu()
503 名前:デフォルトの名無しさん [2009/11/14(土) 20:39:38 ] >>501 ディスプレイを大きくする。Visual Studioでと同じ悩み。
504 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 20:40:39 ] >>502 この関数をオーバーライドすればいいんですね ありがとうございました
505 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:09:21 ] Qt Conferenceがアナウンスされてたので是非参加したいのだが、 14日は出張なので行けそうにないなぁ。
506 名前:デフォルトの名無しさん [2009/11/15(日) 18:31:19 ] Qtを使ったことがないのですが、 Qt creator と Qt Designer の2つのRADが提供されているのですか?
507 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:50:09 ] Creator:コーディング用 Designer:ポトペタ用
508 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:50:36 ] >>506 Qt Designerは文字通りGUIのデザインだけしてXML形式のリソースファイル(?)を出力する だけのGUIデザイナ。 Qt CreatorはQt Designerにコンパイル/リンク/デバッグの機能を含むIDEを統合 (統合の統合で言葉が変だけど)した本格的RADツール。
509 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:57:31 ] 相変わらずリストビュー系(QListWidget)は高機能な分、 難しいね。Qtに限らずだけど。 QListWidgetでドラッグ&ドロップやろうとしたんだけど少しはまった。 普通のやり方と微妙に違うんだね。 doc.trolltech.com/4.5/model-view-dnd.html
510 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:26:53 ] 普通とは?
511 名前:506 mailto:sage [2009/11/15(日) 20:39:17 ] >>507-508 なるほど。 つまり RADとしてQt Creatorが提供されていて、 ただその一部分の機能だけをQt Designerという形で 使用することができる と言う認識で宜しいでしょうか?
512 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:57:05 ] 前までは、Qt Designerだけだった。 やっとQt Creatorができた。
513 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:03:12 ] >>512 そうだったのですか。 じゃあ私が使い始めようと思ったのは きっと良い時期なのですね。
514 名前:デフォルトの名無しさん [2009/11/15(日) 22:04:54 ] >>511 doc.trolltech.com/qtcreator-1.3.0-beta/index.html The goal of Qt Creator is to provide a cross-platform, complete Integrated Development Environment (IDE) to develop Qt projects. It is available for the Linux, Mac OS X and Windows platforms. doc.trolltech.com/qtcreator-1.3.0-beta/creator-quick-tour.html Qt Creator is fully integrated with Qt Designer to help you design user interface forms just like you would with the standalone version. The Qt Designer integration also includes project management and code completion. For more information on Qt Designer, you can refer to The Designer Manual. doc.trolltech.com/4.5/designer-manual.html Qt Designer is Qt's tool for designing and building graphical user interfaces (GUIs) from Qt components. You can compose and customize your widgets or dialogs in a what-you-see-is-what-you-get (WYSIWYG) manner, and test them using different styles and resolutions.
515 名前:デフォルトの名無しさん [2009/11/15(日) 22:08:42 ] >>513 Qt Designerは、Qt 2の頃からありますね。 doc.trolltech.com/2.3/index.html Qt Creatorは、今年から。
516 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:30:52 ] >>515 楽しみになって来ました。 いじってみようと思います。 ありがとうございました。changi.2ch.net/test/read.cgi/cchara/1254565608/902
517 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:34:29 ] いえいえどういたしまして。 【ぬらりひょんの孫】花開院ゆらスレ9【責め9に耐えて】 changi.2ch.net/test/read.cgi/cchara/1254565608/ 902 名前:名無しかわいいよ名無し[sage] 投稿日:2009/11/15(日) 22:19:49 ID:76U3ufnFO >>901 竜二兄さんは逮捕されなかったから大丈夫
518 名前:515 mailto:sage [2009/11/15(日) 22:41:52 ] 何ですかね? この表示のバグは? サーバーがおかしくなったんでしょうか?
519 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:35:12 ] QListViewでドラッグ&ドロップはさらに面倒だった。 モデル側にごちゃごちゃ書かないといかんのだな。 設計の理由はわかるんだが。
520 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 02:33:12 ] Qt CreatorでVisualC++のコンパイラが使いたい
521 名前:デフォルトの名無しさん [2009/11/16(月) 02:56:56 ] >>520 SDKやバイナリパッケージではなく、Qt Creatorをソースからインストールすれば使えます。 来月出る1.3では、jomでの並列コンパイルでコンパイル時間も短縮。
522 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 06:32:51 ] Qt Creator 1.3βをVC++ 2008やSDK V6.1でビルドしてみたけど、最後の方になって「〜のメイクの仕方が わからん」と言うエラーが出てストップする。少し違う環境の複数のマシンでやってみたけど結果は同じ。 多分Makefileが間違ってるんだと思う。 同じ環境でQt 4.6βの方は問題なくビルド出来るんだが... 長い時間進んで最後の方で止まるからショック大きいw 一応、土曜日に本家のBug Trackerにログ付きで報告しておいた。 正式版では直してくれると思うけど。
523 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:17:48 ] 俺普通に出来たけどな
524 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:59:33 ] はまりまくりorz 他のアプリからファイルリストをドロップできる QListView(のサブクラス)を作ろうとしたら ぜんぜんドロップできなかった。 呼ばれるはずの、QListViewに設定したカスタムモデルの dropMimeDataが発生しない。 と思ったら、QListViewのサブクラスにデバッグのために書いた dropEventが処理を奪っていたorz QListViewなどのModel/Viewアーキテクチャでは 処理の制御をModelと、まだ試してないけど見た目をDelegateがやるから QListViewのサブクラスは作るまでも無いのかな?
525 名前:522 mailto:sage [2009/11/16(月) 14:38:59 ] >>523 なぬ〜! 何が違うんだろ。 Qt Creatorのバージョンは1.3β(1.2.92)で間違いない? コンパイラは俺はVC++ 2008 Express Edition と Windows SDK for Windows Server 2008 and .NET Framework 3.5 (なげーよ)でやってみたんだけど,両方とも同じ結果だった。環境変数の設定が間違ってるといけないので, 普通のコマンドプロンプトやなくて,専用のコンソールウィンドウ(スタートメニューから手繰っていくと出てくるヤツ) でやったんだけど...PCも一台じゃなくて自宅のと会社ので試したんだけどなぁorz もちろん PATH には Qt の bin ディレクトリを追加してあるし,念のため QTDIR に Qt のインストールディレクトリ (俺の場合は C:\Qt\4.6.0-beta1 )を設定しておいたんだけど...QMAKESPEC は自動認識するようなので, 特に設定しなかった(ビルド中のログを見ると,ちゃんと win32-msvc2008 になってる)。 どんな環境で成功したか教えてもらえると嬉しい。ヨロシク。
526 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:52:29 ] 具体的にエラーメッセージ貼れ
527 名前:522 mailto:sage [2009/11/16(月) 16:04:21 ] 長いので,本家のBug Trackerに報告したURLを貼らせてください。 つ ttp://bugreports.qt.nokia.com/browse/QTCREATORBUG-281 ここの添付ファイル qtcreator_builderror.txt がビルドに失敗した最後の方のログ。 NMAKE : fatal error U1073: don't know how to make '..\..\..\..\qtc\qt-creator-qt -creator\src\plugins\qt4projectmanager\customwidgetwizard\customwidgetwidgetswiz ardpage.ui' と言うエラーが出てストップ。なのでqmakeで作成されたMakefileのバグだと思ったんだけど... ちなみに make release してるけど,ただ make にしても結果は同じだった。
528 名前:デフォルトの名無しさん [2009/11/16(月) 18:10:44 ] >>527 まず、customwidgetwidgetswizardpage.uiがあるかどうか。 次に、Makefileに、このファイルについてのルールがどう出ているか。
529 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 21:18:57 ] >>525 前にコンパイルしていたんだけど、OS入れ替えがあって 入れ替え後は面倒なんで配布しているやつを使っていたから ついでに、もう一回コンパイルしてみたよ。 で、それを昼ごろやったんだけど、今思い出したw Help->Aboutを見たら、Qt Creator 1.2.92ってかいてある。 ビルドも今日の夕方版 ソースコードは、ソースコード管理システムから落としてない。フォルダに落ちていたファイルを見る限り、 qt-creator-qt-creator-1.3.0-beta.tar.gz とqt-everywhere-opensource-src-4.6.0-beta1.zip を落としているね。 Windows SDK 7.0(Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1)を使った。 Microsoft Visual Studio 2008 Standardは入っているけど、SDK使ってコンパイルしているからこれ関係ないはず。 SDKのCMD shellを修正して、以下のようにしてシェル起動 C:\Windows\System32\cmd.exe /E:ON /V:ON /T:0E /K "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /xp /x86 /release 環境変数は特に設定していないはず。いろんな環境を入れると、コマンドが混ざっていやになるのよ。 だからインストーラーが勝手に設定するのは放置しているけど、手動では設定しないで バッチファイルやら作って専用のシェル環境を作ってる。 今回は手抜きでSDKのCMD shellから set path=C:\Qt\4.6.0-beta1-x86\bin;%path と打ち込んだw 4.6.0-beta1-x86ってのは、4.6.0-bata1をWindows SDKでx86向けに自分でコンパイルした奴ね。 あとは、qmake、nmake で終わり。あ、nmakeにreleaseつけてないやw 遅いのか? あ、nmakeの代わりにjom使ったほうがマルチコアなら速いんだったw 念のため。生成されたqtcreatorを起動するときは、C:\Qt\4.6.0-beta1-x86\binを環境変数PATHにいれる必要があるよ。 jom.exeはどっかから探してきてね。
530 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 21:19:55 ] %path% ←%の忘れ物
531 名前:522 mailto:sage [2009/11/16(月) 22:14:55 ] >>528 レスサンクス。 > まず、customwidgetwidgetswizardpage.uiがあるかどうか。 あるはずだと思うんだが、なぜかない。エラーメッセージを見ると、customwidgetwidgetswizardpage.ui を作ろうとしているように見えるけど、.ui はQt Designer等で作られるXML形式のリソースファイルで、 これを uic でコンパイルするんだから、このファイルがないのがおかしいようだ。 > 次に、Makefileに、このファイルについてのルールがどう出ているか。 いろんなところにMakefileが散らばっていて、親のMakefileから呼び出されるようなんだが、 問題の customwidgetwidgetswizardpage.ui が出てくるMakefile は、1つしかなくて、ルールは、 ui_customwidgetwidgetswizardpage.h: ..\..\..\..\qtc\qt-creator-qt-creator\src\plugins\qt4projectmanager\customwidgetwizard\customwidgetwidgetswizardpage.ui c:\Qt\4.6.0-beta1\bin\uic.exe ..\..\..\..\qtc\qt-creator-qt-creator\src\plugins\qt4projectmanager\customwidgetwizard\customwidgetwidgetswizardpage.ui -o ui_customwidgetwidgetswizardpage.h となってる(コピペしたら改行位置が変で読みにくくてスマソ)。 これからすると、customwidgetwidgetswizardpage.ui から uic.exe で ui_customwidgetwidgetswizardpage.h を作ろうとしているようだjから、やはり customwidgetwidgetswizardpage.ui ファイルがないのがおかしいとしか考え えられないと思うんだけど。
532 名前:522 mailto:sage [2009/11/16(月) 22:23:38 ] >>529 丁寧な解説ありがとう。 > ソースコードは、ソースコード管理システムから落としてない。フォルダに落ちていたファイルを見る限り、 > qt-creator-qt-creator-1.3.0-beta.tar.gz とqt-everywhere-opensource-src-4.6.0-beta1.zip を落としているね。 俺が落としたファイルと全く同じだ。 > Windows SDK 7.0(Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1)を使った。 > Microsoft Visual Studio 2008 Standardは入っているけど、SDK使ってコンパイルしているからこれ関係ないはず。 SDKのバージョンは違うけど、多分関係ないだろうなぁ。 > SDKのCMD shellを修正して、以下のようにしてシェル起動 > C:\Windows\System32\cmd.exe /E:ON /V:ON /T:0E /K "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /xp /x86 /release サンクス。試してみる。 で、>>531 に書いたとおり、customwidgetwidgetswizardpage.ui が見当たらないんだけど、あなたのところにはある? 同じファイルをダウンロードしたんだから、俺のところだけないとすると、解凍ツールのバグだったりして。 総合アーカイバープロジェクトにおいてあるDLLを使うファイラーで解凍したんだけど、なんか怪しい気がしてきた。 ダウンロード時のファイル化けは考えにくいしね。ちょっとチェックして見ようと思う。
533 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:49:57 ] それアーカイバのせいじゃね?w 俺は7zip使ってる。 tar.gzの中にこんなのがある。パス長いから見た目チェックミスりそうだから、 コピペするよw C:\Qt\qt-creator-qt-creator-1.3.0-beta.tar.gz\qt-creator-qt-creator-1.3.0-beta.tar\qt-creator-qt-creator\src\plugins\qt4projectmanager\customwidgetwizard\ というディレクトリに customwidgetwidgetswizardpage.ui というファイルがある。
534 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:52:22 ] ついでに、ファイル名とMD5書いとくわ。 qt-creator-qt-creator-1.3.0-beta.tar.gz 9.17 MB (9,624,511 バイト) 34F264E4F1A06433A9CD6EDE7A39A1E4
535 名前:522 mailto:sage [2009/11/16(月) 23:29:10 ] >>533 , 534 ファイルのほうは正常だった。 > それアーカイバのせいじゃね?w やっぱりそうらしい。これまで二画面ファイラー Dyna と 統合アーカイバープロジェクトの DLLでやってたんだけど、別のツール(Lhaz)で解凍してみたら、ディレクトリ構成が変わったorz で、問題の customwidgetwidgetswizardpage.ui も、所定の場所にある。 なんか Dyna にバグがありそう。便利でずっと使ってたし、こんなこと初めて。 残念だけど、圧縮・解凍は別のツールに変えた方が良さそうだ。 今、nmake でビルドを始めたところ。果報は寝て待つことにしようと思う。 まだ結果は出たわけじゃないけど、皆さんありがとう & お騒がせスマソ。 明朝、うまくいってたら、本家のBug Trackerにも報告しなくちゃ...
536 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:23:43 ] bool QLayoutItem::hasHeightForWidth ()はあるのに、 bool QLayoutItem::hasWidthForHeight ()がないのはなぜでしょう? これが無くて困ってまして、仕方なくQtへのパッチを作って対処しようかと 思うのですが、影響範囲がすごく大きくなりますよね。 なにか良い手はないでしょうか。
537 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 02:24:05 ] QListViewって複数列表示できるよな? うーん・・・
538 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 02:40:51 ] あ、できないのか? サンプルのAdress BookではQTableViewを使ってる。 いかんなぁ。リストビュー=Windowsのアレというイメージがある
539 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 03:34:03 ] サンプルのbasicsortfiltermodelではQTreeViewを使っていた。 こっちのほうがWindowsのリストビューに近いか?
540 名前:デフォルトの名無しさん [2009/11/17(火) 05:53:45 ] >>536 >bool QLayoutItem::hasWidthForHeight ()がないのはなぜでしょう? どんな場合に必要ですか。
541 名前:522 mailto:sage [2009/11/17(火) 11:07:59 ] >>535 おかげさまで,Qt Creator 1.3βのをWindows SDKでビルドすることに成功しました。 で,makeの最後に, c:\Qt\4.6.0\bin\lrelease ..\..\..\..\qtcsrc\qt-creator-qt-creator\share\ qtcreator\translations\qtcreator_ru.ts -qm qtcreator_ru.qm Updating 'qtcreator_ru.qm'... Generated 2760 translation(s) (2607 finished and 153 unfinished) Ignored 10 untranslated source text(s) みたいなメッセージが10個くらい出るんだけど,これって問題ないの? とりあえずざっと使ってみた限りでは大丈夫そうだけど。 それと,Qt Creatorからアプリをビルドする時は,nmakeじゃなくてjomを使うみたい なので,NOKIAのサイトから拾ってきて一件落着。 ありがとうございました。
542 名前:522 mailto:sage [2009/11/17(火) 11:10:56 ] ↑ビルドの最後のメッセージはちゃんと読んでみたら,多言語対応の翻訳関係で未翻訳のテキストの 数を表示してるだけみたいだね。
543 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:20:53 ] > それと,Qt Creatorからアプリをビルドする時は,nmakeじゃなくてjomを使うみたい Qt Creator 1.3のオプションでnmakeを使うようにも設定できたよ。 まあ、jomでいいと思うけど。
544 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:12:28 ] >>540 Qt付属のFlowLayoutデモのVertical版です。 基本機能のフローレイアウトは実現できるのですが、 これを別のレイアウトの中に複数入れるようなことをすると、 高さに対応する横幅を指定出来ないために、内臓するウィジットの横幅総計 と全く関係ないサイズになってしまいます。 アドバイスありますでしょうか。
545 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 16:43:28 ] Qt CreatorでVisualC++のコンパイラを使うためにビルドしようと思ったけど だいぶ大変そうだな ビルド済みのを配ってほしい
546 名前:522 mailto:sage [2009/11/17(火) 17:02:48 ] >>543 > Qt Creator 1.3のオプションでnmakeを使うようにも設定できたよ。 うん、見つけた。左の[Projects]ボタンを押すと、[Build Steps]で設定できるね。 >>545 俺の場合は解凍ツールがアホだっただけで、ビルド自体はそんなに大変じゃ ないよ。時間は掛かるけど。あとREADMEがちょっと説明不足気味かな。 makeの後ろにreleaseつけないとデバッグビルドになるなんて書いてないし。
547 名前:522 mailto:sage [2009/11/17(火) 17:19:07 ] で、Qt CreatorはVCでビルドして動くようになったんだけど、またまた問題発生。 アプリのコンパイル/リンクは通るんだけど、cdbが動かない。デバッグをスタート させると。 「The application reaquires the debugger engine 'Cdb', ehich is disabled.」 というメッセージボックスが出る。 Debugging Tools for WindowsはもちろんインストールしてPATHも通してある。 Qt Creatorのマニュアルを良く見たら(下記)、 ttp://doc.trolltech.com/qtcreator-1.2/creator-debugging.html 「When building Qt Creator using the Microsoft Visual C++ Compiler, the "%ProgramFiles%\Debugging Tools for Windows" path will be checked to ensure that all required header files are there.」 なんて書いてある。これってもしかして、Qt Creatorをビルドする前に Debugging Tools for Windowsをインストールしとけって意味なのか? だとすると、やっぱり>>545 の言うように、ビルドするの大変だわ。 設定いろいろ見たけど、それらしいものはない。試しに[Tools]→[Options]→[Debugger] →[Gdb]の[Gdb location]に無理矢理cdbのパスを書いてみたが、関係なかった。 それと、cdbはデフォルトでは %ProgramFiles%\Debugging Tools for Windows (x86) にインストールされるんだが、前述の説明では %ProgramFiles%\Debugging Tools for Windows と なってる。これって単なる間違いだよねぇ? cdbちゃんと動いてる人、教えてもらえると助かる。よろしく。
548 名前:522 [2009/11/17(火) 17:22:21 ] >>547 × 「The application reaquires the debugger engine 'Cdb', ehich is disabled.」 ○ 「The application reaquires the debugger engine 'Cdb', which is disabled.」 タイポスマソ
549 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 17:28:50 ] VC++でQtCreatorをビルドするときは、 必要なヘッダーファイルがあるか "%ProgramFiles%\Debugging Tools for Windows"をチェックしとけ
550 名前:デフォルトの名無しさん [2009/11/17(火) 18:21:48 ] >>547 >なんて書いてある。これってもしかして、Qt Creatorをビルドする前に >Debugging Tools for Windowsをインストールしとけって意味なのか? そうだよ。書かれていないと何度もはまるよね。
551 名前:522 mailto:sage [2009/11/17(火) 18:28:17 ] >>549 > 必要なヘッダーファイルがあるか > "%ProgramFiles%\Debugging Tools for Windows"をチェックしとけ 「必要なヘッダーファイル」って何ですか? どこに書いてあります? 少なくともQt CreatorのREADMEのビルド方法の記述には見当たらないし、 マニュアルでも俺には見つけられない。 それと、デフォルトのインストールディレクトリである"%ProgramFiles%\Debugging Tools for Windows (x86)"ではなくて、"%ProgramFiles%\Debugging Tools for Windows"に ビルド前にインストールしとかなきゃいけないの? そう言うんだからあなたは成功したんだと思うので、具体的に情報ください。 よろしくお願いします。
552 名前:522 mailto:sage [2009/11/17(火) 18:37:23 ] >>550 あぁ、やっぱりそうなんだ。READMEに書いといて欲しいなぁ。 情報サンクス。 とりあえずソースを展開したディレクトリ以下からgrepで"Debugging Tools"を さらってみたら、cdb.pri と言うファイルにそれらしい記述があった。 インストールディレクトリはどちらでもいいみたい。 これ以上落とし穴がないことを祈って、もう一度ビルドし直します。
553 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 18:57:17 ] >>552 ビルドする前に qmake -r しておいた方がいいと思います。
554 名前:522 mailto:sage [2009/11/17(火) 19:08:00 ] >>553 > ビルドする前に qmake -r しておいた方がいいと思います。 情報ありがとう。qmake -helpで見ても-rと言うオプションは見つかりませんが、何ですか?
555 名前:デフォルトの名無しさん [2009/11/17(火) 19:16:56 ] qt.nokia.com/about/news/qt-4.6-and-qt-creator-1.3-release-candidates-available
556 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:32:42 ] > なんて書いてある。これってもしかして、Qt Creatorをビルドする前に > Debugging Tools for Windowsをインストールしとけって意味なのか? そうなのか? 先に入れたっけなぁ?入れてたかもしれないなぁ。 覚えてないや。 > 設定いろいろ見たけど、それらしいものはない。試しに[Tools]→[Options]→[Debugger] > →[Gdb]の[Gdb location]に無理矢理cdbのパスを書いてみたが、関係なかった。 俺のところでは、[Tools]→[Options]→[Debugger] に Cdbの設定画面があるよ。ここで、パスを指定できる。
557 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:38:44 ] >>554 -r は、再帰的に qmake かけるオプションです。 なのでQtCreatorのトップディレクトリで実行してください。
558 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:53:55 ] QGphraicsSceneに大きい画像を追加して、QGraphicsViewに登録すると、 スクロールバーが出ます。 QGraphicsScence::RemoveItem()で消しても、スクロールバーが出っ放しなんですが、 ViewかSceneをリセットすることはできないのでしょうか?
559 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:19:47 ] リストビューでカスタマイズした描画ができたから断片おいとくわ。 まとまった情報が見つからないorz もっと良い方法があれば修正してなー。 解説 QTreeViewで一覧を描画するときそれを行うのがデリゲートというもの。 デフォルトではQStyledItemDelegateが設定されている。 QItemDelegateというのもあるがこっちはデザインが古臭い。 (たぶんQStyledItemDelegateがOSネイティブで、QItemDelegateがQt描画) そこで、QStyledItemDelegateのサブクラスMyDelegateを作る。 paintをオーバーロードして描画すればいいだけなんだが、 選択・マウスオーバー行をあらわすハイライトは QStyledItemDelegateのもの組み合わせて作りたい。 QItemDelegateにはそれをやってくれるdrawFocusがあるのだが・・・の解決方法。 void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { //二列目は独自の描画 if(index.column()==1) { //デフォルトの選択行の描画 selected QStyleOptionViewItemV4 opt = option; initStyleOption(&opt, index); const QWidget *widget = opt.widget; QStyle *style = widget ? widget->style() : QApplication::style(); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget); //ここにpainterを使って独自の何か書く } else { //二列目以外は親クラスに渡す QStyledItemDelegate::paint(painter, option, index); } }
560 名前:522 mailto:sage [2009/11/17(火) 22:10:32 ] >>556 先にDebugging Tools for WindowsをインストールしてからQt Creatorをビルドしたら、 CDBの設定画面が出てきました。だから>>556 さんの場合は、先にデバッガをインス トールしてあったんだと思います。 VC++でビルドすると言うことは、デバッガはCDBに決まってるわけで、ビルド時に CDBの存在をチェックする必要はないような気がするんですけどね。 しかもCDBの設定画面から、CDBのパスが設定できるって、何か変な気がします。
561 名前:522 mailto:sage [2009/11/17(火) 22:18:50 ] >>557 -recursive の略なんですね。今回は -r を指定して qmake してみました。 nmakeでも途中で qmake を走らせて、各所に Makefile を作ってそれをまた実行する つくりになっているのを、先に実行させて nmake ではそのプロセスをスキップさせようと いうことでしょうか? ちなみに今回は最初、nmake ではなくて jom でビルドを試みましたが、途中でエラー が出てダメでした。理由はわかりませんが、いい加減調べるのに疲れたので nmake で ビルドさせたら無事に完了しました。 やっとまともなVC++版Qt Creatorが出来ました。皆さんありがとう。
562 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:29:13 ] >>561 いえ、ちゃんと確認したわけではないですが qmake しないと nmake するための Makefile が 生成されていないだろうから、qmake -r をオススメしたわけです。 なんにせよ、うまくいったようで何よりです、おめでとうございます
563 名前:522 mailto:sage [2009/11/17(火) 23:22:55 ] >>562 先に各所にMakefileを作るか、ビルド中に作るかの違いはありますが、 qmakeに-rを指定しなくても大丈夫なようですよ。 > なんにせよ、うまくいったようで何よりです、おめでとうございます ありがとうございます。しかし、もう少しビルド方法を克明にREADMEなりINSTALLなりの テキストファイルに書いて欲しいですね。せっかく苦労したから、時間が出来たら何処かに まとめようと思います。
564 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:43:17 ] ああおれもDebugging Tools for Windows後からインストールしてたわ もっかいやり直しかorz
565 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:01:01 ] 4.6 RC は Visual Studio 2008 のバイナリも出てるんだな。 リリース版でもあるといいが。
566 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:55:16 ] >>565 それならQt CreatorもVC++2008のバイナリ出してくれればよかったのに...
567 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:13:00 ] >>566 別に Qt Creator 関係なくね?
568 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:56:48 ] VS版でしか使えないPhononとかのライブラリがあるから Qt自体がVS版バイナリがある意味はあると思う。 でも、配布されているQt Creatorバイナリは gdbもcdbもどちらでも使えるから、どうでもいいと思う。 というかQt Creatorバイナリはどっちでコンパイルされているんだろうか? それよりも、Qt CreatorのWindows 64bit版を出してくれ。 64bit版じゃないとコンパイルもデバッグもできない。
569 名前:559 mailto:sage [2009/11/18(水) 11:12:36 ] 訂正 void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { //二列目は独自の描画 if(index.column()==1) { //デフォルトの選択行の描画 selected QStyleOptionViewItemV4 opt = option; initStyleOption(&opt, index); const QWidget *widget = opt.widget; QStyle *style = widget ? widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, widget); //ここにpainterを使って独自の何か書く } else { //二列目以外は親クラスに渡す QStyledItemDelegate::paint(painter, option, index); } }
570 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 14:11:02 ] Creator って前から VC++ でビルドしてるって話だったような。 64bit 版が Windows でも欲しいのは同意。
571 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 18:55:57 ] Qt Creator ってガンガン変数とか補完していってくれるって 印象なんだけど(デモビデオとかちらっと見た感じで)、 実際使ってみて、変数とか全然補完されない、ってか補完の仕方がわからんのだが なんかこう vi の自動補完みたいにさくさくできんもんかなぁ?
572 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:04:27 ] >>571 qt.nokia.com/doc/qtcreator-1.3.0-rc1/creator-code-editor.html CTRL + Space 押さなきゃいかんのか
573 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:11:44 ] 抽象クラスのメソッドをオーバーライドしようと思ったとき、 ヘッダファイルに、戻り値 メソッド(引数,引数,引数); cppファイルに、戻り値 クラス名::メソッド(引数,引数,引数) って書かないといけないのがめんどくさすぎる。 どうにかならんの?
574 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:22:08 ] >>573 巣に帰れ
575 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:41:10 ] うわw 何この反応w 痛いところついたかw
576 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:45:48 ] 反応がどうのと言ってる反応が相手以上に痛いところ突かれてワタワタしてるのは どこの板も同じだな。
577 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:47:44 ] >>576 落ち着け。>>573 は何も変なこといってないだろう?
578 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:00:46 ] クラス名::つけんと、どっかでエラーになるんじゃ
579 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:38:36 ] Qtの話じゃなくて C++の話だよな? つまり>>573 はC++の基礎すらままならないわけであり
580 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 01:58:03 ] >>573 D言語まじお勧め
581 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 02:38:38 ] >>573 の疑問って namespace で解決出来ないのかな?w
582 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 02:59:48 ] >>581 つか CTRL+C, CTRL+V で解決できる気がするw
583 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 06:06:35 ] FakeVim有効にしてるんですが、癖でESCの代わりにCTRL+[を押すと、 ショートカットで GotoBlockStart というのに割り当てられてるらしく ブロックの最初((とか{とか)に移動してしまいます。 ショートカットを無効にしてみたんですがインプットモードのとき押すと 左矢印が表示されるだけでESCを押したことになりません。 解決方法はないでしょうか?
584 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 08:07:33 ] >>579 > Qtの話じゃなくて > C++の話だよな? どこが? 簡単にcppファイルとヘッダファイルに コードを書いて補完してくれるのはエディタの仕事だろ。
585 名前:522 mailto:sage [2009/11/19(木) 09:45:18 ] >>568 うーん。俺がβ版のビルドで四苦八苦しているうちにRCが出てたんだorz Qt 4.6.0-RCもVC用とMinGW用のインストーラーが用意されてるし,Qt Creator 1.3-RCの Windows版もインストーラー形式。で,このQt CreatorはVCにもMinGWにも使える。 試しに,Qt 4.6.0-RCのVC用とMinGW用を別のディレクトリにインストールしてみたら, Qt Creatorで設定をちゃんとやってやれば,切り替えて使えた!
586 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:06:25 ] >>583 カッとなってfakevimhandler.cppを変更して動くようにした ついでにコマンドモード時に [ や ] が入力できるバグも直した。 どうしてくれよう。
587 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:09:34 ] >>586 merge request
588 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:08:43 ] 手入力したものまで補完できるようになるまで待ってれば
589 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:42:57 ] 同じことを二度書かないといけない C++の糞仕様はもうどうにもならないだろうけど、 エディタで補完するぐらいは出来るだろ。 特にオーバーロードは、すでに書いてあるものを 複写するだけなんだから簡単に出来るはず。 たぶん○○の場合はどうする?なんて細かい問題を言ってくるだろうけど、 こまかいことはどうでもいいんだよ。だいたい出来ればいいんだからさ。
590 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:47:35 ] 出来ると思うなら、自分でやればいいじゃん
591 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:54:33 ] やってるけどなw だがこういうのはエディタにつけるべき機能だ。
592 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 12:01:19 ] え、patch作ったの?
593 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 12:52:44 ] Creator の 1.3 はオーバライドするメソッドと引数を ヘッダーファイルに記述するときに補完できるようになってるし、 ヘッダーファイルに記述してあるメソッドの引数をソースファイルで 補完できるようになってるぞ。 戻り値は難しいが。 試してみろ。
594 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 13:49:22 ] >>589 cppを先に書いてhを出力してくれるツールや hを先に書いてcppのスケルトン出力してくれるツールもある それにIDEならGUIからプロジェクトとかクラス作っただけで一通り出来てるだろ
595 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 13:56:02 ] >>593 それって、オーバーライド元がconst付きのメソッドの場合、 オーバーライドすると、メソッドの、constがなくなって);ってなるんだよね。 C++の仕様ってメソッドのconstはずしてオーバーライドってやっていいんだっけ? まずいと思うんだが。 あと戻り値も確かに補完されない。 もうちょっと足りないなぁ。
596 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 14:05:18 ] Qt Creatorってヘルプを独立させられないの?
597 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 14:16:24 ] >>596 ヘルプを見るだけなら assistant を起動すればいいが、 連携は出来ないな。
598 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 14:17:34 ] >>596 QtAssistant ってがあるよ。そゆことじゃなくて?
599 名前:デフォルトの名無しさん [2009/11/19(木) 17:01:30 ] Qtで2つのキーが同時に押されたときに両方のキーイベントを取得するにはどうすればいいのでしょうか? (今は後から押された方のkeyPressEventしかこない) Ruby/Qt/OpenGLで3Dシューティングを作っています。Ubuntu9.04 amd64 www.dotup.org/uploda/www.dotup.org374441.png 直角にしか移動できねえ....
600 名前:デファルトの名無しさん mailto:sage [2009/11/19(木) 21:34:52 ] QtのMainwindowに、Bitmapの画像を貼り付けられませんか? 変化も移動もしないただのサンプルとして
601 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:28:05 ] リストボックスってどれ?
602 名前:デファルトの名無しさん mailto:sage [2009/11/21(土) 11:20:44 ] Windows VisualStudioで書かれたコードをLiunx で読み込んだとき文字コード変換は 何を選べばいいの?
603 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 14:50:36 ] BOM
604 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 21:40:40 ] Visual Studio(2005以降)でも GCC でも使えるコードにするなら 現状 Shift-JIS にするしかないんじゃないかな?
605 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 00:10:43 ] Qt 4.6 RC リリース記念書き込み qt.nokia.com/developer/qt-4.6-preview
606 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 00:18:07 ] TDM's MinGW gcc4.4.1でQt 4.6.0 RCのビルド成功。 Qt Creator 1.3 RCで、VCisual Studio 2008版と切り替えて使えてる。 ttp://qtusersforum.s2.zmx.jp/forum/viewtopic.php?f=5&t=131
607 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 00:21:32 ] ↑タイポスマソ ×VCisual Studio 2008 ○Visual Srudio 2008 実際にはVSは必要なくて、SDKだけでOK。
608 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:44:53 ] otitukr
609 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 05:31:45 ] >>604 Windowsのシステムロケールを英語にするとUTF-8の一本でOK
610 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:44:55 ] >>607 SDKのみじゃcrt使えないんじゃない?new deleteすらできん
611 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 07:31:33 ] >>610 何そのガセネタ。 俺は「Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1」だけで、 Visual Studioとかインストールしてないけど、new/deleteはもちろん、STLだって バリバリに使えるよ。
612 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:50:03 ] はじめまして。わからないところがあったので質問させてください。 QSplitterを使ってウィンドウを分割したのですが、 親ウィンドウのサイズをマウスで変更すると、 子ウィンドウ(QSplitter)の境界線の位置が一緒に移動してしまいます。 親ウィンドウのサイズを変更しても境界線の位置がずれないようにするには どうすればいいのでしょうか?
613 名前:デファルトの名無しさん mailto:sage [2009/11/23(月) 20:26:03 ] 質問 tabWidgetはデフォルトでタブが2つなんですが、これを3つにしたいです。 Designerで簡単に、追加できませんか。
614 名前:デフォルトの名無しさん [2009/11/24(火) 02:22:24 ] >>613 コンテキストメニューを表示させて、ページの挿入で。
615 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 09:43:44 ] >>612 setStretchFactor を使う。変わらないほうを0にする。
616 名前:613 [2009/11/24(火) 10:00:30 ] ありました ありがとう
617 名前:デフォルトの名無しさん [2009/11/25(水) 14:57:57 ] Mac OS XでQtを使ってGUI作る時って、あえてXCodeと組み合わせて使うメリットとか必要あるのでしょうか? 正直、XCodeでGUI作るのとObjective-Cが嫌なので、C++/Qtなわけですが。
618 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 15:05:43 ] 嫌なのになんで必要性とかメリットとか考える訳? あっても使いたくないんでしょ?
619 名前:デフォルトの名無しさん [2009/11/25(水) 15:41:15 ] これって、JavaVirtualMachineみたいのインスコしなくても 動くの?
620 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:33:59 ] アタリ!XCode使うのやめまつw>>618 d
621 名前:デフォルトの名無しさん [2009/11/25(水) 17:35:36 ] Qt Designer を使ってペタペタしましたが、ボタンにイベントハンドラを作成する方法が分かりません。 オライリーのQt本は買ったし、ネットでググりまくりでクラスライブラリはそこそこイメージつかめたのに、イベントハンドラ1つも作れないおorz
622 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:42:08 ] > オライリーのQt本は買ったし Qt4の本を買わずにQtの本を買っていたら・・・哀れむw Qt Designerって今使う理由あるの? Qt Creator使えよ。 あと、Qt Creatorの話。イベントハンドラは、Go to Slotから行う。 イベントハンドラじゃなくて、スロットっていうんだけどな。
623 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:44:35 ] そういや、スロットで思い出したけど、 Qt Creatorのシグナル/スロットの編集(F4)って使ってる? というか、使える? ボタン押したらクローズって使い方は 確かにあると思ったけど、他はすべてコードで書きたくなる。
624 名前:621 mailto:sage [2009/11/25(水) 17:53:12 ] >>622 いえいえ、Qt4にしますた。 しかし読んでるのは、ウェブサイトから落とした「Qt 4.3 Whitepaper/日本語 PDF (A4 - 2.9 MB)」です。 >Qt Creator使えよ。 インスコしますた。 >イベントハンドラは、Go to Slotから行う。 ラジャw >Qt Creatorのシグナル/スロットの編集(F4)って使ってる? いきなり敷居が高すぎます。 >確かにあると思ったけど、他はすべてコードで書きたくなる。 すべてコードを書くだけでOKです。 ドキュメントでクローズは専用スロット(関数?)があるみたいなの見ましたが要りませんw
625 名前:621 mailto:sage [2009/11/25(水) 17:58:57 ] F4 で、Signal and slot editorのリストボックスが出ました。dクス。 これって意味理解するの大変ですね。 なれればスロットをサクサク作るだけなんでしょうね。 とりあえず「Signal and slot editor」の使い方ググってみます(チラウラw)
626 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 18:22:52 ] >Qt Creatorのシグナル/スロットの編集(F4)って使ってる? ごめん。これ君ではなく、ここらへんにいる人全体に聞いたのw 個人的にこの機能自体が便利な機能(使える機能)とは思えなくて。 (他の人の反論が無ければ)使わなくていいよw
627 名前:621 mailto:sage [2009/11/25(水) 18:27:52 ] >イベントハンドラは、Go to Slotから行う。 ヲォ、クリックイベント作れました。イベントハンドラ作れれば後はPDFドキュメントとオライリーで何とかなりまつ(チラ裏)
628 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 07:05:58 ] YouTube - Creating interactive QT hello world GUI application using QT Creator. ttp://www.youtube.com/watch?v=QLT7oEt6gLE Qt Creatorのgui作成でラベル、テキスト入力欄、ボタンを追加して ボタンを押すとテキストの内容がラベルに入るチュートリアル(3分半)
629 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:45:27 ] >>628 シグナル/スロットの編集ってそう使うのか。 やっとわかった。でも微妙な気がする。 実用レベルのアプリだと、赤い線がごちゃごちゃと。 まあ、コードで書いても見た目が違うってだけか。
630 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:56:32 ] Interface Builder (on NeXT)
631 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 01:53:06 ] 素朴な疑問なんだけど、アプリケーションの外部からのSIGINTみたいなシグナルを 処理する場合、Qtプログラム固有の処方ってあるのかな? 普通のC言語プログラムだと、SIGINTに対してエラーハンドラ関数を指定して、 外部からシグナルを受け取ったらそのエラーハンドラ関数を呼び出すようなことをすると思うけど。
632 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 03:04:25 ] なんだかQEventでやることになるみたいなんだけど。 例えば、Linuxのシェルからforegroundで実行しているアプリケーションを いきなりCntrl-Cでkillしたりとか、Windowsのタスクマネジャの終了ボタンで アプリケーションを強制終了させる場合でも、QEventで処理できるのかな? なんか良いサンプルプログラムはありませんか?
633 名前:デフォルトの名無しさん [2009/11/27(金) 06:37:51 ] PyQtでマルチスレッド処理をしたいんだけど Pythonのthreading.Thread クラスを使うべきなのか Qtのスレッドクラスを使うべきなのか 悩んでたら寝てしまった。
634 名前:デフォルトの名無しさん [2009/11/27(金) 10:19:32 ] >>631 Qt 4.5.3: Calling Qt Functions From Unix Signal Handlers doc.trolltech.com/4.5/unix-signals.html
635 名前:デフォルトの名無しさん [2009/11/27(金) 11:33:35 ] Qtってデータベースへのアクセスのためのクラスも 含まれてるけど、O/Rマッピングの機能もありますか?
636 名前:デフォルトの名無しさん [2009/11/27(金) 11:54:45 ] >>635 QSqlRelationalTableModel、QSqlTableModel。