09/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】
スレリンク(tech板)
2:デフォルトの名無しさん
09/10/01 12:08:56
■リンク
・Qt Software (旧Trolltech社/現在はNokia社の一部門)
URLリンク(www.qtsoftware.com)
・Qt のダウンロードページ(オープンソース版は、LGPL/Free Downloads タブから)
URLリンク(www.qtsoftware.com)
・Qt のダウンロード(FTP)
fURLリンク(ftp.qtsoftware.com)
・SRA社(日本の代理店)の日本語で読める Qt 関連ドキュメント
URLリンク(www.sra.co.jp)
■ライセンス関連まとめ
各ライセンスでの自作アプリのソース公開/頒布
Qtのライセンス アプリのライセンス Qtの頒布/(変更部分のソース公開)
GPL GPL(ソース公開必須) 必須
LGPL 任意(ソース公開不要) 必須
商用 任意(ソース公開不要) 不要
*: LGPLは動的リンク時
実際には他にも条件(リバースエンジニアリング関係とか)あるので、
きちんとライセンスの条文を読むこと。
3:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/01 12:11:04
Qt Creator 日本語化プロジェクト
Qt Creator を日本語化するプロジェクトです(非公式)
URLリンク(qt-creator-jp.sourceforge.jp)
5:デフォルトの名無しさん
09/10/01 23:54:53
もう新スレか。Qtのスレが盛り上がっていてちょっと嫉妬するよ。
やっぱLPGLになったのが大きいのかな。
6:デフォルトの名無しさん
09/10/02 00:10:46
俺的にはQt Creatorが大きい。
インストールするだけで、RADで開発できる
環境が整うのは大きいよ。
7:デフォルトの名無しさん
09/10/02 00:25:18
タイポした。LPGLってどこのガス会社だ…
>>6
新しいIDEができたんだ。
みんなKDevelopを使ってるのかと思ってた。
8:デフォルトの名無しさん
09/10/02 01:01:00
KDevelopはWindowsでつかえないじゃん。
9:デフォルトの名無しさん
09/10/02 11:51:00
Qt Creator、Windows版にVCコンパイラ用のビルド済みバイナリパッケージ用意すればさらに流行ると思うんだけどな
10:デフォルトの名無しさん
09/10/04 12:13:56
画面1024X600のミニノートにLinuxを入れて、Qt Createrを入れたんだけど
Linuxのほかのアプリでは問題ないが、Qtではエディタ内をクリックすると
画面が上下に行ったりきたりする
全画面モードにすれば、ちらつくだけで何とか使えるんだけど
だれか対処法知らない?
11:デフォルトの名無しさん
09/10/04 12:48:23
>LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
>LGPL を選んだ場合は商用利用が可能です(いくつか制限あり)。
最近ライセンスについて調べたばかりの知識で
間違っていたら申し訳ないんだが
GPLでも商用利用は可能じゃね?
儲かるかどうかは別として
それとも3.0は別もん?
12:デフォルトの名無しさん
09/10/04 12:59:54
>>11
GPLだと、ライブラリを利用する自社開発分のソースも公開する必要があるので、
競争の優位性を保とうと思うなら事実上使えないと判断されることが多いようである。
13:デフォルトの名無しさん
09/10/04 13:18:19
入門 Qt 4 プログラミング
URLリンク(www.amazon.co.jp)
14:デフォルトの名無しさん
09/10/04 13:23:28
GPLのソフト作って儲かってるのは、ウェブサービスぐらいだろう。
(結果を返しているだけだからサービスのユーザーにソースを公開する必要がない!)
Qtでウェブサービス。作るかなぁ・・・。
15:デフォルトの名無しさん
09/10/04 13:26:21
>>1
Linuxを含むX Windowプラットフォームでは、Linuxがもっともアクティビティが高いけど、
それ以外もちゃんとサポートされている。
URLリンク(doc.trolltech.com)
16:デフォルトの名無しさん
09/10/04 14:06:48
>>11
GPLでも商用利用可能だけれど儲からないです。
LGPLなQtを使って作ったアプリケーションは、そのアプリケーションのライセンスで、
コピーの配布を禁止でき、有料販売できます。しかし、GPLなQtを使っているならば
アプリケーションのソースコードを公開しなければならないだけではなく、受取った
アプリケーションのコピーを無料で配れて、禁止もできないため、有料販売はできて
も利益を上げられません。
17:デフォルトの名無しさん
09/10/04 14:59:40
>>2
今は
Qt Development Frameworks
URLリンク(qt.nokia.com)
が正しいみたい。
18:デフォルトの名無しさん
09/10/04 16:01:00
>>16
最初の一人に高く売りつけるwww
19:デフォルトの名無しさん
09/10/04 16:04:28
>>14
つMySQL
サーバ系だと、どうしても継続的に保守が必要なので、GPLで出して、保守費で稼ぐというモデルが作れる。(本当に儲かるかどうかはケースバイケースだが)
しかし、Qtだとクライアントサイドだから、有償にし辛いのではないかなぁ。
20:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/04 17:09:21
>>11
もちろん商用利用は可能だよ。
その場合はパッケージその物の販売ではなく、保守・改修やマニュアル、
トレーニング、追加パッケージ等で収入を得るモデルになると思うけど、
商用利用することは問題ありません。例えばLinux関連ビジネスで収入を
得ている企業はそれをやってたりする訳です。
だから、その一文はミスリーディングかもね。
23:デフォルトの名無しさん
09/10/04 17:17:55
>>22
でも、それ作ったものを商用利用していることになるのかねぇ。
仮に君がQtでアプリを作ってそういうビジネスモデルをやっていたとする。
そして俺がそのQtアプリを入手して、君の代わり俺がその
ビジネスモデルで商売しても良いわけだ。
つまり俺が商売している部分は、アプリを除いた部分であって、アプリ自体は商用といえるのかねぇ?
24:デフォルトの名無しさん
09/10/04 17:47:41
>>20
こちらは、少し前にビルドした開発途上版のQt Creator1.2.91を使っているけど、
設定で選べるようになっていて、継承をさせることも可能になっているよ。
25:デフォルトの名無しさん
09/10/04 18:05:14
>>23
そのアプリを取り除いたら商売にならない訳だから、商用利用と言って良いでしょう。
誰かが代わりを務めることが出来ると言うけど、どうしてもついてしまう『差』というのも
あるものです。その原因は事業方針だったり、技術力だったり、ブランド力だったり、
色々ですが。例えば私がQtのコミッタで、あなたがQtのソースコードを読んだことが
なかったら、あなたは私のビジネスモデルで商売ができると言えるでしょうか。
26:デフォルトの名無しさん
09/10/04 18:13:13
>>24
使い分けはどうしたら良いんだろう?
27:デフォルトの名無しさん
09/10/04 18:29:52
GPL3の場合、サーバー側のコードも感染すると思ったほうがいいよ。
それどころか、画面を構成するのに必要な画像など一式が感染する。
GPL2とはちょっと様相が変わった。
28:デフォルトの名無しさん
09/10/04 18:40:56
前スレ>>874
>自分のソースにQtのLGPL版を静的リンクした場合、必ず自分のソースを公開する必要があるの。
無いよ。リンク可能なオブジェクトファイルを同梱すれば良いだけです。
自作部分のソースの公開は、静的リンクでも動的リンクでも必要ありません。
これは、ユーザがQtのソースコードを書き換えた時に、改変したQtを
再びあなたのプログラムにリンクできるようにするための決まりです。
例えばQtにバグがあった時なんかに、こういう仕組みが必要です。
>>>2 にLGPLのときは、わざわざ動的リンク時と断ってソース公開が任意となっている。
静的リンクでも一緒です。ただし動的リンクの場合は既に再リンク
可能なオブジェクトファイルが配布されているので、場合分けを
しているのでしょう。
29:デフォルトの名無しさん
09/10/04 19:45:33
オブジェクトファイルって同梱じゃないとダメ?
配布サイズでかくなるのが嫌だから別に公開しようと思ってるんだけど
30:デフォルトの名無しさん
09/10/04 19:59:28
同梱じゃなくても良いですよ。
31:デフォルトの名無しさん
09/10/04 23:19:05
>>5
>もう新スレか。Qtのスレが盛り上がっていてちょっと嫉妬するよ。
>やっぱLPGLになったのが大きいのかな。
普段何使っているの?
32:デフォルトの名無しさん
09/10/04 23:38:01
SMPlayer
URLリンク(ringonoki.net)
これもQt製じゃね?
33:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/05 08:47:41
社内アプリにはQt Creatorで十分なんだけど
「なんでVC/C#/VBにしねーの」って話になって導入しづらいんだよなあ
昔のDelphiみたいな感じに知名度高くなってほしい
35:デフォルトの名無しさん
09/10/05 09:41:07
Qt Creator コンパイル遅すぎる
36:デフォルトの名無しさん
09/10/05 13:00:01
g++が遅いんだよ、clはええ~
37:デフォルトの名無しさん
09/10/05 13:37:51
moc挿んでるせいじゃなくて?
38:デフォルトの名無しさん
09/10/05 22:07:16
QtCreator1.2でインクルードファイルディレクトリを指定するのはどうやるのですか?
gcc -I"dir"
のdirを指定させたいのだが。
39:デフォルトの名無しさん
09/10/05 23:35:37
.proの適当な位置に「INCLUDEPATH += インクルードディレクトリ」って書くか
環境変数CPLUS_INCLUDE_PATHとC_INCLUDE_PATHにインクルードディレクトリを書き込んでOS再起動する
40:デフォルトの名無しさん
09/10/05 23:37:15
>39
ありがとう。
41:デフォルトの名無しさん
09/10/06 10:30:55
QTで作成したツールをVistaマシンで動かすと、色の描画がおかしくなってしまいます。
真っ黒になったり、色が変わったり…。
XP環境では普通に描画されるのですが、どなたか対処方法をご存じないですか?
VistaマシンはレッツノートCF-Y8です。
ドライバは最新のものになっています。
42:デフォルトの名無しさん
09/10/06 11:15:43
CreatorでQDialogにQTreeViewとPushButtonを貼り、QTreeViewにQDirModelをセット
して、ファイルディレクトリをツリー表示してます。
表示、展開などは問題なく出来るんですが、ボタンを押すと選択されている
ディレクトリのフルパスを取りたいんですが、その考え方が分かりません。
選択項目の取得法、戻り値はフルパスなのか
43:デフォルトの名無しさん
09/10/07 10:41:10
>>42
>CreatorでQDialogにQTreeViewとPushButtonを貼り、QTreeViewにQDirModelをセット
>して、ファイルディレクトリをツリー表示してます。
>表示、展開などは問題なく出来るんですが、ボタンを押すと選択されている
>ディレクトリのフルパスを取りたいんですが、その考え方が分かりません。
QTreeViewは、アイテムをクリックするとそれを知らせる
clicked(const QModelIndex & index)シグナルを発する。
それと、自分で定義したスロットを接続すればよい。
44:43
09/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
09/10/07 10:45:02
訂正
QDirModel* dirModel = qobject_cast<QDirModel*>(ui->m_TreeView->model());
のui->は、いらない。
下記が正しい。
QDirModel* dirModel = qobject_cast<QDirModel*>(m_TreeView->model());
46:デフォルトの名無しさん
09/10/07 11:08:20
>>41
よく分からないから自信ないけど。
再描画が適切に行われていないとか。
QWidget::update()を直接呼んでみるとかればいいかも。
47:41
09/10/07 13:55:11
>>46
レスありがとうございます。
QWidget::update()を直接呼んでもやってみたのですが、
現象は変わりませんでした。
オブジェクトを移動/回転させると色が変わったりするので、
光の当て方とかが、何かいけないのかな…と思いつつ調べています。
48:デフォルトの名無しさん
09/10/07 14:03:39
>>41
Vista で描画の問題が起こった覚えはないけど、
可能性があるとすると OpenGL を使っているとか、
(INTEL系のチップセットだとドライバの出来が悪い)
ディスプレイの設定が16bit colorになっているとか。
後者は16bit colorが原因のバグが以前にあったと思うので、
未修正のがあるとすればだけど。
paintEvent() を自分で実装しているクラスで起こるとか、
QWidget にパレットを設定しただけでも起こるとか、
もっと詳しい情報があればもうすこし調べられるかもしれないが。
49:41
09/10/07 15:21:18
>>48
描画にはOpenGLを使用してます。
更にチップセットはINTELのものです(Intel(R) 965 Express Chipset Family)。
最新のドライバにしたのですが、相性が悪いとかあるのでしょうか…。
paintEvent()は自分では実装していません。
パレットを設定しただけで起こるかは…ちょっとわからないです。
50:41
09/10/07 16:40:33
自己解決しました。
ドライバが「最新」と表示されていたものの、
よくよく調べてみたら、最新では無いというオチでした…。
ダウンロードしたインストーラでは普通にインストールが不可だったので、
手動でインストールし、最新のものにしたら正しく表示されました。
レスしてくださった方々、ありがとうございました。
51:デフォルトの名無しさん
09/10/07 19:15:09
ケンちゃんラーメンは新発売って言っていたのに、
新発売ではないというオチでした・・・。
52:42
09/10/07 22:25:16
>43
そうか、継承元のQAbstractItemViewのclicked シグナルがIndexを渡して
くれるんですね。
継承元クラスを調べわすれてました。
ありがとうございました。
53:デフォルトの名無しさん
09/10/08 13:52:00
Ubuntuで
QtをシステムでWebインストール(Synaptic)してQtCreatorのみをインストールしました。
Qtは自動アップデートされて4.5です。
こんどQtCreatorをバージョンアップしたらコンパイルできなくなってしまった。
どうも、Creatorのオプション>Qt4 を見ると自動検出したQtが検出できてないらしく
ここにパスを手動で入れれば良いみたいなんだけど
usr/shareとかusr/lib/qt4とか入れてみてもだめみたいで
なんのパスを入れれば良いでしょうか?
54:デフォルトの名無しさん
09/10/08 15:18:54
>>53
パスを指定したあと、下のRebuildボタンを押す必要がある。
また、そのあと下のデフォルトQtバージョンから
使用したいバージョンを選ぶことで選択できるようになる。
55:54
09/10/08 15:26:14
こちらはDebian GNU/Linuxだけど、debパッケージでインストールしたものへの
パスは/usr/share/qt4になっている。
たぶんUbuntuのそれらしいところの、パスを指定すればいいと思う。
56:デフォルトの名無しさん
09/10/08 15:43:40
Windowsはドライバの出来が悪いのでQtで不具合が出る。
Linuxにしたほうがいい。
以上、報告終わり。
57:デフォルトの名無しさん
09/10/08 17:04:02
Qtの不具合だろw
ドライバの問題なら、他のソフトでも問題が出ているはず。
DirectXやOpenGLを使っていて問題が出るのならまだしも
普通のソフトで問題が出るのだからQtの不具合で間違いない。
58:デフォルトの名無しさん
09/10/08 17:12:36
>>56
クロスプラットフォームだからという理由で、Qtが選ばれる場合があるので
それは難しい気がする。
57の人がいうようにQtの不具合かもしれないし、そうではないかもしれない。
とにかく、理由が分からないのにそう決めるのは、個人的には賛成できない。
59:デフォルトの名無しさん
09/10/08 17:52:13
Linux->不具合なし完璧に動く。
Windows->不具合ありまともに動かない。
これがWindowsを使ってはいけない証拠。
60:デフォルトの名無しさん
09/10/08 18:02:12
そうだね
61:デフォルトの名無しさん
09/10/08 21:46:16
>>57
OpenGLで問題が出ているかどうかを確認せずにそのようなことは言えない。
そして、DirectXは、Qtは使っていないのに持出すのもおかしい。
62:デフォルトの名無しさん
09/10/08 22:23:46
ちょっと確認
VCではダイログを開くとき、モーダル、モードレスって考え方があって
モーダルモードで開くとダイアログを閉じるまで制御が帰ってこなっかた。
Qtの場合.show()を実行してもステップは次に進むので、
.show()で閉じて、ダイアログを閉じたときシグナルを投げ、元のクラスの
スロットで受けて続きの処理を書くの?
モーダルモードみたいなものはないよね?
63:デフォルトの名無しさん
09/10/08 22:31:49
QDialogならexecで呼べば、普通に処理終わるまで戻ってこないモーダルフォームとして表示できるけど
そういうことじゃないの?
64:62
09/10/08 22:45:42
>>63
そう言うことです。知らなかった(^^;
ありがとう
65:デフォルトの名無しさん
09/10/09 17:42:27
モーダルあなた疲れてるのよ
66:デフォルトの名無しさん
09/10/09 20:17:12
show()でもモーダルにできます。show()なので表示後すぐに戻って来て、モーダルになります。
1) setModal(true) を設定 - アプリケーションモーダル。
2) setWindowModality(Qt::ApplicationModal) を設定 - アプリケーションモーダル。
3) setWindowModality(Qt::WindowModal) を呼出し、親ウィジェットを 0 以外に設定 - ウィンドウモーダル。
67:デフォルトの名無しさん
09/10/09 21:56:37
グループボックスって境界線着いてなかった?
以前のバージョンではGroupBoxをドラッグすると枠つきだったような
68:デフォルトの名無しさん
09/10/09 22:13:11
>>67
4.5.2 Windows XP だけど付いてるよ。
どの環境、スタイルでの話?
69:67
09/10/10 08:37:06
>>68
Linux Ubuntu+Qt45
以前、ボタンの色を設定しようとして断念したものです。
やっぱり、その関係かな?
70:デフォルトの名無しさん
09/10/10 21:52:15
>>69
Plastique Style でも Cleanlooks Style でも枠は付いてるな。
URLリンク(qt.nokia.com)
URLリンク(qt.nokia.com)
プロパティを変更してないデフォルトのままの QGroupBox を置いて、
プレビューでスタイルを選択しても枠が付いていないようなら
一度Qtをインストールし直してみるのも手かも。
71:デフォルトの名無しさん
09/10/11 12:27:48
VCでコンパイルするとソフトの動作が安定したり早くなったり
あとコンパイルの時間も早くなったりするの?
72:デフォルトの名無しさん
09/10/11 15:20:58
>>71
使ったことないからよくは分からないけれど、
MinGWにくらべて実効速度が明らかに速いというのは
よくネット上で見かける。
73:デフォルトの名無しさん
09/10/11 19:32:07
>>71
安定度は同じ、実行速度はVCの方が見て分かる位に速い。
74:デフォルトの名無しさん
09/10/11 19:55:23
>>73
それはない。
MinGWのコンパイラはGCCで、これはVC++より明らかに速い。
たとえばGCCは同一の文字列を一つにまとめるような最適化までする。
有名な話だ。
こういった最適化によって3D計算などではVC++より100倍以上高速化
されたという。
これもinfoに書かれている有名な話。
75:デフォルトの名無しさん
09/10/11 20:00:04
Xの描画速度がWindowsより明らかに速いのはgccの最適化が効いているから。
DVDの書き込み速度もLinuxのほうが速い。
俺の環境ではWindowsで1時間かかったのがgccでコンパイルしたLinuxでは
1分かからなかった。
話にならないくらい違う。
76:デフォルトの名無しさん
09/10/11 20:17:53
GCCが遅いというのは有名な話だと思ったが、意外にも健闘してるね。
AMDのエンジニアが手を入れたりしてたからなのかな。
URLリンク(bvector.blogspot.com)
単に整数演算がそこそこ速いというだけかもしれないけど。
URLリンク(www.osnews.com)
まぁGCCがMSVC++より明らかに速いというのはどうかなあ…
77:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/11 20:25:20
>>76
インテルコンパイラはgccの倍以上遅いんだなあ。
79:デフォルトの名無しさん
09/10/11 20:27:53
どっからそんな情報を受信したんだw
80:デフォルトの名無しさん
09/10/11 20:33:15
100倍以上の差があるらしい
81:デフォルトの名無しさん
09/10/11 21:11:24
VCでビルド済みのQtを配布しているプロジェクトとかないのかな。
GPL/LGPL用ならライセンス的には問題ないよね?自分でコンパイル
したら何時間もかかるから、あったら助かるんだけど。
82:デフォルトの名無しさん
09/10/11 22:25:13
Qt Creatorも自分で用意すればVCのコンパイラ使えるんだっけ?
83:デフォルトの名無しさん
09/10/11 22:33:41
DVDの書き込み速度ってOS関係あんの?
84:デフォルトの名無しさん
09/10/11 22:49:28
>>81
ごっごるこーどにあったと思う
85:デフォルトの名無しさん
09/10/11 22:57:19
>>84
これかな?最新版はないみたいだけど、いいかも。
URLリンク(qt.windows.binaries.googlepages.com)
あとこんなのもあった。
URLリンク(code.google.com)
86:デフォルトの名無しさん
09/10/12 10:40:15
QtCreatorを使うとき、QPlastiqueStyleなどをデフォルトに指定することは
できるの?
a.setStyle(new QPlastiqueStyle)で、できるみたいだけど
87:デフォルトの名無しさん
09/10/12 11:23:47
>>77
PATH で mingw32-make.exe のあるディレクトリを指定してある?
88:デフォルトの名無しさん
09/10/12 13:55:59
>>86
他には、
アプリケーションのならば、プロジェクトの実行時の設定で-styleオプションでスタイル指定できます。
フォームの編集でならば、場合によっては、オプションのEmbedded Designでスタイル指定という方法もあります。
89:86
09/10/12 17:15:45
>>88
>プロジェクトの実行時の設定で
プロジェクトの実行時の設定タブ内の引数の項目に
-style Plastiqueを入れると出来ました。
ただ、ここの引数はRelease版でも、実行時に引数として渡さないとダメですよね?
90:デフォルトの名無しさん
09/10/12 20:43:09
>>89
いつもスタイルを特定のものにするならQApplication::setStyle("plastique") [static] でよいのではないですか。
91:89
09/10/12 21:38:36
>>90
この書き方もあるんですね
ありがとうございまいた。
92:デフォルトの名無しさん
09/10/14 21:38:08
Qt 4.6 Beta と Qt Creator 1.3 Betaがリリースされた。
93:デフォルトの名無しさん
09/10/15 13:12:31
>>92 そうだね
Nokiaが「Qt 4.6」ベータ版を公開、認定プログラムも導入
URLリンク(sourceforge.jp)
> Nokiaは12日、Qt開発者認定制度「Qt Certification Program」も発表している。
> Qt開発者のスキル、知識などを数段階で評価するもので、「Qt Essentials」
> という試験に合格する必要がある。受験料は199ドル。
おまいら受ける?
94:デフォルトの名無しさん
09/10/15 16:01:14
ちょーウケルwww
95:デフォルトの名無しさん
09/10/15 18:27:48
アプリ内で動画再生したいと思うんだけどなんか方法無い?
普通のプレイヤー見たく対応コーデックはなるべく多く
96:デフォルトの名無しさん
09/10/15 19:18:32
>>95
まずは Phonon で問題ないか調べてみては。
97:デフォルトの名無しさん
09/10/16 01:48:27
Qt Visual Studio Add-in 1.1が出た。
このバージョンは、Visual Studio Integrationに置き換わるものらしい。
これからは、Add-inだけが作り続けられるようだ。
98:デフォルトの名無しさん
09/10/16 04:14:51
>このバージョンは、Visual Studio Integrationに置き換わるものらしい。
このバージョンは、Visual Studio Integrationを置き換えるものらしい。
99:デフォルトの名無しさん
09/10/16 20:50:29
いつかはいろんなOSで作ってみたいと思ってるときは
VSのAddinでやるよりQT Creatorの使い方を覚えた方がいい?
100:デフォルトの名無しさん
09/10/16 21:37:42
以前は、日本語のHPからQt SDK for Linux/X11 32ビットをDLして
インストールするとCreator1.2.1で勝手に日本語になってたと思うんだけど
最近は日本語になってないし、QGui.soがないとかlibがないとか一筋縄で
いかないみたいなんだけど、なんかかわった?
101:デフォルトの名無しさん
09/10/16 22:11:15
>>100
落としたのは beta?
1.2 から 1.3 でメッセージ関連の変更が多いので今までの飜訳が
そのままは使えなくなっている。
1.3 向けの飜訳はまだこれからというところ。
なので現状では日本語は出ない。
正式リリースを待とう。
後者はわからない。どの distribution?
102:デフォルトの名無しさん
09/10/16 22:58:19
>>99
たとえWindowsでしか使わなくても、Qt Creator 結構使い勝手いいわよ。
103:デフォルトの名無しさん
09/10/16 23:39:57
>>99
むしろQT Creatorを使いやすいように改造してしまう
左の縦のボタンバーとか場所取りすぎや…
104:デフォルトの名無しさん
09/10/16 23:43:15
FakeEmacsつけてほしい。さもなければ、FakeVimをもうちょっと気合い入れてほしい。
FakeVimで使っててもそのうちイーってなって、外部のvim立ち上げてしまう。
105:デフォルトの名無しさん
09/10/17 01:11:24
vi厨、Emacs厨はIDEなんかに手出さずテキストエディタでシコシコ開発すればいいじゃん
106:デフォルトの名無しさん
09/10/17 01:13:37
結局のところそれが一番効率良いしな
107:デフォルトの名無しさん
09/10/17 01:32:43
なんで、vi、Emacsに
IDE風な拡張アドイン作れないんだろうね。
ピリオドおしたらメソッドのリスト表示とか
難しいのかな。
108:デフォルトの名無しさん
09/10/17 01:37:07
>>107
vi(クローン)は知らんが、EmacsLispは大量のソースを解析させるには非力過ぎる上にマルチスレッドが使えない。
……それでもEmacsから逃れられないんだがorz
109:デフォルトの名無しさん
09/10/17 01:39:10
Emacsやvimの補完も役に立つけど、今時のIDEの賢い意味のある補完に比べるとな orz
110:デフォルトの名無しさん
09/10/17 01:55:26
>>107
ここら辺を使えばできるんじゃないかな。
URLリンク(cedet.sourceforge.net)
URLリンク(ecb.sourceforge.net)
俺に取っては UNIX が IDE だから、わざわざ
屋上屋を架そうとは思わないけどね。
111:デフォルトの名無しさん
09/10/17 02:11:27
そのIDEのUNIXで、ピリオド押したら、
そのクラスのメソッドの一覧をだせるのですか?
112:デフォルトの名無しさん
09/10/17 02:28:35
Creatorは何よりもGo to slotが便利だ
これのためだけにVS AddinじゃなくてCreator使ってるといっても過言じゃない
113:デフォルトの名無しさん
09/10/17 02:28:37
>>96
ありがとう。Phononでいけそうだ。
ただ、WindowsでPhononモジュール追加して
コンパイルができない。あははははorz
なんかのライブラリとか足りないだけなんだけど、
Windows SDK入れてコンパイルしないといけない?
114:デフォルトの名無しさん
09/10/17 09:05:26
>>111
それが必要なら勿論そうだよ。俺は要らないけど。
115:デフォルトの名無しさん
09/10/17 09:26:09
>>111
クラスメソッドの一覧が出るとどれくらい楽になりますか。
116:デフォルトの名無しさん
09/10/17 10:31:05
>>113
mingw が DirectShow をサポートしてないから Nokia のオープンソース版の
バイナリだと Phonon が入ってない。
URLリンク(labs.trolltech.com)
を参考に Qt を作り直す手もあるけど、どうせ作り直すなら Windows SDK でビルドし直した方がいいか。
試してないけど、 >>85 にVCでビルドしたバイナリについて書いてあるから、
それに Phonon が入ってるか確認してみるのもいいと思う。
117:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/17 12:09:57
Windows SDK でのビルドは難しくないし、VS2008 が入ってるなら
VS2008 のコマンドプロンプトからやっても同じと考えていい。
メニューからそれぞれのコマンドプロンプトを立ち上げれば環境変数も
あらかた設定されてるし。
手順的には
VS2008 or Windows SDK のコマンドプロンプトから
<Qtの展開したディレクトリ>/bin を PATH に追加して、
configure && nmake でだいたいはOK。
configure のログはちゃんと確認して欲しいモジュールが含まれているかの
チェックはしておくべき。
後、シャドービルドはいろいろめんどくさかった記憶がある。
ので、展開したディレクトリでビルドだな。
Qtのビルドはかなりディスク容量を食うのが問題なんだが。
119:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/17 13:12:21
VC++ 2008 Express Editionでもビルドできますか
121:デフォルトの名無しさん
09/10/17 13:43:49
Pythonで開発してます
qtのいろんなオブジェクトはconnectっていうメソッドを持ってますが
どれでconnectしてもかまわないのでしょうか?
122:デフォルトの名無しさん
09/10/17 14:02:16
>>120
できる
検索すれば手順を書いたブログが出てくるよ
123:デフォルトの名無しさん
09/10/17 14:14:05
>>121
Pythonのことはよく理解していないので、質問の意味が今ひとつ分からないんだけど、
それでいいと思う。
C++での話だけど。
シグナルとスロットを使用しているQtのクラスは、QObjectを継承して、
そのQObjectにはconnect()が定義されている。
C++では、各オブジェクトからconnect()を使用するときは、
static版の同一のconnect()を使用している例が多い。
124:123
09/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
09/10/17 14:29:35
訂正
誤)this.connect(..
正)this->connect(...
126:デフォルトの名無しさん
09/10/17 14:39:03
_ ∩
( ゚∀゚)彡 ぱいそん!ぱいそん!
( ⊂彡
| |
し ⌒J
127:デフォルトの名無しさん
09/10/17 16:32:16
Ubunutu9.04を使ってます。
qtcreatorが日本語にならないのですが、
どこかに日本語化の手順をまとめたサイトはないでしょうか???
128:デフォルトの名無しさん
09/10/17 16:55:39
>>127
知らないんだけど。
qtcreatorのバージョンはいくつ?
パッケージシステムでインストールしたの?
129:128
09/10/17 17:14:44
環境は、i386?
もし、qt-creator_1.0.0-0ubuntu3_i386.debをインストールしたのなら、
バージョンが古いから、下記サイトから最新安定版の1.2.1をダウンロードした方が
いいよ。これは、日本語化されているから。
URLリンク(qt.nokia.com)
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:デフォルトの名無しさん
09/10/17 17:33:45
スレタイに Mac って入ってるけど、Mac 版の Qt は Cocoa 化されてからまともになったの?
以前試した時は見た目も日本語化も使えるレベルに到達していないと感じたけど、wx みたいに
OS にバンドルされる様になるのかな。
131:デフォルトの名無しさん
09/10/17 17:56:59
>>130
ここに情報が載っている。
URLリンク(gihyo.jp)
132:デフォルトの名無しさん
09/10/17 18:02:49
>>131
ありがとん。Mac でも使えるという情報がもう少し出てきたら試してみます。
133:デフォルトの名無しさん
09/10/17 19:23:16
QMainWindow上にQGraphicsViewを置いて、GraphicsView上でマウスがクリックされたら
その座標を知りたいのですが、mousePressEvent()ってGraphicsViewをサブクラス化して
使わなくてはならないのでしょうか?
QtCreatorのDesignerからこの辺さくっと書けないのですかね?
134:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/17 20:22:50
>>134
各ボタンの sizePolicy に Expanding とか MinimumExpanding とか指定する。
URLリンク(qt.nokia.com)
136:デフォルトの名無しさん
09/10/17 20:31:12
127
NOKIAのサイトからダウンロードしたqtcreatorも日本語化されてないようです。
試してみたけどだめでした。
具体的に日本語化されるには何というファイルがどこにあればいいのでしょうか?
qtcreatorはUbuntu9.04の奴です。
137:デフォルトの名無しさん
09/10/17 21:17:22
>>135
ありがとう.望むものになりました.
setCentralWidget をしてなかった.
それが何を意味するのかこれから勉強します.
QMainWindow に直接 setLayout しようとしてみたり,
なんか基本が分かってない俺.
新しいフレームワークを使い始めた時はそんなもんかな.
138:デフォルトの名無しさん
09/10/17 21:28:51
一覧から選ぶより自分でtypeした方が速いから
ピリオド押した瞬間にドロップダウンが出てくると
イラッとする漏れって
139:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/17 21:31:11
なら、そのまま入力すれば?
別に選ばなくても良いんだよ。
141:デフォルトの名無しさん
09/10/17 21:32:23
QtCreatorの方式なら自分でタイプした方が早いってのは稀だろ
142:デフォルトの名無しさん
09/10/17 22:05:27
そうやってどんどん重量級になっていくんだなw
143:デフォルトの名無しさん
09/10/17 22:29:27
/opt/qtsdk-2009.04 $ echo $LANG /opt/qtsdk-2009.04
ja_JP.UTF-8
なぜだ??
144:デフォルトの名無しさん
09/10/17 22:32:09
一つ気になるのは、PyQtを動かすためにQtが必要であること。
まぁQtへのバインディングと考えれば必要なのは理解できるんですが、
これを各マシンにインストールするのは面倒すぎます。
もし可能であればネットワークにQtを置いて、環境変数でそこを指すようにして、
ネットワークで共有、ってことをやりたい。
それが出来るんならまぁ使ってもいいかな、って気がします。
ところで、wxPythonと比較してPyQtは何に優れてるんですかね。
AutodeskがPyQtを推す意味って何なんだろうか。
145:デフォルトの名無しさん
09/10/17 22:36:29
誰かがwxスレでQtの宣伝をし過ぎた所為なのかしらんが、二つのスレがシンクロしだしたな
146:デフォルトの名無しさん
09/10/17 22:40:15
要らん時までパカパカ補間ウインドウひらくわりに肝心なときには補間できないという難点がある品。
調べたいことがあったらその時バッファにカーソル下の該当ワード拾ってヘルプウィンドウ開くさ。
Windows流の窓最大化文化ばかりが全てじゃないって話。
147:デフォルトの名無しさん
09/10/17 22:43:39
>>133
アイテム以外のところ?
だったら、Designerで格上げ機能を使えば、カスタムクラスみたいにできるよ。
でもこれだと、カスタムクラスを書くのと変わらないかもしれない。
コードを書くのででいいのならば、イベントフィルターをそのGraphicsViewにインストール
すれば、イベントをハンドルできるよ。
でも、GraphicsViewをカスタムクラスを使わないで作るのって大変じゃない?
148:デフォルトの名無しさん
09/10/17 22:47:36
>>146
補間ウインドウ? 最大化?
お前さ、実はしらんだろ。何も。
149:デフォルトの名無しさん
09/10/17 22:55:04
スレがめっちゃ伸びててびっくりした
Autodesk?Mayaで使うの?そのうちPyQtスレが必要になるのかも知れないなあ
150:デフォルトの名無しさん
09/10/17 22:57:38
Qtはいま絶好調だからね。
企業サポート
LGPL
Qt Creator
WebKit統合
マルチメディア統合
組み込み・モバイル対応
開発速度も速い。
151:デフォルトの名無しさん
09/10/17 23:01:15
>147
レスありがとうございます。
Designerの格上げってサブクラス作るって事なのですね。。
格上げするのはいいけど、格上げしたクラスのヘッダファイルがないと言われました。
これがカスタムクラス書くのと変わらないという意味なのでしょうか。
イベントフィルター云々はどのようにやるのでしょうか?
やりたいことは、単に何かのコントロール(QtではWidget?)に絵を表示させて、
マウスを当てたらその座標の画素の色情報をツールチップかなんかで見れるということです。
.NETだとイベントを選べば、勝手に関数ができてそこにコードを書くだけで良かったのですが、
Designer使ってもそこまで簡単には行かないっぽいのかな。
152:デフォルトの名無しさん
09/10/17 23:07:51
でも今 PyQtの品質が微妙なので、PySideにがんばってもらわなければ。
PySideががんばっている分、 boost.python もどんどん良くなってる。
153:デフォルトの名無しさん
09/10/17 23:09:50
>>150
>組み込み・モバイル対応
iPhone でも Android でも webOS でも使えないんだよね?
Maemo は結局 Gtk+ のままだし、Qtopia は Zaurus も
とっくにディスコンになって、どうなるんだろね
154:デフォルトの名無しさん
09/10/17 23:20:33
>>136
前スレ(Qt総合スレ4)の804、805、811、816、819、820、821を呼んでみたらいいと思う。
特に、816以降。
こちらでは、グーグルで検索して、キャッシュで見ることができた。
話は変わるけど。
こっちで試してみたら、2回目の起動で日本語化された。
もう一回起動してみても日本語化されない。
155:154
09/10/17 23:21:37
訂正
>もう一回起動してみても日本語化されない。
もう一回起動してみても日本語化されない?
156:デフォルトの名無しさん
09/10/17 23:35:44
>>153
QtはNokiaが買収したんだぜ?
スマートフォン世界最大販売数を誇るSymbian提供してるところに
157:デフォルトの名無しさん
09/10/17 23:37:03
>>144
>もし可能であればネットワークにQtを置いて、環境変数でそこを指すようにして、
>ネットワークで共有、ってことをやりたい。
>それが出来るんならまぁ使ってもいいかな、って気がします。
今は無理だけど、将来そうなると思う。
>ところで、wxPythonと比較してPyQtは何に優れてるんですかね。
>AutodeskがPyQtを推す意味って何なんだろうか。
Pythonは詳しくないけどC++でいえば、やっぱり楽にプログラミングできる
ことじゃない?
PythonのバインディングにPySideも加わった。
URLリンク(sourceforge.jp)
158:デフォルトの名無しさん
09/10/17 23:43:59
>>153
>Maemo は結局 Gtk+ のままだし、Qtopia は Zaurus も
>とっくにディスコンになって、どうなるんだろね
Qt4.6でMaemoのサポートが入ってくる。
URLリンク(journal.mycom.co.jp)
URLリンク(qt.nokia.com)
159:デフォルトの名無しさん
09/10/17 23:44:13
>>156
開発者を S60 から Qt に移行させるのは大変だと思うぜ。
最大販売数って言うけど、Qt なんか関係ないローエンドの機種を
大量に売ってるからじゃなかったっけ。ハイエンド機種も日本じゃ
売ってないし、iPhone や Android に比べてどうだろうね。
160:デフォルトの名無しさん
09/10/17 23:52:04
>>158
Maemo のネイティブ API も Qt ベースになるんだね。
古い情報を見てたわ。
URLリンク(wiki.maemo.org)
161:デフォルトの名無しさん
09/10/17 23:56:14
今はまだ過渡期状態だけど、
凄いスピードで進んでいると思うよ。
停滞しているどっかの何かよりかは
ずっと期待できるな。
162:デフォルトの名無しさん
09/10/18 00:08:07
NOKIA は Maemo も Symbian も全部 Qt ベースにするつもりだね。
もっとも、製品に乗るのは早くても来年の終わりか再来年になるだろうけど。
けど、日本ではあまり関係なさそうだな。
もう一度日本市場に戻ってくるかは疑問だし、戻ってきたとしても売れるかというと。
Symbian Foundation にも Qt が入ってくるだろうから、そのときに
日本で Symbian 使ってるところが使うことになるのかな。
163:デフォルトの名無しさん
09/10/18 00:30:14
>>162
>NOKIA は Maemo も Symbian も全部 Qt ベースにするつもりだね。
>もっとも、製品に乗るのは早くても来年の終わりか再来年になるだろうけど。
下記に、Qt4.6 のリリース予定は、2010年の第1四半年となっているけど、
これだとそれくらいになるの?
URLリンク(qt.nokia.com)
164:デフォルトの名無しさん
09/10/18 00:39:41
Symbian Foundation Japanの公式ブログ
URLリンク(blogjp.symbian.org)
ここで、YouTubeにアップされた携帯電話で動くQtのデモのが見れる。
下記はリンク元。Qtのデモ映像がたくさん見れる。
URLリンク(www.youtube.com)
165:デフォルトの名無しさん
09/10/18 01:54:45
>>151
>Designerの格上げってサブクラス作るって事なのですね。。
>格上げするのはいいけど、格上げしたクラスのヘッダファイルがないと言われました。
カスタムクラスなんだけど、格上げは、Designerで配置したQWidgetなどに、
カスタムクラスを組み込むもの。
だから見た目は、Designer上で設定できて、なおかつそのクラスの振る舞い定義として、
コードを各個とができる。
通常のサブクラス化で行うようなクラスヘッダファイルと、実装ファイルを定義すればよい。
>これがカスタムクラス書くのと変わらないという意味なのでしょうか。
そう。結局コード書かないといけないという意味で。
>イベントフィルター云々はどのようにやるのでしょうか?
QObjectを継承したクラスのイベントをハンドルできる機能。
QWidgetもQObjectを継承しているから、ほかのウィジットのイベントをハンドルできる。
イベントをハンドルする側にeventFilter()を定義し、ここでイベント処理の内容を書く。
そして、イベントをハンドルされる側のinstallEventFilter()をコールして、
イベントをハンドルする側のオブジェクトを引数として渡す。
166:165
09/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
09/10/18 01:58:51
>>165
訂正
>コードを各個とができる。
コードを書くことができる。
168:165
09/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:デフォルトの名無しさん
09/10/18 02:13:22
>>168
再び訂正
誤)return QWidget::eventFilter(obj, event);
正)return QWidget::eventFilter(iObject, iEvent);
170:デフォルトの名無しさん
09/10/18 02:13:28
>157
URLリンク(blog.taikomatsu.com)メモ/
171:デフォルトの名無しさん
09/10/18 13:42:32
>>151
>Designerの格上げってサブクラス作るって事なのですね。。
>格上げするのはいいけど、格上げしたクラスのヘッダファイルがないと言われました。
格上げとは、DesignerプラグインにはしていないウィジェットをDesignerのフォームで使えるようにする機能です。
例えば、QPushButtonを継承して作ったPushButtonウィジェットがあって、Designerプラグインにはしていないとします。
そうすると、これから作ろうとするフォームにPushButtonウィジェットを入れることができません。そこで、Designer
で既に使えるようになっているQPushButtonを格上げ、つまり、サブクラスのPushButtonと入換えれば、殆どの属性は
同じなので、独自に追加したプロパティの他は、Designerで操作しながらフォームを作成できます。PushButtonは、
別に作成しておくクラスなので、その実装コードやヘッダーは別に用意します。PushButtonは、C++のみで作成してもよいし、
Designerを使って作成してもよいです。
172:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/18 15:07:51
みんな知ってるよ
174:デフォルトの名無しさん
09/10/18 15:26:07
プログラム中でLayoutするのが面倒ですが
QWidgets配置をdesignしたschemeをXMLとかで出力して
それに応じてプログラム中でautoでQWidgetsを
配置していってくれるツールはありますか?
175:デフォルトの名無しさん
09/10/18 15:29:39
Qtでは,ウィンドウのデザインは次の3つの方法でできます.
* C++のソースに直接記述 必要なクラスを作成して,プログラム中に直接記述します.
* XMLでインターフェースを記述 WindowsのXAMLのように,デザインの情報をXML(uiファイル)で記述します.
私は,この方法がもっとも性に合っていますが,QtのインターフェースのXMLのマニュアルを見つけることができませんでした.今のところ,諦めています.
* Qt Designerでuiファイルを作成 マウスとキーボードを用いて,uiファイルを作成します.もっとも手軽に,インタフェースの作成ができるでしょう.
176:デフォルトの名無しさん
09/10/18 15:34:24
URLリンク(www.off-soft.net)
177:デフォルトの名無しさん
09/10/18 15:58:59
>>171
>PushButtonは、C++のみで作成してもよいし、Designerを使って作成してもよいです。
Designerで作成する方法は、今のバージョンでも使用できる?
178:デフォルトの名無しさん
09/10/18 16:15:04
>>176
出来ました
ありがとうございました
179:デフォルトの名無しさん
09/10/18 17:30:03
>>177
Qt Creatorと併せて使えばできます。
Qt Creatorの "新規作成" の "Qt デザイナフォームクラス" を使えば、
フォームに加えて実装部とヘッダー部のテンプレートが作られます。
180:デフォルトの名無しさん
09/10/18 17:39:52
>>174
Qt Desingerで配置して、QUiLoaderを使うというのはどうですか。
Qt 4.5: QUiLoader Class Reference
URLリンク(doc.trolltech.com)
181:デフォルトの名無しさん
09/10/18 17:58:16
>>180
ありがとうございます
>>176さんのところに書いてありました
182:デフォルトの名無しさん
09/10/18 18:15:42
>>180
横から便乗だけど
PyQt でも QUiLoader 使える?
183:デフォルトの名無しさん
09/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.
URLリンク(www.riverbankcomputing.co.uk)
URLリンク(www.nabble.com)
184:デフォルトの名無しさん
09/10/18 18:28:15
>>179
レスありがとう。
でも知りたいのは、Qt Creatorではなく、今のバージョンのDesignerにPushButtonを
作る機能があるのかないのかが知りたいんです。
185:デフォルトの名無しさん
09/10/18 18:33:36
>>183
それ出来るっていう意味で書かれてるんじゃないの?
186:デフォルトの名無しさん
09/10/18 18:36:38
Qtスレがこれほど活発だってのに、Gtkスレは閑古鳥だな…
うらやましい限りだ。
187:デフォルトの名無しさん
09/10/18 18:42:27
>>186
Gtkスレってどれのこと?
188:デフォルトの名無しさん
09/10/18 18:51:20
Qtのコンパイルってどんだけ時間かかるんだよorz
189:デフォルトの名無しさん
09/10/18 18:58:14
>>187
Gtkプログラミング on Windows!!!
スレリンク(tech板)
上のスレのことだけど、他にもあったのか?
190:デフォルトの名無しさん
09/10/18 19:01:13
>>189
やっぱりこれのことか。
ありがとう。
Gtkならほかにもスレッドがありそうな気がして、自分が見落としているのかと思って。
191:デフォルトの名無しさん
09/10/18 19:09:13
他にもあるよ。
GTK+プログラミング
スレリンク(linux板)
192:デフォルトの名無しさん
09/10/18 19:11:29
Gtkはなぁ・・・
Windowsで使うものじゃないと
なぜか決めつけてかかってる俺
193:デフォルトの名無しさん
09/10/18 19:24:50
奇麗に棲み分けできてるからね。
Win : 色々ある
UN*X : ほぼ Gtk+
Mac OS X : ほぼ Cocoa
194:デフォルトの名無しさん
09/10/18 20:10:25
KDE派だからLinuxでもQtな俺
195:デフォルトの名無しさん
09/10/18 20:28:35
>>191
ありがとう。
見てきた。
196:デフォルトの名無しさん
09/10/18 21:19:24
>>184
Designerは、フォームの上にウィジェットを並べる機能のみを提供するので、
将来サブクラスを作れるような機能は追加されません。
197:デフォルトの名無しさん
09/10/18 21:26:25
やっとコンパイル終わったよ。4時間ぐらいたってねーか?
198:デフォルトの名無しさん
09/10/18 21:38:21
友愛とUIを掛けてるのか
199:デフォルトの名無しさん
09/10/18 23:25:59
>>196
ありがとう。
200:デフォルトの名無しさん
09/10/18 23:27:18
QtCreatorのソースファイルツリーってフォルダ階層作れないのかな?
ファイル数増えたら見づらくなりそう。
201:デフォルトの名無しさん
09/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_())
URLリンク(techbase.kde.org)
202:デフォルトの名無しさん
09/10/19 00:02:46
>165
MainWidget
+PictWidget
+StatusBar
みたいに、メインウィンドウ上に画像Widgetとステータスバーがあり、
画像の画素情報をステータスバーにも反映させたいような場合、
MainWidgetでイベント処理するのが適当だと思うのですが、
mouseMoveEvent()メンバ関数をオーバーライドするような感じではないのですね。
もう少し勉強してみます。ありがとう。
仮にDesignerで何らかのWidgetを格上げしたPictWidgetのmouseMoveEvent()を
オーバーライドして処理しようにも、親のMainWidgetのメンバ(例えばStatusBar)とかアクセスできない
ですよね。入門Qt4プログラミングは購入したので、7章あたり読んでみます。
203:デフォルトの名無しさん
09/10/19 00:03:19
>>201
ありがとうございます
@QtCore.pyqtSignature('')
def on_myPB_clicked(self):
print 'a'
これだけでも呼ばれているってことは
connectも自動でやってくれるんですね
204:デフォルトの名無しさん
09/10/19 00:06:27
あ
myPB の位置を XML で property geometry で指定してても
その位置に出て来ないですね
指定の仕方が間違ってるのかな
もう少し勉強してみます
205:デフォルトの名無しさん
09/10/19 00:20:33
>>200
次期リリースの1.3のベータ版なら実ファイル階層を区分けして表示してくれるよ。
ただし、ヘッダ、実装ファイル、リソースファイルなどに大きく区分けされて、
その中にそれぞれのフォルダーが表示される。
ただし、この版では日本語化されていないし、日本語の入力もできなかった。
(環境がLinuxでの話)
URLリンク(qt.nokia.com)
下記のYouTubeのQtStudiosのQt Creator-Rename, find...というのを見れば、
新しく実装されたリネームや検索機能の使用の様子が見れるよ。
ここには、その他にもQt Creatorの使っている様子などアップされている。
URLリンク(www.youtube.com)
206:デフォルトの名無しさん
09/10/19 00:27:25
Qt iPhone: URLリンク(qt.gitorious.org)
207:デフォルトの名無しさん
09/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
09/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
09/10/19 00:57:33
つづき
>>202
>ですよね。入門Qt4プログラミングは購入したので、7章あたり読んでみます。
ごめん、購入したいとは思っているんだけど、まだ買ってない。
210:207
09/10/19 01:02:16
>>202
>オーバーライドして処理しようにも、親のMainWidgetのメンバ(例えばStatusBar)とかアクセスできない
>ですよね。
MainWidgetがQMainWindowを継承しているのならば、StatusBarを取得する関数がある。
無ければ自分で書けばいいだけの話のような気がするけど。
211:207
09/10/19 01:26:31
>>202
>MainWidgetでイベント処理するのが適当だと思うのですが、
これは、設計によりけりだと思う。
>mouseMoveEvent()メンバ関数をオーバーライドするような感じではないのですね。
上で書いた方法で、StatusBarを参照できるから、この方法、つまりCentralWidgetが
自分に関する処理を自分で行うのも、ありだと思うけど。
212:200
09/10/19 02:06:19
>>205
おお、もう実装予定なのか!
リネーム機能も良さげだし、QtCreatorすばらしいな。
213:デフォルトの名無しさん
09/10/19 02:18:50
Windowsで64bitアプリって作れますか?
214:デフォルトの名無しさん
09/10/19 02:59:28
>>212
205に書いてある通り、開発版では実装済み。
リンクたどって、開発版を試しにインストールしてみれば試せるよ。
215:デフォルトの名無しさん
09/10/19 03:10:38
>>213
MSVCなら可能。MinGWは、コンパイラーが対応してないせいで今のところ無理みたい。
URLリンク(doc.trolltech.com)
216:215
09/10/19 03:14:38
ごめん、MinGWも可能みたい。
217:213
09/10/19 03:25:20
とりあえずMSVCでできたっぽい。
バイナリ無くてコンパイルに時間がかかるから試行錯誤にも時間がかかる。
やりかた書いて良いよね? でも疲れたから今日は寝る。
一応qt creatorの64bit版を置いとく。
fURLリンク(ftp.trolltech.com)
64bit版を使わないとデバッグができない。32bit プロセス(qt creator)から
64bit DLL(CDBデバッガ)を読み込めないから当然か。
残念ながらこれ以降、今日までの間に64bitバイナリは無いようだ。
最新のが使いたいなら自分でコンパイルしろと。
218:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/19 15:44:01
なんでクロスプラットフォームなQt使っていて
わざわざWindows専用のMessageBoxなんて使うの?
QMessageBoxつかえばいいじゃない。
220:219
09/10/19 15:45:33
うん。最後の一段落見逃してたw
言い直す、
他にもWIN32 APIの代わりのQなんたらがあるじゃない。
221:デフォルトの名無しさん
09/10/19 15:47:53
コンパイルエラー、貼らないと
222:デフォルトの名無しさん
09/10/19 15:58:14
ソースをUTF-8で保存
223:218
09/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:デフォルトの名無しさん
09/10/19 16:13:53
-fexec-charset=UTF-16LE?
225:218
09/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:デフォルトの名無しさん
09/10/19 16:25:54
>>218
QMAKE_CXXFLAGS += --input-charset=cp932 --exec-charset=cp932
227:デフォルトの名無しさん
09/10/19 16:41:40
>>225
左の"Projects"ボタンから下の方に
"Editor Settings" として "Default File Encoding" がある。
また、開いているファイルには"Edit"に文字コード指定用の項目がある。
228:218
09/10/19 16:47:15
>>226
.pro ファイルにそのように書いたらうまく行きました。
ヘルプをよく探してみたら「qmake Platform Notes」に載ってました。
ヘルプの「qmake Advanced Usage」のところを見ていたら,グローバルに定義したい
#define のやり方も書いてありました。
「qmake Variable Reference」にいろいろ載ってますね。じっくり読んでみます。
助かりました。ありがとうございました。
229:218
09/10/19 16:56:41
>>227
おっしゃるとおりありました。
UTF-8に変えたら,>>226で教えていただいた方法を使わなくてもすんなり行きました。
用途によって使い分けます。
ありがとういございました。
230:デフォルトの名無しさん
09/10/19 17:36:32
ぼそ。。。作りにくいと思ったとき、それは間違った道。。。
231:デフォルトの名無しさん
09/10/19 17:57:12
独り言...Windows上のいろんなコンパイラで共通に使えるライブラリ作って
使ってるんだよな~
232:デフォルトの名無しさん
09/10/19 19:48:39
UNICODE化推進したのに
WindowsはいつまでSJISに縛られるんだろう
233:デフォルトの名無しさん
09/10/19 19:50:14
しばられてるのはお前だアホ
234:デフォルトの名無しさん
09/10/19 20:04:30
VCだとソースがSJIS固定じゃない
235:デフォルトの名無しさん
09/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”
とあるけどこれはどういう意味か教えてください。
URLリンク(doc.trolltech.com)
236:デフォルトの名無しさん
09/10/19 22:00:15
218は正しくはWin32APIスレ行くべきだったな。
L""やTEXT(),_T()書いたからと言って、SJISでソースかいてりゃ文字列リテラルの中身はSJISだ。
それをUnicodeですと言いはればそりゃコンパイラも怒るわ。
237:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/19 22:13:54
じつはそのプラグインdllが32bitだったりしない?
239:デフォルトの名無しさん
09/10/19 22:21:42
禿げ敷く胴衣
240:237
09/10/19 22:33:31
QTへのPATHの設定が必要なだけだった。
エラーメッセージ紛らわしい。
でもQt creatorは起動したがまだコンパイルできず。
jom.exeってなんだ? どうすれば現れる?
241:デフォルトの名無しさん
09/10/19 22:36:57
コンパイル済みのqt creatorからたぶん32bitのjom.exeをコピったら動いた。
もしかして別作者のツール?
とりあえずこれでWindows 64bitへの旅は終わったかな?
242:デフォルトの名無しさん
09/10/19 22:38:57
ついでに、プラグインdllが32bitかどうか
調べるツールとかしりませんか?
他にもいろいろ情報を知りたい。
7zipでDLLを開いてそのプロパティで調べたけどw
243:デフォルトの名無しさん
09/10/19 23:07:51
>>241
jom も Nokia(Qt) のツール。
nmake でサポートしてない並列ビルドをするためのツール。
詳しくは下記を参考に。
URLリンク(labs.trolltech.com)
URLリンク(qt.gitorious.org)
244:デフォルトの名無しさん
09/10/20 04:14:38
URLリンク(www.cycleof5th.com)
245:218
09/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:デフォルトの名無しさん
09/10/20 08:51:34
いいえVCはアホの子です
ソースに日本語コメントが有って
utf-8で保存されてたりするだけで
コンパイルすら通らなくなります
247:デフォルトの名無しさん
09/10/20 09:00:11
Windowsのインストーラは標準ではUTF-8の環境をインストールしてくれないので
インストール時に項目をチェックしてないのではないかな?
248:デフォルトの名無しさん
09/10/20 09:19:15
UTF-8の環境ってなんだ?
UTF-8ってのはASCIIコード互換なんだよ。そのように作られている。
ASCIIの文字の範囲なら1バイト、それ以外なら最大4バイトの可変長文字コード
だから、ソースに日本語が入っていてもUTF8なら
ASCII文字と認識されるだけなので、コンパイルが通らないことは無い。
249:デフォルトの名無しさん
09/10/20 09:23:38
>>243
jom ぱねぇwww
マルチコア使い切ってる。長いQtのコンパイル時間が半分になるw
これ本当にnmake完全互換ってことでいいのかな?
それならQt以外でも使えるな。nmakeにリネームしてやるかw
250:デフォルトの名無しさん
09/10/20 10:41:40
>>245
>MinGW gccはたまたまデフォルトがUTF-8
GCCのデフォルトはASCIIでは?
251:デフォルトの名無しさん
09/10/20 10:50:55
>>235
Qtのファイル取得ダイアログは、デフォルトではWindows固有のファイル取得ダイアログを
呼出してイベント処理されるため、そのファイル取得ダイアログの表示中には、
Qtの主イベントループで処理されるタイマーは、タイムアウトしても直ぐには処理されません。
252:245
09/10/20 10:51:47
>>250
正しくはそう言うべきなのかもしれないが,>>248の言うとおりUTF-8はASCII互換なので,
UTF-8でソースコードを書いてL""の""の中に日本語書いても異常なコードとは認識せず,
ちゃんとUTF-16に変換してくれるので,「なんたらW」のWIN32 APIを呼び出したとき文字化けしない。
本家gccは知らないが,MinGW gccはそうなってるよ。
253:デフォルトの名無しさん
09/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
09/10/20 11:38:57
>>251
ありがとうございます。
理解できました。
255:デフォルトの名無しさん
09/10/20 11:54:57
>>250
UTF-8だよ。3.xも4.xも。
256:デフォルトの名無しさん
09/10/20 12:37:25
>>253
タイトルバーを含めて中心に表示するのならば、frameGeometry()を使うというのもありそうです。
Qt 4.5: Window Geometry
URLリンク(doc.trolltech.com)
QDialogの親を0にするとデスクトップの中心に表示されるので、そのコードを調べてみるというのはどうですか。
257:デフォルトの名無しさん
09/10/20 13:15:10
>>252
ありがとうございます。
理解できました。
258:デフォルトの名無しさん
09/10/20 13:23:35
>>253
今のところ、256の人が書いているように、Dialog以外でメインウインドウを
含めてWidgetをダイレクトにスクリーンの中央に表示させる関数や属性は、
Qtには実装されていないと思う。
だから、コンストラクタにコード書くしかないんじゃない。
知っているかもしれないけど、QSettingsを使って、設定値を覚えさせるようにしておけば、
次回起動時に終了時の位置やサイズで表示されるようになる。
初回起動時は、中央に表示されなくても2度目からユーザーが好みのMainWindowの位置を
指定できるので、これで十分だと思うけど。
ちなみに、最大化するのなら下記のコードが有効。
setWindowState(windowState() ^ Qt::WindowMaximized);
show();
259:デフォルトの名無しさん
09/10/20 13:26:15
最大化uzeee
260:253
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/20 22:54:08
そもそもUNICODEという仕様がクソ
263:デフォルトの名無しさん
09/10/20 22:54:48
そしたら何コードだったらいいの
264:デフォルトの名無しさん
09/10/20 22:59:20
TRONコード
265:デフォルトの名無しさん
09/10/20 23:39:05
そもそも Byte Order なんてある訳ない UTF-8 に Byte Order Mark 付けるのは
気が狂ってるとしか思えない。
266:デフォルトの名無しさん
09/10/20 23:45:11
Creator1.3 Betaの日本語化の方法が書いてある。
Qt Creator 1.3 Beta リリース
URLリンク(qt-creator-jp.sourceforge.jp)
267:デフォルトの名無しさん
09/10/21 00:31:44
ソースコードにASCII文字以外を書くなよw
268:デフォルトの名無しさん
09/10/21 00:46:28
>>267
コメントは英語にするの?
英語が苦手だからちょっときつい。
それに、doxygenなんかを使って、コメントを日本語ドキュメントとして
出力させたいときはやっぱり日本語が必要になる。
269:デフォルトの名無しさん
09/10/21 01:46:48
>>267
今時ソースコードにASCII文字以外をかけないってドンだけ遅れてるんだよwwww
270:デフォルトの名無しさん
09/10/21 02:04:38
>>269
書けないんじゃなくて、方針として書かないといいたいんだと思う。
でも個人的には、人に押し付けることではない気がする。
それにプロジェクトか何かに参加していて、日本語でコメントを書くのが
決まっていたらそうせざるを得ないし。
271:デフォルトの名無しさん
09/10/21 02:41:09
UTF-8やEUC-xx系はバイト数増える分だけいろいろ互換ではあるけどな。
URLリンク(nowsmart.s93.coreserver.jp)
272:デフォルトの名無しさん
09/10/21 03:00:12
Visual C++ の概念 : C/C++ プログラムのビルドコンパイラおよびリンカでの Unicode のサポート
URLリンク(msdn.microsoft.com)
・BOM (Byte Order Mark) 付き、または BOM なしの UTF-16 リトル エンディアン。
・BOM 付き、または BOM なしの UTF-16 ビッグ エンディアン。
・BOM 付きの UTF-8
273:デフォルトの名無しさん
09/10/21 03:09:26
gcc
URLリンク(wiki.monaos.org)
gcc-3.4からちゃんとiconvで変換するようになったようです。 gccの-finput-charsetを使うとソースの
文字コードが指定できます。何も指定しない場合はUTF-8として扱われます。
gcj
URLリンク(wiki.monaos.org)
274:デフォルトの名無しさん
09/10/21 03:13:47
UTF-16 and UTF-32 support in GCC added
URLリンク(blogs.oracle.com)
なんだこれは、あたらしく文字列型追加したのか
* 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:デフォルトの名無しさん
09/10/21 05:34:46
Why do you stay in wrong thread?
スレリンク(tech板)
276:デフォルトの名無しさん
09/10/21 10:33:50
>>268
文字列にASCII文字以外を書かないようにということじゃないでしょうか。
277:デフォルトの名無しさん
09/10/21 11:13:17
>>276
勘違いしてた。ごめん。
278:デフォルトの名無しさん
09/10/21 22:06:42
Windowsで64bitのQt Creatorで
32bitアプリのデバッグできている人いる?
さらにDebugging Helperまで正常動作している人いる?
一度32bitアプリのデバッグができた気がするんだけど、
Debugging Helperが正常に動かなかった。
もっかいやり直したら、32bitアプリのデバッグまで動かなくなった。
Linuxの場合はどうなってるんだろ?
279:デフォルトの名無しさん
09/10/21 22:27:10
32bitアプリのデバッグができた気がする
280:デフォルトの名無しさん
09/10/21 22:32:48
勘違いしてた。ごめん。
281:デフォルトの名無しさん
09/10/21 22:37:29
いいお。。。
282:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/22 02:19:55
>>282
ごめん。説明が足りなかった。あるいは間違っていた。
その前に確認。
>setStatusBar(event->x(), evetn->y());
は
mainWindow->setStatusBar(event->x(), evetn->y());
の間違いだよね。
284:283
09/10/22 02:21:19
>>283 のつづき
(説明)
通常、メインウインドウにはメニュー、ドックウィジット、ステータスバーのほかに、
中心となるウィジットを1つ配置し、その中にレイアウトクラスを使って複数のウィジットを配置する。
この中心となるウィジットのことをQtでは「セントラルウィジット」といっている。
フォームエディタのDesignerやQt Creatorの組込みのもので作成したMainWindowには、
デフォルトでセントラルウィジットとしてQWidgetが配置されていている。
よって、そのままImageViewを配置したのならば、このQWidgetが親ウィジットになる。
(こちらで確認した限り、このセントラルウィジットを取り替える方法が分からなかった。
見落としているような気がするけど。
ソースコードからならQMainWindow::setCentralWidet()でセットできる。)
これは、フォームエディタの右側に表示されるオブジェクトインスペクタとよばれる
クラス名やオブジェクトのレイアウトの状況が分かる部分をみれば分かる。
285:283
09/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
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/10/22 05:48:51
ごめん。間違えた。
qgraphicsitem_cast()が返すのは、そのクラスのtype()の値だった。
290:288
09/10/22 06:19:12
ごめん再訂正。やっぱりポインターのキャストだった。
CustomItem customItem = qgraphicsitem_cast<CustomItem*>(item);
if(customItem) {
//...
}
でいける。
291:デフォルトの名無しさん
09/10/22 06:19:43
QGraphicsItem *hoge = scene.itemAt(fuga);
QGraphicsItemから派生させたカスタムクラス *moge = (QGraphicsItemから派生させたカスタムクラス *)hoge;
292:288
09/10/22 06:22:50
本当にごめん。*が抜けていた。
CustomItem* customItem = qgraphicsitem_cast<CustomItem*>(item);
if(customItem) {
//...
}
293:デフォルトの名無しさん
09/10/22 06:31:04
>>291
従来のキャストだとキャストの失敗を確かめられないから少し不安な気がする。
やはり、qgraphicsitem_castを使った方がいいと思う。
もしくは、RTTIが使用できる最近のコンパイラーならdynamic_castを使った方がいいと思う。
294:287
09/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
とあり、どうも理解できません。よろしくお願いします。