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/
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はそうなってるよ。