【RAD統合環境】 Qt 総合スレ 6 【Win/Mac/Linux】at TECH
【RAD統合環境】 Qt 総合スレ 6 【Win/Mac/Linux】 - 暇つぶし2ch2:デフォルトの名無しさん
10/01/29 15:10:43
■リンク

・Qt Development Frameworks (Nokia社のQt公式サイト)
URLリンク(qt.nokia.com)

・SRA社(日本の代理店)の日本語で読める Qt 関連ドキュメント
URLリンク(www.sra.co.jp)

・Qt Users Forum Japan
URLリンク(qtusersforum.s2.zmx.jp)


■ライセンス関連まとめ

各ライセンスでの自作アプリのソース公開/頒布

Qtのライセンス   アプリのライセンス     Qtの頒布/(変更部分のソース公開)
GPL           GPL(ソース公開必須)      必須
LGPL         任意(ソース公開不要)      必須
商用          任意(ソース公開不要)      不要

*: LGPLは動的リンク時

実際には他にも条件(リバースエンジニアリング関係とか)あるので、
きちんとライセンスの条文を読むこと。

3:デフォルトの名無しさん
10/01/29 15:11:44
Windows ユーザー向け Tips

・プロジェクトのパスに日本語を入れちゃダメ
・日本語のソースコードは、MinGW版ならUTF-8、VC版ならSystem(Shift-JIS)
 プロジェクト作成後に「プロジェクト」タブの「エディタの設定」→「デフォルトの文字コード」を設定すると幸せになれる
・デバッグ出力などが文字化けする場合、プログラムの最初で文字コード変換設定をする
 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); //ソースの文字コードを指定("utf-8"や"Shift-JIS")
 QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); //同上
 qDebug() << "うまく表示できた?";
・MinGW版の配布時は mingwm10.dll も一緒に入れておく(public domain で配布上の制限はない)

■インストール方法:MinGW版Qt & Qt Creator

(1)「Qt SDK for Windows」をインストールすればOK
 URLリンク(qt.nokia.com)

■インストール方法:VisualC++版Qt & Qt Creator

MinGW版との違い:Phononが利用可能。VC版の方がいろいろ速いらしい

(1)「Microsoft Visual C++ 2008」(Express Edition 以上) をインストール
(2)「Microsoft Debugging Tools」をインストール(※Qt Creator上でデバッグする時に必要)
 URLリンク(www.microsoft.com)
(3)「Qt libraries for WIndows(VS 2008)」をインストール
 URLリンク(qt.nokia.com)
(4)「Qt Creator Binary for Windows」をインストール
 URLリンク(qt.nokia.com)
(5)環境変数PATHを設定(もともと入ってたパス;Qtインストールパス\bin)
(6)Qt Creator を起動して、「ツール」→「オプション」メニューで初期設定
 「Qt4」→「Qt Versions」を開いて自動検出された「PATH に含まれる Qt」をクリックし「MSVC バージョン」を 9.0 にする
 「デバッグヘルパ」が×印になっていれば「リビルド」ボタンをクリックしてリビルド(※)する
 (※)もし失敗したら「プロジェクト」→「ビルドして実行」→「nmake の代わりに jom を使用する」のチェックを外してみる

4:デフォルトの名無しさん
10/01/29 15:16:28
これもテンプレなのかな

Qt Creator 日本語化プロジェクト
Qt Creator を日本語化するプロジェクトです(非公式)
URLリンク(qt-creator-jp.sourceforge.jp)

5:デフォルトの名無しさん
10/01/29 16:41:31
次スレ前にすべりこみで質問です

シグナルをemitする時にnewしたデータを渡すのですが
あとで拡張する際にスロット側でdeleteするのを忘れそうで嫌です
あらかじめ、delete処理をするスロットを作ってconnectしておこう、と考えたのですが
qtはスロットを実行する順序を決めてないそうなので困っています
実行順序を決めるような機能はないでしょうか、あるいはそんなテクニックはないでしょうか
よろしくお願いします

6:デフォルトの名無しさん
10/01/29 17:03:13
>>1

前スレ >>986
index.parent().parent()
up_button() に渡された index と親ディレクトリの関係をよく考えよう。

あと、今後を考えると QDirModel よりも QFileSystemModel を使うほうがいいかも。
URLリンク(labs.trolltech.com)

>>
SLOT は基本的に接続された順番に呼び出される。
>If several slots are connected to one signal, the slots will be executed one after the other,
>in the order they have been connected, when the signal is emitted.
URLリンク(qt.nokia.com)

けれど、new して使わなくなったら消したいということなら
QSharedPointer を使うことを検討したほうがいいと思う。

7:デフォルトの名無しさん
10/01/29 18:58:54
>>5
QSharedPointer

8:デフォルトの名無しさん
10/01/29 19:36:06

>>6

すいません、今日なんとか自己解決しました

9:デフォルトの名無しさん
10/01/29 20:43:23
>>5
コピー可能なデータを渡すようにするのが安全です。
QStringやQPixmapなどはimplicit sharedなので、データ部分は共有して、
intやdoubleと同じ感覚で引渡せるので効率的かつ安全です。

10:デフォルトの名無しさん
10/01/30 08:08:26
>>5
転載感謝です

>>7
これならreference countがあるので
シグナルをemitする関数が終了しても解放されず
スロット終了時に自動で解放されるというわけですね

>>9
implicit sharedというのがあるんですね
Qtが一部クラスに限ってQSharedPointer的機能を予め使っているというイメージでしょうか?
引数を渡すときにreference countを増やすには、参照渡しではなく値渡しでおこない
値渡しで渡すと、コピーコンストラクタによってshallow copyが行われるため高速に実行することができ、
なおかつreference countが増えているのでemitする関数が終了しても実体は破棄されないという事ですか
QByteArrayもimplicit sharedらしいのでこれを使う事にしてみます

皆さんありがとうございました

11:デフォルトの名無しさん
10/01/31 14:08:04
qt4のドキュメント探していると、qt3のドキュメントが沢山出てくるわけですが
qt3のドキュメントはどこまで信用していいのですかね?
つまり、qt4でプログラミングをする時に、qt3のドキュメントをどこまで参照していいのか?と

12:デフォルトの名無しさん
10/01/31 14:28:22
>>1
>LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
> LGPL を選んだ場合は商用利用が可能です(いくつか制限あり)。

以前も話題になったけど、これは誤解を生む表現だから消した方が良いと思う。
GPL/LPGL と商用利用は直接的にリンクしている訳ではないからね。
「GPL を選んだ場合は商用利用が可能です(たくさん制限あり)」というだけで。

13:デフォルトの名無しさん
10/01/31 14:34:57
>>12
> 「GPL を選んだ場合は商用利用が可能です(たくさん制限あり)」というだけで。

はLGPLの誤りだよね。

で、どう誤解を生むの?
別にウソ書いてるわけじゃないからいいんじゃないの?
「LGPL を選んだ場合は商用利用も可能です(いくつか制限あり)」
にした方が良い程度の話だと思うが。


14:デフォルトの名無しさん
10/01/31 14:36:52
>>13
>はLGPLの誤りだよね。

違うよ。

15:デフォルトの名無しさん
10/01/31 15:20:29
>>13
> 別にウソ書いてるわけじゃないからいいんじゃないの?
いやウソ書いてるよ。


16:デフォルトの名無しさん
10/01/31 15:21:28
>>11
Qt3についての記述は、気にせず無視して問題ありません。
リファレンスマニュアル (URLリンク(doc.trolltech.com)) にQt3の記述があるのは、
Qt3 Support (URLリンク(doc.trolltech.com)) だけで、ここにある
クラスは、Qt3からQt4に移行する際に、一時的に使われるクラスで、Qt4で最初からプロ
グラムを書くならば、まったく使う必要がないからです。

17:デフォルトの名無しさん
10/01/31 15:23:15
>>13はGPLを知らなかったのか。。。

18:デフォルトの名無しさん
10/01/31 15:25:05
>>16
わかりました
親切な解説ありがとうございます

19:デフォルトの名無しさん
10/01/31 15:37:09
>>13
>で、どう誤解を生むの?

GPL だと商用利用してはいけないという誤解。

20:デフォルトの名無しさん
10/01/31 15:45:41
>13がフルボッコすぎるwww

21:13
10/01/31 16:32:39
スマソ。>>12の言ってる意味を勘違いしてた。
GPLでもLGPLでも、制限事項が違うだけで商用利用は両方とも可能だっつうこと
だったんだね。叩かないで~w

22:デフォルトの名無しさん
10/01/31 22:10:26
Qtで使われてるLGPLだとどんな制限があるんだ?

・Qtライブラリを利用しても、自分の書いたソースのライセンスは自由に設定できる
・Qtライブラリそのものに手を加えた場合は(ライブラリ以外の改造箇所も含め)全てのソースをLGPLで配布しなければならない
・Qtライブラリのヘッダファイルをincludeしたり、Qtライブラリ中のクラスを継承するなどは、Qtライブラリの改造とはみなされない
・LGPLであるQtライブラリを利用したこと、Qtライブラリのソースを入手できることを明記し、LGPLを添付しなければならない
・ディスクなどのメディアに入れてソフトウェアを配布している場合は、希望者がいた場合には(無償、あるいは多くとも実費(メディア代など)+手数料程度の金額で)Qtライブラリのソースを配布しなければならない
・ネットでのソフトウェア配布の場合は、ネットでの入手方法を明記しておけばよい

こんな感じ?

23:デフォルトの名無しさん
10/02/01 00:16:41
LPGA

24:デフォルトの名無しさん
10/02/01 04:21:57
>>12
「ひとことで言ってQtはいわゆる商用OKなの?」という点はQt入門者の多くが聞きたいだろうから、
削除するより注意書きを足す方がいいと思うな
もうちょっと正確性を期してこんな感じでどうだろう

・オープンソース版(Open-source version)
 LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
 LGPL を選んだ場合はソースコード非公開のままでの商用利用が可能です(いくつか制限あり)。
 ※正確には通常「LGPL+商用利用向きの例外条項」を選ぶことになります(Qtインストール先の「LGPL_EXCEPTION.txt」を参照)。
  ちなみにGPLでも商用利用が不可能というわけではありません、念のため。


25:デフォルトの名無しさん
10/02/01 04:30:44
>>22
動的リンクの場合の話だよね。自分の理解だとこういう感じ

著作権の表示と、LGPLライセンスのコピーの配布
・ドキュメントにQtの著作権表示を入れておく。またLGPLライセンスのコピーを配布物/販売物に含めておく
・Qtをリンクしたプログラムが実行時になんらかの著作権表示をする時は、
 Qtの著作権表示と上記LGPLライセンスのコピーの所在の表示もしなければならない

リバースエンジニアリングの許可
・正規ユーザーに対して、個人的な利用のための(Qtをリンクした)プログラムの改変とリバースエンジニアリング(解析)を禁じてはならない
 ※例えばユーザーが個人的なバックアップを行うためにコピープロテクト機能を外すことは、
  プロテクト機能がQtをリンクした実行バイナリに含まれるなら禁止できません。当然ですが不正コピーは禁止できます

Qtのバイナリの再配布に伴うソースコードの配布
・Qtの動的リンク用バイナリ(DLL等)を一緒に配布/販売した場合は、以下のどちらかを行う
 (1)Qtのソースコードを配布物/販売物に含めておく(※Qt4.6.1のVS2008版だと194MBですね)
 (2)少なくとも3年間は有効な書面として以下の旨の申し出を添える
  「希望者には(無償、あるいは多くとも実費(メディア代など)+手数料程度の金額で)改変したQtライブラリのソースコードを配布すること」
  ※参考までに、玄人指向の製品「玄箱」のGPLアプリのソースコード配布は1000円(税込)/振込手数料はユーザー負担みたいです

オマケ。Qt LGPL例外条項
・Qtのクラスを継承したりマクロやインライン関数等を利用することはQtのLGPLコードを含んだとはみなされない


26:デフォルトの名無しさん
10/02/01 12:02:30
商用利用と言っても、委託開発とパッケージ販売で違ってくると思うけどな。
不特定多数に「頒布」するのはGPL/LGPLの制限を受けるけど、
委託されてその顧客専用バージョンを開発するのはほとんど制限をうけないはず

27:デフォルトの名無しさん
10/02/01 12:04:34
「玄箱」のGPLアプリのソースコード配布
リバースエンジニアリングの許可

は、同じこといってるんだよね
フリーウェアで出してもソースの公開義務みたいのは発生するんだろうか・・・(謎

28:デフォルトの名無しさん
10/02/01 15:37:44
>>26
制限を受けないというより、委託の場合は二者間+Nokiaだけの話なので
二者が納得していてNokiaが気にしない/気づかない限りはGPL/LGPLを破っても事実上問題がおきないってことかと

ただし顧客専用バージョンのQtソースを顧客が欲しがった時に
契約や企業間の力関係を傘にきて突っぱねるような明らかなGPL/LGPL違反があると
もし内部告発がおきてネット等を巻き込んだ場合に社会倫理的な問題になると思う
Nokiaは訴訟を起こさないかも知れないけど、問題を解決するために契約を強く勧めるかも知れない
リスク回避するならソースを渡す準備がある旨を伝えるのが無難かと

29:デフォルトの名無しさん
10/02/01 17:02:28
難しいこと考えず素直にライセンス料払えば
何も問題ないような・・・

30:デフォルトの名無しさん
10/02/01 18:35:56
>>27
>委託されてその顧客専用バージョンを開発するのはほとんど制限をうけないはず
顧客と組織が別なら不特定多数への配布と同じ扱いです。

31:デフォルトの名無しさん
10/02/01 18:51:00
顧客が内部利用だけで第三者に配布しないのであればソースを要求できるのは
その顧客だけだから両者で同意がなされれば問題無いと言ってるんじゃないかな?

32:デフォルトの名無しさん
10/02/01 23:16:55
>内部利用だけで第三者

系列内で子会社孫会社、と解釈範囲が拡大するような
用途でも、内部利用だと言えそうだお(キリ

完全にインハウスでだけで使うツールなら問題なさそうだが
サード的な別組織に配布る段階で lgpl 発生すると思うの…

33:デフォルトの名無しさん
10/02/01 23:24:02
×別組織に配布る段階で lgpl
○別組織の人間が使用する段階で lgpl

というほうが正確か・・・

34:デフォルトの名無しさん
10/02/01 23:46:19
GPL(LGPLも含む)の規定では配布する側がソースを提示する義務を負う。
だからこの場合は顧客が子会社も含めてバイナリ配布して要求されれば
顧客がソースを渡さないといけない。
顧客がそれを理解していれば問題無い。

35:デフォルトの名無しさん
10/02/02 01:30:47
>>34
その言い回しはLGPLが必ずソースを要求するみたいに思われそう

LGPLを選択-ダイナミックリンク-未改変のQtのDLLを一緒に配布:Qtのインストーラーを渡す(>>25のケース)
LGPLを選択-ダイナミックリンク-改変したQtのDLLを一緒に配布:改変後のQtライブラリの完全なソースコードを渡す
LGPLを選択-スタティックリンク-未改変のQtのDLLを一緒に配布:プログラムをビルドできるオブジェクトコードまたはソースコード+Qtのインストーラーを渡す
LGPLを選択-スタティックリンク-改変したQtのDLLを一緒に配布:プログラムをビルドできるオブジェクトコードまたはソースコード+改変後のQtライブラリの完全なソースコードを渡す


36:デフォルトの名無しさん
10/02/02 01:44:29
だけどLとか関係無くGPLの名がついてたらアリの様に全てのソース出せと群がってくるんだぜ
反論したって無駄なんだぜ

37:デフォルトの名無しさん
10/02/02 05:51:51
そのためにライセンス規定文書を一緒に配布するんじゃないのか?

38:デフォルトの名無しさん
10/02/02 07:29:41
>>36
そんなやついねーよw

39:デフォルトの名無しさん
10/02/02 09:57:34
全ソースの冒頭に入れないと駄目なのかなあれ > ライセンス規定書
エントリポイントだけじゃ駄目ぽ?何かまちまちでよくわからんです・・・

40:デフォルトの名無しさん
10/02/02 10:44:53
ライセンスを書いたテキストファイルを置いておけばOK
ソースの先頭に書くかどうかはコーディングスタイルの問題
1ファイルだけ取り出してもライセンスを間違えないというメリットがある

41:デフォルトの名無しさん
10/02/02 19:48:07
QObject::connect(button, SIGNAL( clieked() ), &app, SLOT(quit()) );
これは、buttonインスタンスのcliecked()メソッド(シグナル)が
appインスタンスのquit()を呼び出しているってことでおk?

42:デフォルトの名無しさん
10/02/02 19:53:03
>>41
違う。
buttonのclicked()がappのquit()を呼び出しているのではなく
buttonのclicked()シグナルがemitされたら
appのquit()が(Qtに)呼び出されるように登録している。

43:デフォルトの名無しさん
10/02/02 20:57:58
>>42
それじゃ、もしもみたい内容だったならば単純にclieked()を実行して終わりってことなんですか?
clieked() {
 if( false ) {
  emit *
 }
}


44:デフォルトの名無しさん
10/02/02 22:08:45
>>43
そのレベルじゃ説明しきれないから下記ページでシグナル/スロットについて学んできて下さい。
URLリンク(doc.trolltech.com)

45:デフォルトの名無しさん
10/02/03 00:05:52
Qtのプログラムを作るときってどういう順番で作る?

まずQtとは関係のないコアの部分を組み立てて、その後QtでGUI周りを作る?

46:デフォルトの名無しさん
10/02/03 01:23:30
GUI も本質的には Qt と無関係だから
Qt Designer で .ui ファイル作って Load

47:デフォルトの名無しさん
10/02/03 10:09:22
どんなプログラムかにもよるのでケースバイケースだけど...

基本的にプログラムは「使ってもらう」ものなので,俺の場合はプログラムの顔である
GUI側からQt Creatorで作り始めて,先にGUIの動作確認をした上で段々中味(ボタン
をクリックしたときのスロットの中味とか)を埋めていくことが多い。中味を埋めるまでは
適当にメッセージボックスでも出るようにしておくとか,ただ何もしないだけにしておく
こともある。

ハードウェアの制御が絡んでいるような場合には,先ずその制御部分のクラスを作って
おいて,簡単なテストプログラム(GUIはデザインとか無視の超テキトー)を書いてテスト
しておくことが多いかな。それから本物のGUIを作って最後にドッキング。

48:デフォルトの名無しさん
10/02/03 11:58:54
>>45
Qt使う場合はデスクトップアプリしか作らんけども、
データ周り>GUI>MVCでいうコントローラに当たる部分
っていう順で作ってる。


49:デフォルトの名無しさん
10/02/03 12:03:55
>>48
つまり M -> V -> C の順ということですね
ありがとうございます

50:デフォルトの名無しさん
10/02/03 17:36:59
Mac で Qt 使ってる人に質問なんですが
Objective-C で Qt 使えるんですか?

51:デフォルトの名無しさん
10/02/03 20:04:40
Macユーザー関係ないような?
10年くらい前にObj-C Qtバインディングをやった人がいたみたいだけど今はもう無いらしいよ
Python、Ruby、Perl、C#のバインディングはすぐ見つかるけど
更新が活発でQt4.6にもついて行ってるのはPyQt4だけかな

52:デフォルトの名無しさん
10/02/03 20:25:40
>>50
Qt(C++)からObjective-Cなら使えるけどそれじゃダメ?

53:デフォルトの名無しさん
10/02/03 20:59:25
Objective-C++でいいならCocoaとQtを混ぜて使う記事が
URLリンク(el-tramo.be)

54:デフォルトの名無しさん
10/02/03 21:48:39
そこまでするなら wxWidget 系に行くか

java - swt, java - swing 系行くかのほうが
ぜったい楽だと思うの

55:デフォルトの名無しさん
10/02/03 21:51:33
URLリンク(www.harukaze.net)

mac だし

56:デフォルトの名無しさん
10/02/03 22:39:08
>>51
> Python、Ruby、Perl、C#のバインディングはすぐ見つかるけど

C#に関してkwsk

57:デフォルトの名無しさん
10/02/03 22:45:40
ggr C# Qt Bindings

58:デフォルトの名無しさん
10/02/03 23:36:02
>>57
ろくな日本語ソースがひっかからない(´・ω・`)

59:デフォルトの名無しさん
10/02/04 00:06:22
>>58
それはイバラの道だからではw

60:デフォルトの名無しさん
10/02/04 01:44:48
カレンダーコントロールというか
DatePicker みたいなもので
標準的なものはありますか?

61:デフォルトの名無しさん
10/02/04 01:48:09
QCalendarWidget

62:デフォルトの名無しさん
10/02/04 06:38:56
>>58
英語のソースでよいというのが大勢になって来たからではないか。

63:デフォルトの名無しさん
10/02/04 11:11:27
サンプルソースだけで何とかなるからなぁ

64:デフォルトの名無しさん
10/02/04 15:31:35
Qtで3Dバリバリのネットゲーを作れますか?
Windows向けにDirectXでやるか、マックやLinuxユーザーでも遊べるような環境を使うかで悩んでるんですが。

実行速度で言うと
 DirectX>Qt>Silverlight>AIR>JavaFX

で、対応するプラットフォームだと、
 JavaFX>Qt>AIR>Silverlight>[MSの壁]>DirectX

みたいな理解でok?

65:デフォルトの名無しさん
10/02/04 15:43:59
ok
作れます

次のかたどうぞ

66:デフォルトの名無しさん
10/02/04 18:21:54
Qtって速いの?

67:デフォルトの名無しさん
10/02/04 19:08:49
>>64
それだけよむとQt最強だな。

68:デフォルトの名無しさん
10/02/04 19:10:15
でもC++がちょっとアレな子だからなぁ

69:デフォルトの名無しさん
10/02/04 19:54:32
>>68
それをいうな。
Qtみたいなすごいものが作れるんだぞ。
立派な言語じゃないか。

70:デフォルトの名無しさん
10/02/04 21:31:40
そもそも手段と目的がごっちゃになってて
比較対象がおかしいと思うの・・・ > GUI の選択 と 言語の速さ

別に GUI ライブラリいらないよ > 3Dゲー

71:デフォルトの名無しさん
10/02/04 21:39:00
ネトゲだとチャット機能実装あたりに
少なくとも文字入力に関するライブラリは無いと困る気はする

72:デフォルトの名無しさん
10/02/04 23:19:47
>>68
C++みたいな猛獣を繋ぐ鎖としてはGUI以外でもQtは良い線いってると思うけどな。
いざとなれば鎖を離せるのが猛獣使いQtの強みの一つでもある。ただ自己責任で。

73:デフォルトの名無しさん
10/02/04 23:26:29
>>72
先生!
私の同僚が勝手に鎖を解き放ちました!


74:デフォルトの名無しさん
10/02/04 23:38:14
>>73
動物園から出さないようにお願いします

75:デフォルトの名無しさん
10/02/05 04:15:29
Qt のマクロは C++ なのに Objective-C っぽく見せてくれる側面はあるね

76:デフォルトの名無しさん
10/02/05 06:57:34
>>75
どういうことですか?

77:デフォルトの名無しさん
10/02/05 08:44:57
>>76
たぶんシグナルスロット機構のことじゃね
あんま知らないがCocoaは(C#も)シグナルスロットに似たデリゲートというのをよく使うらしい
マクロってよりqmakeの機能な気がするけど

78:デフォルトの名無しさん
10/02/05 10:18:01
moc

79:デフォルトの名無しさん
10/02/05 14:41:06
クラス名をみてるとどうしてもメロリンQとハイキングウォーキングQ太郎の顔がチラつくんですが、どうしたらいいですか?

80:デフォルトの名無しさん
10/02/05 14:44:10
>>79
メロリンQとハイキングウォーキングQ太郎を見たら
Qtがちらつくようになるまで修行しろ

81:デフォルトの名無しさん
10/02/05 14:56:25
>>80
がんばります!!!

82:デフォルトの名無しさん
10/02/05 15:40:27
なんでQuickTimeと紛らわしい名前にしたんだろう
検索のたびにうざいんだが

83:デフォルトの名無しさん
10/02/05 16:05:36
>>82
-QuickTimeと入れれば多少マシになる。

84:デフォルトの名無しさん
10/02/05 16:30:00
>>83
知らなかったぜ。
そうか、引き算すればいいのか。



85:デフォルトの名無しさん
10/02/05 18:59:05
あんまりかわらん

86:デフォルトの名無しさん
10/02/05 20:54:55
>>82
-QuickTime -twitter
検索ではいつも2つ除外してます

87:デフォルトの名無しさん
10/02/06 00:38:38
Qt Creatorって使い方覚えれば結構勝手が良さそうだな
ぼちぼちメニューも日本語化がすすんできたみたいだし

88:デフォルトの名無しさん
10/02/06 04:53:35
Win7、VS2008、Qt4.6の環境で、QProcess::startDetachedを使って
アプリケーションを引数付きで呼び出そうとしているのですが
引数の中に「"」が含まれていると「\」がつけられて「\"」になってアプリケーションに渡されてしまいます。

QProcess::startDetached(ExePath, QStringList() << "--foo=\"bar\""); // --foo="bar"を渡したいが、--foo=\"bar\"がわたってしまう

main関数のargvでは「\"」が「"」に変換された状態で取得できるようですが、
winmainのlpCmdLineやGetCommandLine APIでは「\"」のままなので
そのまま処理をしていると思われるWindowsアプリケーションが引数を処理できません。

QProcess::startDetached(ExePath + "--foo=\"\"bar\"\"");
でもやってみましたが今度は「"」が無くなるだけで
\"\"\"bar\"\"\"にしてもやはり「\"」が渡されてしまいます。

「\"」への変換なく「"」のまま渡すにはどうすればいいのでしょうか。

89:デフォルトの名無しさん
10/02/06 06:35:16
だれが\を付けてるのかをはっきりさせた方が良い

90:デフォルトの名無しさん
10/02/06 07:41:20
>>87
うん。慣れてくると結構いいよ。今までC++ Builder使ってたけど、「遜色ない」と
までは行かないものの、そんなに不満はない。

最初は各種の設定を.proファイルに手書きしなきゃならないのが「何だかなぁ」と
思ったけど、慣れてくるとGUIのチェックボックスやラジオボタンでいろいろ選択
して設定したりするより楽だと思うようになった。

翻訳はぼちぼちどころじゃなくて、ほぼ完全。翻訳されてないのはほんの数単語。

ちょっと戸惑うのは、レイアウト類の扱い。Qt Designerでも同じだと思うんだけど、
手書きでコード書いた場合とちょっと違う。実は隠れウィジットの上にレイアウト
が乗ってるので、レイアウトのサイズをマウスで変えられる(ように見える)。
しかもこの隠れウィジットのプロパティは一切変えられらない(表示されない)。
なので、「入門Qt4プログラミング」に書いてあるレイアウトの使い方とちょっと
雰囲気が変わる。

エディタは「余計なお世話」をかなりしてくれるので、設定で折り畳み機能とか
OFFにして使ってる。でも外部エディタはあまり使わずに済んでるから、結構
使いやすいのかも。

デバッガの起動時に時間がやたら掛かるのが難点かな...(VC++でcdbの
場合の話)。MinGW+gdbでは最近やってないからどうだったか忘れた。

91:デフォルトの名無しさん
10/02/06 07:51:49
>>88
QProcessが怪しいと思うが
とりあえずsystem()使ってみたらどうだろう

92:デフォルトの名無しさん
10/02/06 10:01:41
>>88
ほぼ同じケースで、結局解決してないのがあるね
URLリンク(www.qtcentre.org)

corelib\io\qprocess_win.cppの問題だと思うなこれ

93:デフォルトの名無しさん
10/02/06 19:38:36
CarbideでQt使ってる人いますか?
CreatorみたいQtのリファレンスを見たいんですが(F1とかで)
できないんでしょうか?

94:デフォルトの名無しさん
10/02/06 19:59:11
QDataStream に QString(QObject::trUtf8("ほげ")) を << で出力したものを保存後
そのファイルを開いて QDataStream から >> で QString s に読み込みました
これを cout << s; で出力すると ?? と文字化けします
下のように書き換えて
cout << s.toAscii.data();
再コンパイル後改めて読み込みしてもやっぱりだめです
QByteCode s と定義し直して
cout << s.data();
ますます意味不明です
どうすれば良いのか途方に暮れております
Windows Vista で mingw 版 Qt を使用 ソースは UTF-8 で保存しています

95:デフォルトの名無しさん
10/02/06 20:04:31
qPrintable( const QString & str )

96:デフォルトの名無しさん
10/02/06 20:10:40
wxスレで質問してたひとかな?

97:デフォルトの名無しさん
10/02/06 20:23:12
>>95
ありがとうございました

またまた質問で申し訳ありませんが
QMap<HOGE, FUGA> のインスタンス m を JSON っぽく qPrintable してくれるような関数かマクロってありますか?
m.toStdString()
m.toString()
m.toAscii().data()
qPrintable(m)
どれも無いみたいで・・・ orz

探すより iterator 回して実装した方が早いような気もしますが
もし既に便利なものあるなら使いたいです

98:デフォルトの名無しさん
10/02/06 20:25:07
お好きにどうぞ

99:デフォルトの名無しさん
10/02/06 20:26:17
>>97
> 探すより iterator 回して実装した方が早いような気もしますが
天才ですか!?
探すより早いなら実装しろよ



100:デフォルトの名無しさん
10/02/06 20:37:07
>>97 じゃないけど
QString pMap2Str(QMap<QString, int> &map)
{
QStringList sl;
QMapIterator<QString, int> i(map);
while(i.hasNext()){
i.next();
sl.append(QObject::tr("'%1': '%2'").arg(qPrintable(i.key())).arg(i.value()));
}
return QString(QObject::tr("{%1}").arg(sl.join(", ")));
}

こんな感じ?
templateでQMapの型を可変にする方法は知らん

101:デフォルトの名無しさん
10/02/06 20:40:33
iPhone用のアプリはQtで書けるんでしょうか?

102:デフォルトの名無しさん
10/02/06 20:42:13
>>100
ありがとうございました
参考にします

103:デフォルトの名無しさん
10/02/06 20:50:38
>>101
URLリンク(www.qt-iphone.com)

104:デフォルトの名無しさん
10/02/06 20:58:26
>>103
Thx!

105:デフォルトの名無しさん
10/02/06 21:12:21
Qtでもっさりiphoneアプリ

106:デフォルトの名無しさん
10/02/06 21:24:00
Qt iPhone は移植終わってないけどな。

107:デフォルトの名無しさん
10/02/06 21:36:08
Qt on android って今どんな感じ?

108:デフォルトの名無しさん
10/02/06 21:40:34
その前にQt on Dalvikが必要にならんか、それは

109:デフォルトの名無しさん
10/02/06 22:26:40
>>89,91,92
レスありがとうございます。
system関数を使うことで目的の動作を行うことができました。

110:デフォルトの名無しさん
10/02/07 00:41:44
NokiaなのにAndroidとかiPhoneも対応されるのかい?

111:デフォルトの名無しさん
10/02/07 00:53:44
オプソだから対応する人がいれば対応されるだろう・・・

112:デフォルトの名無しさん
10/02/07 02:11:03
ライセンス料ぼったくりのQualcomは倒産しろ

113:デフォルトの名無しさん
10/02/07 13:10:55
>>112
auも巻き添えになってNokiaに買収されるといい。

114:デフォルトの名無しさん
10/02/07 15:07:37
URLリンク(code.google.com)

115:デフォルトの名無しさん
10/02/07 15:45:51
>>114
ヲヲヲヲ!?w
これでSymbian、WMは公式で愛ポンと闇泥井戸と全部制覇か
これで本気出してC#からC++に移る勉強するw

116:デフォルトの名無しさん
10/02/07 17:41:45
>>115
> これで本気出してC#からC++に移る勉強するw

C#をマスターしている人間が、あらためてC++で学ぶようなことってあるか?

117:デフォルトの名無しさん
10/02/07 19:13:21
C#は窓でしか使えないじゃん

118:デフォルトの名無しさん
10/02/07 19:29:15
いやそういう意味じゃなくて、C#でオブジェクト指向言語を習得した人が
あらためてC++でオブジェクト指向言語を勉強し直す必要がありますか、って意味ね

119:デフォルトの名無しさん
10/02/07 19:40:52
じゃあ、C#できる人は全員C++マスターだね!!

120:デフォルトの名無しさん
10/02/07 19:48:50
>>119
思わず笑ってしまった

121:デフォルトの名無しさん
10/02/07 19:52:29
>>118
どうみてもC#の方が簡単(つか楽)なんですけど・・・

122:デフォルトの名無しさん
10/02/07 20:49:17
じゃあその簡単とやらのC#をデフォルト言語に採用してよ>Qt

123:デフォルトの名無しさん
10/02/07 21:00:11
>>118

124:デフォルトの名無しさん
10/02/07 21:03:40
>>122
C#は窓でしか使えないじゃん

125:デフォルトの名無しさん
10/02/07 22:07:50
んな~こったない

126:デフォルトの名無しさん
10/02/08 00:18:08
Qtに関していえば、QObjectの秀逸なポインタ管理のおかげで、
QObjectの中でQObject使う場合は自分でdeleteする必要ないんで、
ちょっとしたもの作るだけならガーベッジコレクションしてくれる
メモリ解放不要な言語とそう大きく変わらないんじゃないかなぁ。

QtはC++の機能を最大限に使いつつ、C++の面倒なところをユーザに押し付けないライブラリだと思ってる。

127:デフォルトの名無しさん
10/02/08 00:25:57
ってことはあれじゃね、GUIアプリを組むとき以外もQtって使えるってことじゃね?

128:デフォルトの名無しさん
10/02/08 00:34:51
うんそうだよ
それに気付いてからBoost捨てた

129:デフォルトの名無しさん
10/02/08 03:19:56
暗黙の共有というしくみがあるのは分かったのですが
QString str1 = "hoge";
QString str2 = str1;
のあと
str2[1] = 'a';
を実行すると Copy on Write が発動して
str2 が "hage" になっても str1 は "hoge" のままというのとは逆に
あえて
str1 が "hage"
になって欲しいときはどうすれば良いのでしょうか?

130:デフォルトの名無しさん
10/02/08 04:39:51
参照にすればいいんじゃね?

131:デフォルトの名無しさん
10/02/08 06:05:20
>>94
QApplication app(argc, argv);
のあとに
QTextCodec::setCodecForCStrings(QTextCode::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
を書き足す

132:デフォルトの名無しさん
10/02/08 11:43:00
>>127
qdbusはQt使ったコンソールアプリだな。
コンソールアプリケーション作るときはQApplicationじゃなくQCoreApplication使うらしい。

133:デフォルトの名無しさん
10/02/08 16:19:00
>>131
訂正
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));


134:デフォルトの名無しさん
10/02/08 16:47:14
>>130
やってみます
ありがとうございました!!

135:デフォルトの名無しさん
10/02/08 20:40:51
std::coutに相当する機能を教えてください

136:デフォルトの名無しさん
10/02/08 20:49:28
stdout 用に作られているインスタンスはないので下記のようにして作る。
QTextStream cout(stdout, QIODevice::WriteOnly);

137:135
10/02/08 20:52:19
>>136
ありがとうございます

138:デフォルトの名無しさん
10/02/08 20:54:30
qDebug()を使ってみたのですが何も出力されません
なにかあらかじめ設定しないといけないモードとかあるのでしょうか?

139:デフォルトの名無しさん
10/02/08 21:10:28
URLリンク(www.kde.gr.jp)
Windows を使っていて、コマンドラインからこのアプリケーションを実行したときに
qDebug() の出力を見ることができるようにしたい場合、
アプリケーションをコンソールの設定でビルドする必要があります。
Windows で Make ファイルをこの設定にするには、CONFIG に console を追加します。
Windows で実行されていて、かつ CONFIG にすでに debug がある場合にのみ
CONFIG を追加したい場合があるかもしれません。
このような場合、2 つのスコープをネストさせて使います。
まず 1 つのスコープを作成し、その中にもう 1 つスコープを作成します。
そして 2 つのスコープの中に設定を書きます。例えば :

win32 {
debug {
CONFIG += console
}
}


140:デフォルトの名無しさん
10/02/08 21:22:42
>>139
できました
ありがとうございます

なぜかよく分かりませんが std::cout も使えるようになりました
本当にありがとうございました


141:デフォルトの名無しさん
10/02/08 21:38:58
前スレ
959 デフォルトの名無しさん [sage] 2010/01/26(火) 15:22:56 ID: Be:
ソースファイルのエンコードが"で囲んだ文字列リテラルに影響するため、
Qtに文字列を渡すには、一度文字コードを変換する処理を挟まなければならない。

例えばutf-8のソースファイル内で文字列リテラルにマルチバイト文字が含まれている場合、
そのままでは文字化けしてしまうので、QString::fromUtf8()などの変換メソッドを通す必要がある。

以下のサンプル(ソースはutf-8)を実行すると、Utf8の変換メソッドを通した文字列以外は文字化けする。
変換メソッドを通すのが面倒な場合は、コメント部分を有効にすれば良い。
直接書いた他の文字列が文字化けすることがなくなる。

//QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
//QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
const char* cptr = "ffあ";
QString qs = "ffあ";
QString qs_fromUtf8 = QString::fromUtf8("ffあ");
qDebug() << cptr;
qDebug() << qs;
qDebug() << qs_fromUtf8;
qDebug() << tr("ffあ");
qDebug() << trUtf8("ffあ");

と試した限りでは以上のように理解したけどどうでしょ。

// Qt Creator 作成の新規ファイルの文字コードがSystemから変えられないのはどうにかならんかな
// プロジェクト設定のデフォルトの文字コードはなんの意味があんねん

142:デフォルトの名無しさん
10/02/08 21:49:08
こちら Qt 4.5.1 mingw 版 ソースは UTF-8 で保存
Windows Vista のコマンドプロンプトで make & 実行

QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
しておいて

QString msg(QObject::tr("テスト")); // ソースは UTF-8 QString msg は UCS2 ?
std::cout << qPrintable(msg) << std::endl; // SJIS で出力された
qDebug() << qPrintable(msg); // SJIS で出力された
qDebug("%s", qPrintable(msg)); // ??に化けている(デコードが変?)

もしかして qDebug の中で変なことやってる?

143:デフォルトの名無しさん
10/02/08 22:01:35
上の続き

qDebug() << msg; // "二重引用符で囲まれてSJISで出力された"

string s = msg.toStdString(); // setCodecForCStrings() で文字化け回避
std::cout << s << std::endl; // SJIS で出力された
qDebug() << s.c_str(); // SJIS で出力された
qDebug("%s", s.c_str()); // ??に化けている(デコードが変?)


144:デフォルトの名無しさん
10/02/08 22:57:13
>>142-143
qDebug(fmt, ...);
の場合、渡す文字列はutf8固定。
(ちなみに、fmtはLatin1固定)
QString::sprintf() を内部で使っているため。
URLリンク(doc.trolltech.com)

qDebug("%s", msg.toUtf8().constData());
としてみると動かないかな。

145:デフォルトの名無しさん
10/02/09 01:12:11
動きました
ありがとうございました

146:デフォルトの名無しさん
10/02/09 01:49:36
どっかのサイトでqDebugは日本語使えないって書いてあったのを見た気がするが都市伝説だったのか

147:デフォルトの名無しさん
10/02/09 03:19:38
Qt CreatorってVisual Studioみたいに入力補完とかしてくれる?
たとえばQtのクラス名を補完してくれたり、あるいは自作のクラス、
それに付随するフィールドや関数を補完してくれたりする?

148:デフォルトの名無しさん
10/02/09 03:31:24
する

149:デフォルトの名無しさん
10/02/09 03:36:31
お前は2chよりどっかのわけのわからんサイトを信用するのか

150:デフォルトの名無しさん
10/02/09 03:54:03
Python に eric4 っていう IDE があるんだけど
これって Qt4 の作者と同じ人の作ったもの?

151:デフォルトの名無しさん
10/02/09 03:55:13
>>148
thxノシ

つ~かそれだったらさ、C++のプログラム組むのにわざわざ金出してVS買うよりも
フリーのQt Creatorを使った方がよくね?

152:デフォルトの名無しさん
10/02/09 04:19:32
>>146
このスレでも前スレのテンプレまではqDebugで日本語ムリってなってたぞ

153:デフォルトの名無しさん
10/02/09 05:20:55
>>152
ほんとだ
記憶違いかと思ってたけど安心した

結局 >>144 で fmt は Latin1 固定ってなってるから
qDebug("日本語 %s %s ほげ", QObject::tr("ふが").toUtf8().constData(), QObject::tr("はげ").toUtf8().constData());
はだめで
qDebug("%s %s %s %s", QObject::tr("日本語").toUtf8().constData(), QObject::tr("ふが").toUtf8().constData(), QObject::tr("はげ").toUtf8().constData(), QObject::tr("ほげ").toUtf8().constData());
なら OK ってことだぬ

154:デフォルトの名無しさん
10/02/09 06:00:36
>>151
動けばいいってんならその考え方でOK

155:デフォルトの名無しさん
10/02/09 06:10:45
>>147
Qt Creatorの補完機能は結構優れものだと思う。

156:デフォルトの名無しさん
10/02/09 06:50:02
Visual C++の奴よりもよくできてるよな。
補完が動かなかったらコードミスを疑うようになるレベル

157:デフォルトの名無しさん
10/02/09 09:23:04
>>155
eclipse版も同レベル?

158:155
10/02/09 11:05:18
使ってないからわからない。使ってる人ヨロシク。

159:デフォルトの名無しさん
10/02/09 11:24:48
>>157
eclipse で使う場合は eclipse が元々持っている補完機能を使うことになる。
SIGNAL や SLOT マクロの中を補完できないので Qt で書く場合には
個人的には Creator の方が楽。

160:デフォルトの名無しさん
10/02/09 20:28:59
Qtと関係なくC++を勉強する人にもQt Creatorは実はおぬぬめじゃね?

161:デフォルトの名無しさん
10/02/09 20:41:36
まじか。
Qt Creatorすげぇ。


162:デフォルトの名無しさん
10/02/09 23:40:44
QtCreator上のデバッグって
なんかウインドウ上部に大きさ変えられないデバッガ出力があるんだが
下にもコンソールあるし邪魔くさくね?
あれ消せないんだろか

163:デフォルトの名無しさん
10/02/10 00:51:30
>>160
そうかい?
基本的なC++から勉強したいからCDTでやってるが
いきなりマクロだらけのOtからだとキツイw

164:デフォルトの名無しさん
10/02/10 00:59:49
Qtはどんどん新機能が付いて更新が楽しいわ

165:デフォルトの名無しさん
10/02/10 01:09:05
これはすごいと思った

166:デフォルトの名無しさん
10/02/10 01:09:45

YouTube - Qt Widgets enter the third dimension: WolfenQt
URLリンク(www.youtube.com)

167:デフォルトの名無しさん
10/02/10 01:16:51
>>163
キツくないよ
楽だろ
そりゃマクロのせいで元々のC/C++の機能かQtの機能かの区別がわからないひとは
あとで知識の再整理が必要になるだけで
今後もQtしか使わないかもしれない訳で困ることじゃない

168:デフォルトの名無しさん
10/02/10 01:19:12
>>165-166
すまんが使い道が思い浮かばん

169:デフォルトの名無しさん
10/02/10 01:31:14
>>166
それかw
すごいとは思うがゲーム以外の何で役に立つのか分からん。

170:デフォルトの名無しさん
10/02/10 01:42:47
単純に技術としてすごいと思った

171:デフォルトの名無しさん
10/02/10 02:00:28
そろそろカウボーイビバップみたいなネットブラウズさせてくれ

172:デフォルトの名無しさん
10/02/10 16:14:57
>>166
すげぇ

ところで、株価データ
2003-04-23,11:23:11,43,33,44,22
みたいなデータを読み取りたいんだけど、
QTextStreamのデリミタを『,』に変えられない?
それかscanf的なものはない?



173:デフォルトの名無しさん
10/02/10 17:11:45
QString::split() でわけるとか
QRegExp を使うとか。

174:デフォルトの名無しさん
10/02/10 21:03:44
コンソールアプリで日本語出力しようとして困ったので調べてみた。
結果から言うとUTF-8のソースファイルはでも日本語出力可能。

----------------------------------------------
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));

QTextCodec *codec = QTextCodec::codecForLocale();
qDebug() << codec->name();
qDebug() << "1:あああああ";

printf(codec->makeEncoder()->fromUnicode("2:いいいいい\n"));
printf(QString("3:ううううう\n").toLocal8Bit());
printf("4:えええええ\n");

QTextStream out(stdout);
out << QString("5:おおおおお") << endl;
out << QTranslator::tr("6:かかかかか") << endl;
out << "7:ききききき" << endl;
----------------------------------------------

printf()は直での文字リテラル指定はだめ。
QString()やtr()で文字列を囲むなりして、Qtの変換を通さないとダメ。


175:デフォルトの名無しさん
10/02/10 21:14:17
tr()使えよ

176:デフォルトの名無しさん
10/02/10 21:17:32
QTextStream out(stdout);
out.setCodec("UTF-8");

177:デフォルトの名無しさん
10/02/10 21:56:20
テキストデータを一行ずつ保存する関数 WriteLine() があるけど
これを使ってテキストデータを保存するとき、プラットフォームによって
生成されるテキストデータに違いって生じる?

WindowsやUnixやMacで改行に違いがあるって聞いたけど
Qtはそこのところどう対処しているんだろう?

178:デフォルトの名無しさん
10/02/11 00:02:35
やってみよう

179:デフォルトの名無しさん
10/02/11 00:06:51
やりたいけどLinuxしか持ってないんだよな

180:デフォルトの名無しさん
10/02/11 00:07:29
>>177
WriteLineってざっと探しても見つからないんだが、どこの関数?
それはともかく、改行コードって自分で文字列に埋め込むもんだと思うんだが。

181:デフォルトの名無しさん
10/02/11 00:13:03
Python とかだと \n の扱いを LF にするか CRLF にするか選べるよね
CR は論外として

182:デフォルトの名無しさん
10/02/11 00:13:57
tr()使えよ

183:デフォルトの名無しさん
10/02/11 01:00:43
>>180
C#と勘違いしてたスマソ・・・

184:デフォルトの名無しさん
10/02/11 01:19:58
QIODevice::Text 付きでopenすると、"\n"の出力が Unix系では"\n"のまま
Windowsでは"\r\n"に変換される。入力なら逆。
どちらの環境でも同じ改行形式にするなら QIODevce::Textを付けずに
"\n","\r\n"を明示すればいい。

185:デフォルトの名無しさん
10/02/11 03:41:57
>>184
ありがとう。
やっぱ同じQtソースでも動かすプラットフォームによって生成されるテキストファイルに
違いが生じてきたりしちゃうんだね。

186:デフォルトの名無しさん
10/02/11 04:29:15
51のC#バインディングって "Qyoto" って奴か
見た目は悪くない
URLリンク(zetcode.com)

使い物になるならいいかもな

187:デフォルトの名無しさん
10/02/11 06:18:54
くょーと?

京都?

188:デフォルトの名無しさん
10/02/11 09:02:58
>FAQ:
>
> 1. After compiling and installing qyoto when I try to compile a program I get this error:
>** (/usr/lib/mono/1.0/mcs.exe:18770): WARNING **: The class System.Collections.Generic.List`1 could not be loaded, used in mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
>
>This is because qyoto uses .NET 2.0 features only found with the gmcs compiler. Please use gmcs instead of mcs.

URLリンク(ekarchive.elikirk.com)

古いほうのページをみるとわかりやすいけど
gmcs でないと動かない

189:デフォルトの名無しさん
10/02/11 10:09:42
Ubuntu9.10で、Creator1.2.1使ってますが
同時にGEditeなど他のエディタを開いてコピペにて、Creatorに戻って
別のコピペをしても、前のコピーが残ったままでCreatorを一度終了するまで
正常にならナインだけど、
1.3.1では改善されてる?
誰かしらない?


190:デフォルトの名無しさん
10/02/11 10:26:14
>>185
いや同じにもできるし、プラットフォームに合せて変えることもできるということ

191:デフォルトの名無しさん
10/02/11 10:26:41
>>185
いやならバイナリで作るでしょ
コンソールに出力したときだってプラットフォームによってエンコード変わっちゃうんだし

192:デフォルトの名無しさん
10/02/11 10:47:29
>>186
やっぱC#はエレガントでいいなw

193:デフォルトの名無しさん
10/02/11 12:09:55
むしろQtを使った場合 C++ と C# の違いがほとんど感じられない気がする

194:デフォルトの名無しさん
10/02/11 12:34:59
C#なら.netのクラスを使える。これは非常に大きな違い。
あとWindowsじゃないとまともに動かない所とか。
Monoってどこまで.Netに追いついてたっけ?

195:デフォルトの名無しさん
10/02/11 12:38:48
クロスプラットフォームのフレームワークを
わざわざMS固有の言語で使うなんて馬鹿

196:デフォルトの名無しさん
10/02/11 13:23:50
>>193
LINQがあるじゃないか!!
・・・と思ったら2.0限定なのか

確かにQtでC++の面倒なところが隠蔽されるし
ライブラリも遜色ないんで、あんま変わんないかもね

>>194
gmcs限定ってところで、Windows云々は意味なしだね

> Monoってどこまで.Netに追いついてたっけ?
URLリンク(www.mono-project.com)

俺も↑のサイトで見てついさっき知ったんだけど
monoってREPLが付属してるんだね
REPL目当てでWindowsに入れてもいいかもしれない

197:デフォルトの名無しさん
10/02/11 13:25:31
ネイティブコードを吐かせてこそ意味がある

198:デフォルトの名無しさん
10/02/11 15:55:43
iPhone向けMonoがネイティブを吐くんだよな
ただ、MacOS必要なのとツールが優良なのがネック

199:デフォルトの名無しさん
10/02/11 17:07:06
WMターゲットで開発するときって結局VS付属のWM用コンパイラが必要なんだよね?

200:デフォルトの名無しさん
10/02/11 18:32:45
CeGCC が使える
Qt for Windows CE がCeGCCでコンパイルできるかは知らないが

201:デフォルトの名無しさん
10/02/11 21:06:25
>>196
REPL目当てならipython+PyQtって手もある
Pythonxyが全部まとめて入ってておすすめ

202:デフォルトの名無しさん
10/02/11 21:09:48
C++で分割ソースをコンパイルするときは、まず各.cppファイルをコンパイルしてオブジェクトファイルを生成し、
できたオブジェクトファイルを最後にリンケージするという手順が必要なわけだけど、それをQtを使って
プログラミングするとなるとその手順はどうなるの?

203:デフォルトの名無しさん
10/02/11 21:11:39
qmakeがMakefileを自動生成するから
そこら辺はあまり気にしなくていい

204:デフォルトの名無しさん
10/02/11 21:15:44
はじめてQtを入れて触り始めています。
Qt creatorの完成度が高くて驚きました。
ただビルドに時間がすごく掛かるんですが何か間違っているんでしょうか?
hello worldだけでビルドに数十秒もかかっています。
使っているのはWindowsのmingw32版です。

205:デフォルトの名無しさん
10/02/11 21:35:25
>>202
同じ
というか Qt だと moc とか uic とかの手順も増える
しかし >>203 の言うとおりだから気にすんな

206:デフォルトの名無しさん
10/02/11 21:36:46
>>204
PC のスペックくらい書け

207:デフォルトの名無しさん
10/02/11 22:00:27
>>202
$ qmake -project
$ qmake
$ make
終わり

208:デフォルトの名無しさん
10/02/11 22:03:39
まぁしかし
なんでもおまかせでうまくいくのは最初のうちだけなんだよな

209:デフォルトの名無しさん
10/02/11 22:17:42
>>206
ごめんなさい。Core 2 Duo P8800 + Windows 7です。

210:デフォルトの名無しさん
10/02/11 22:33:12
Qtの初回ビルドは時間かかるね
普段のビルド(ソースファイル2~3個修正したとか、UIだけいじったとか)ならすぐ終わるんじゃない?

211:デフォルトの名無しさん
10/02/11 22:33:44
ちょっとお聞きしたいのですが
qtやるならc++から勉強したほうがよいですか?
それともqtプログラミングの本かって触りながらやってもいける感じでしょうか
fortran畑なのですがguiプログラミングやる必要がでてきていろいろ探しているのですが
すいませんがよろしくお願いします

212:デフォルトの名無しさん
10/02/11 22:34:11
書いてるコードの種類にも寄るような気はするが
xtal をコンパイルboost呼び出しお茶を飲むような系統なら
時間はかかっても不思議でないし・・・

213:デフォルトの名無しさん
10/02/11 22:37:23
>hello worldだけでビルドに数十秒もかかっています。

ごめんよく読んでなかったわorz

214:デフォルトの名無しさん
10/02/11 22:41:23
>>211
URLリンク(zetcode.com)

ここ見ながら自分に合いそうなわかりやすそうだと
思うのから探してみるとか・・・

215:デフォルトの名無しさん
10/02/11 22:42:28
>>211
QtCreatorインストールしてチュートリアルとかのソース見て
分かれば勉強する必要ないんじゃない?
ちなみにおいらは「ロベールのC++教室」でC++から勉強中

216:デフォルトの名無しさん
10/02/11 22:43:34
>>207
> $ qmake -project
> $ qmake
> $ make
> 終わり

頑張ればこれも一つにまとめられそうなのになぜか公式はそうしなかった

217:デフォルトの名無しさん
10/02/11 22:51:28
>>211
FortranからならQtを使うのにC++の勉強は絶対必要だと思うよ。
クラスの概念とか、ポインタとか参照とか...いろいろ知らないと難しい。
Qtの参考書だけでは済まない。
これはwxWidgetsだろうがC++ Builderだろうが同じこと。

実行速度とか余り関係なくて簡単に余り凝ってないGUIプログラムを作ってみる
のなら、Python+EasyGuiあたりから始めてみたら?

218:デフォルトの名無しさん
10/02/11 22:56:26
一年ぶりにうpでーとしたら、QPainterあたりの実装が変わって
気軽にドット打てなくなってたorz
drawPoint()では1x1サイズのドットしか描けね。泣けた。
代わりにfillRect()使うことにしたがマンドクセ('A`)

219:デフォルトの名無しさん
10/02/11 23:00:09
いや、チュートリアルだけでも結構行ける
とりあえずやってみれば?
言語でわかんないところが出てきたら
その都度ググればいいだけのこと

220:デフォルトの名無しさん
10/02/11 23:09:49
>>209
プリコンパイルド・ヘッダー使ってみたら?

URLリンク(qt.nokia.com)

VCでnmakeじゃないと使えない風に読めるけど、実際にはjomでも大丈夫だし、
コンパイラをMinGW gccにしてmingw32-makeでも大丈夫だったよ。

221:デフォルトの名無しさん
10/02/11 23:12:17
>>219
甘いんじゃない?
ググってばかりでなかなか先に進まず、そのうちイヤになってくる可能性大。

222:デフォルトの名無しさん
10/02/11 23:19:27
QStringとかは重要なクラスなので、暗黙的に#includeしてくれるっぽいですね
他にどんなクラスが、暗黙的な#includeをされているんですか?

223:デフォルトの名無しさん
10/02/11 23:26:00
QtCoreのなかのモジュール。QStringもそう。

224:デフォルトの名無しさん
10/02/11 23:29:51
>>214,215,217
ありがとうございます。とりあえずインストールして触ってみます
土日に紹介していただいた本も立ち読みしてみます
c++ってメジャーっぽいので覚えておいて損もなさそうなので、
これを機会に勉強してみようとも思います
ありがとうございました

225:デフォルトの名無しさん
10/02/11 23:32:26
>>211
URLリンク(www.harukaze.net)

数値計算畑だと wx 系のほうが手取り早いと
思うんだが何で c++ で組みたいの?という疑問も

226:デフォルトの名無しさん
10/02/11 23:34:01
>>214

URLリンク(zetcode.com)

コンソールアプリもQtのライブラリ使うとこんなに簡単になるんだな。
ちょっとしたC++のプログラムを書く際もQtを積極的に活用した方がいいんじゃね?

227:デフォルトの名無しさん
10/02/11 23:37:29
内部で速度が要求される部分 C++
ガワの部分は python , ruby などで

みたいのほうがメンテは楽だと思うぞ
適材適所使い分けりゃいいのよ… C++ +α

228:デフォルトの名無しさん
10/02/11 23:40:50
>>216
proファイルはあとから手書きで書き換えるから
qmake -project と qmake がくっついてると困るわ

229:222
10/02/11 23:48:23
>>223
Qt creatorでプロジェクトを作る時に、どれをインポートするかって質問されるじゃん
あれでチェックすると暗黙的に#includeしてくれるの
それとも、Qt Coreだけなの?

230:デフォルトの名無しさん
10/02/12 00:00:16
もちろんカリカリに組んだらC++よりCが速くなる可能性はあるが
メモリ潤沢という前提ならC++の方が速いものができることが多いな

231:デフォルトの名無しさん
10/02/12 00:02:21
>>C++よりCが速くなる
例えばどんなコードで?

232:デフォルトの名無しさん
10/02/12 00:13:30
URLリンク(kagamikohime.blog118.fc2.com)
URLリンク(d.hatena.ne.jp)

pyqt と wxpython で作られた mmdモデルビューワ
内部実装はC++の事例

というかゲーム畑とか物理演算とかはやっぱりC++で組まれることは多いやね・・・過去の資産もあるし

233:デフォルトの名無しさん
10/02/12 00:29:16
>>232
>pythonにしたおかげでOpenGL部分はわりとさくさくだが、SJISとUTF-8の混在が面倒くさいことに。
慣れてないとこうなる例

234:デフォルトの名無しさん
10/02/12 00:30:19
>>216
俺は別ファイルに追記する分を書いて、シェルスクリプトでproファイルとくっつけてmakeまでやらせてる。

235:デフォルトの名無しさん
10/02/12 00:31:45
>>232
URLリンク(www.nicovideo.jp)

236:デフォルトの名無しさん
10/02/12 00:43:29
>>235
>使用言語:C++(DXライブラリ)

よしDXライブラリだ!
ホビーユースでも C++ は利用され(ry

237:デフォルトの名無しさん
10/02/12 00:44:46
CよりC++の方が遅いというほうこそ理解できん。
どちらだってポインタ使えるわけだし。

238:デフォルトの名無しさん
10/02/12 00:45:38
>>237
クラス作るとCと比較したときに色々と見えない処理が入るからじゃ?

239:デフォルトの名無しさん
10/02/12 00:47:47
ライブラリのリンクは C の方が速いと思われ
プロセスの起動も C の方が速いと思われ

240:デフォルトの名無しさん
10/02/12 01:00:35
アホは無理してレスしなくていいと思われ

241:sage
10/02/12 01:09:37
QActionにicon入れるとメモリリーク起こすんだけど。

242:デフォルトの名無しさん
10/02/12 01:43:15
C++は最悪C言語の95%程度のロスに抑えるように設計されている


ってドエライ人が言ってた

243:デフォルトの名無しさん
10/02/12 01:54:43
>>237
ある処理を、C++の機能を使って「エレガントに」実装した時の実行速度と、
Cでカリカリ実装した時の実行速度の、一般的な違いのことだと思うよ。
同じように書いたものには勿論そんな違いは無いし、一つ一つ見ていけばqsortとsortみたいな
逆になりうる例もあるし、とりあえずそんな厳密な優劣の話ってわけではない、はず。

244:デフォルトの名無しさん
10/02/12 02:12:44
>>220
ありがとうございます。
プリコンパイルヘッダー、gccでも使えるんですね。
あとで試してみます。

245:デフォルトの名無しさん
10/02/12 02:20:03
vcのコンパイラだと何も設定しなくても速いな

246:デフォルトの名無しさん
10/02/12 03:33:24
Qt Creatorの拡張がしたいけど
どうやればいいんだろう?

247:デフォルトの名無しさん
10/02/12 03:47:36
「入門Qt4プログラミング」に書いてある

248:デフォルトの名無しさん
10/02/12 06:38:55
       ∧∧   コイヤァァァァ!!
       (д´* )
       (⊃⌒*⌒⊂)
        /__ノωヽ__)

249:デフォルトの名無しさん
10/02/12 07:56:34
              __j、               ___
   _人_ _   __く>ー} i⌒'⌒jム、        ´      `丶
 ̄ `Y´   ≦(⌒o くcぅ ~  r'r‐(_,.ィ   ./::/::.::.::.::.::.::.::.\::.::.\  ういはるー ういはるー
    |    >ィ(.人ノ7:.:.:.}个ー'r ゚ 、)ム  /::/::.::.:/:|::.::.::.::.::.::ヽ::.::.:ヽ
    十 工ア(ノ)′/....../...|.. ヽ`弋人く  '::.:|i::.i::.j| |::.ヽ :|i:.::.::|::(V゙ハ
        V:/:.:./:斗{=ミ/}i_ハ__ハ小:.i:ムr‐f’. i::.::|i::.ト八|\j斗\::|::(ノ{):|   ういはるー ういはるー
      //{:.:.:|!/、__ミ′  厂`ト}.:i|:.:.},、》. |::.::|iY-=o=-    .|:.::j|::.::|
   i     }小 :::}7 (゚) .. (゚) T:.:..ハ:{.  |:.:リハ    -=o=- .|/)::│
 _ 人 _ ノ/:.∧{^         リ:./:. :.′. ∨|::.::   __   .,_ イ::.::.|
  `Y´ |フ´ヘ.__i  'ー=三=-'  '^}:/{:.ト{    | i人  | .::::/.| /::.::|::.::.:|
   l  l     八          '_人{.    |::∨ :.:.しw/ノイ::/::.i|::.::.:|
  ― ―'フ.:\      .イ´         /⌒ ∪  | ⌒\:.:|
.     |    ⌒/{ノ> --、<:从_      / 人  }  | ノ゙\ \ ズチュ
            `ーァ      . ̄ニ──ー-v′ ノ/ / /   
             / 、 '''  .  ;;   :::  . ;;;   く   ⊆/
              {   |              ;;;       \  ) ) )
             |   {    r、 ;;; ::: . ;; .  .        | ノ   
            ,ノ   〉   { `ー──ァ―‐r‐   ,ヽ )   ズチュ
            (    (   ノ        {   {   r′l /     
             `ー= `ー='        (⌒ (⌒  )ノ   )

250:デフォルトの名無しさん
10/02/12 16:01:14
Qtで作成したソフトにヘルプ機能を持たせようとしてるんですが,ToolTipやWhatsThisでは機能不足
だし,かと言ってQtの本格的なヘルプシステムでやろうとするとQt Assistantをカスタマイズしたり
起動させたりしなければならず大袈裟なので,HTMLでヘルプを作っておいて,ブラウザに表示させる
ことを考えています。

Windowsだけなら,WIN32 APIのShellExecute()を使って.htmlファイルの関連付け起動をさせれば
可能なのはわかっていますが,これと同じようなことをQtの世界の中でやる方法があったら教えて
ください。要するに,Qtで"なんたら.html"を指定してブラウザを起動して表示させる方法があれば
知りたいのです。

ちなみにLinux等他のプラットフォームのことは殆ど知りませんが,Windows上で作ったQtの
プログラムのソースをできるだけそのままで他のプラットフォームでも動かせるようにしておきたい
ということなんです。

よろしくお願いします。

251:デフォルトの名無しさん
10/02/12 16:13:10
>>250
Assistant をカスタマイズしなくても Qt Help モジュールが使えるはず。
URLリンク(qt.nokia.com)
URLリンク(qt.nokia.com)

htmlのオープンには QDesktopServices::openUrl() を使えばいい。
urlだけの調整で他のプラットフォームでも使える。

252:250
10/02/12 16:49:33
>>251

> htmlのオープンには QDesktopServices::openUrl() を使えばいい。
> urlだけの調整で他のプラットフォームでも使える。

ちょっと試してみましたが,起動に時間が掛かるものの,簡単ですね。
とりあえずはこれで行けそうです。


> Assistant をカスタマイズしなくても Qt Help モジュールが使えるはず。
> URLリンク(qt.nokia.com)
> URLリンク(qt.nokia.com)

こっちはちょっと手順を踏まないといけないようなので,後で試してみます。
いずれにしろ先ずはhtmlの作成ですね。

素早いご回答ありがとうございました。

253:デフォルトの名無しさん
10/02/12 17:16:05
>>252
QtWebKit を使って html を表示する方法もあるよ。

254:250
10/02/12 17:46:47
>>253

> QtWebKit を使って html を表示する方法もあるよ。

早速テストプログラム作ってやってみました。簡単で結構速いですね。
これで出来そうです。

ありがとうございました。

255:デフォルトの名無しさん
10/02/12 21:42:29
QApplicationにコマンドライン引数を渡していますが、
デフォルトではどのような処理がなされているのでしょうか?

256:デフォルトの名無しさん
10/02/12 21:52:57
applicationDirPath()、applicationFilePath()、applicationName()の元に使ったり、
当然arguments()で取得できるQStringListに格納するのに使ってるんジャマイカ?

257:デフォルトの名無しさん
10/02/12 22:01:54
>>255
せっかく読みやすいドキュメントがあるんだから気になったら読もうぜ。
URLリンク(doc.trolltech.com)
>>256の動作に加えて、QtのGUIスタイルとデバッグに関する引数を自動で処理してくれるみたいだな。

258:デフォルトの名無しさん
10/02/12 22:03:19
>>256-257
thx

259:デフォルトの名無しさん
10/02/12 22:59:43
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());と
tr()を使うのはどちらが賢明な判断なのでしょうか?

260:デフォルトの名無しさん
10/02/12 23:06:28
QTextCodec::setCodecForCStrings()はQStringが入力として受け付ける(const)char*の文字コード。
QTextCodec::setCodecForTr()はtrが(ry

261:26
10/02/12 23:46:34
俺はQString::fromUtf8();

262:デフォルトの名無しさん
10/02/13 00:17:49
前出のandroid-lighthouse試した奴いる?

263:デフォルトの名無しさん
10/02/13 01:11:29
>>259
それぞれ別の処理だから両方必要

264:デフォルトの名無しさん
10/02/13 01:12:19
>>260
入力のときだけじゃないから注意

265:デフォルトの名無しさん
10/02/13 01:20:31
qtcreatorでコンソールプロジェクトを実行した時に
プログラムを手動で終了させてるんですけど、
処理が終わったら終了できるようにできませんか?


266:デフォルトの名無しさん
10/02/13 01:59:23
>>265
処理が終わったら QCoreApplication::quit() を呼び出せばいい。
イベントループが不要ならそもそも QCoreApplication::exec() を呼ばなければいい。

267:デフォルトの名無しさん
10/02/13 02:13:32
>>264
入力の時だけじゃないだと・・・
他にいつこれ絡むの?
入ってくる文字コードこれだぞーって教えてるだけじゃないの?

268:デフォルトの名無しさん
10/02/13 02:18:49
え?

269:デフォルトの名無しさん
10/02/13 02:24:40
>>265-266
QCoreApplication app(argc, argv);
コンソールのみ使用するプログラム
app.quit();
return app.exec();

この順番でOK

270:デフォルトの名無しさん
10/02/13 02:25:43
>>267
toAscii() とか

271:デフォルトの名無しさん
10/02/13 02:40:03
>>268 >>270
Qt使い始めた頃に必死こいて得た知識を信じきった結果がこれだよ!
言われてからドキュメントTextCodec::setCodecForCStringsの項を見たら
convert to and fromとか書いてあるから泣きたくなった。
指摘さんくす

272:デフォルトの名無しさん
10/02/13 03:54:24
>>259 >>271

>>3 とかみると
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
だったり
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("sjis"));
だったりって決め打ちで書かれてるケースが多いんだよね(これは良くないと思う)

QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
にして環境非依存にしておく方がスマートだと思う

273:デフォルトの名無しさん
10/02/13 04:04:54
どっちもソースを UTF-8 で保存しているとして、

----------------(A)
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); // (1) 決め打ち
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); // ソースが utf-8 なのでここは決め打ち OK
を書いて
QString hoge("日本語"); // ソースのエンコードで埋め込まれた CString が (1) を基準に変換される
qDebug("%s", qPrintable(hoge)); // 環境によって化ける
----------------

----------------(B)
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); // 環境に適応
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); // (2) ソースが utf-8 なのでここは決め打ち OK
を書いて
QString hoge(QObject::tr("日本語")); // ソースのエンコードで埋め込まれた tr が (2) を基準に変換される
qDebug("%s", qPrintable(hoge)); // 環境が変わっても化けない
----------------

(A) ***でも結果的に動く*** けれども (B) の方が望ましいと解釈してるんだけどどう?

274:デフォルトの名無しさん
10/02/13 04:22:02
違うか
qDebug() は例が悪かった
忘れてくれ orz
とりあえず「ソースのエンコード」と「実行時のエンコード」の
ポータビリティを両立させようとしたら (B) の方が望ましいのでは? と思った

入力を考えると

QString hoge("日本語"); // (1) が使用されている
QString hoge(QObject::tr("日本語")); // (2) が使用されている

これはいいとして

出力を考えると

qDebug("%s", hoge.toUtf8().constData()); // 問題なし
std::cout << hoge.toLocal8Bit().constData(); // 問題なし
std::cout << hoge.toAscii().constData(); // (1) が使用されている
std::cout << hoge.toStdString(); // (1) が使用されている
std::cout << qPrintable(hoge); // (1) が使用されている?

かな

275:デフォルトの名無しさん
10/02/13 08:14:22
>>269
QCoreApplication::quitはQCore(ry::execを呼び出した後じゃないと
効果が無いんじゃないかな?
だからQTimer::singleShot(0, &app, SLOT( quit() ));を使って
タイマーイベントで駆動する小細工が必要になる
ってのを見たんだけど[1]

#include <QCoreApplication>
#include <QTimer>

int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QTimer::singleShot(0, &app, SLOT( quit() )); // app.quit();
return app.exec();
}

[1]
Qt-interest Archive - QCoreApplication won't quit

URLリンク(lists.trolltech.com)

276:デフォルトの名無しさん
10/02/13 11:02:00
>>274

>>176

出力はQTextStreamだろ常考

277:デフォルトの名無しさん
10/02/13 11:07:10
Windows版のQt Creatorはキーの反応悪くて使いにくい。なんで皆文句言わないんだろう
ってずっと思ってたんだけど、無変換キーを押すと次のキー入力が無視されることに気づいた
変換-無変換でIME切り替えてるから困るなあ

278:デフォルトの名無しさん
10/02/13 11:24:08
>>275
おお、寝てる間に小人さんが・・・
THX !!!

最後の結論はこっちになってますね
> #include <QtCore>
> #include "myclass.h"
>
> int main(int argc, char *argv[])
> {
> QCoreApplication qapp(argc, argv);
> MyClass *class = new MyClass(0);
> QObject::connect( class, SIGNAL( done() ), &qapp, SLOT( quit() )
);
> class->doSomething(); // Emits done, when finished
> return qapp.exec();
> }

You just need to add Qt::QueuedConnection as an additional argument to
the connect() call.
URLリンク(doc.trolltech.com)


279:デフォルトの名無しさん
10/02/13 11:26:48
>>277
ソースに日本語は使わずに国際化リソースで対応しよう


280:デフォルトの名無しさん
10/02/13 11:42:42
>>279
なるほ・・・ど?いやでも日本語でコメント書きたいよw

281:デフォルトの名無しさん
10/02/13 11:56:24
俺は外部エディタ登録して使ってる。
でもQt Creatorのエディタは日本語入力以外そんなに悪くないと思う。
折り畳み機能は邪魔なのでOFFにしてるけど。
最初、「わ、関数の中身が全部消えた」とか勘違いしたw

カッコや""の自動補完も最初は余計なお世話だと感じたけど、
慣れるとそうでもないね。

282:デフォルトの名無しさん
10/02/13 12:52:07
あーごめん>>277はQtCreatorがダメみたいに書いちゃったが
無変換キーのせいでダメだと思ってただけで、他は問題ないんだ
まあ外部エディタでいいんだけど、自動補完がよくできてるからもったいないなと

283:デフォルトの名無しさん
10/02/13 12:55:53
>>278
それでも
void MyClass::doSometiong() { done(); }
って定義したら、やっぱり終了しないみたいだから
QCoreApplication::exec()より後で呼び出されることを保障する手段としては
タイマーイベントを使うのが一番簡単なんじゃないかと思う
execした直後に自動で呼び出されるsignalがあればそれを繋げばいいんだけどさ
リファレンス見る限りそんなものは無いようなんで困ったもんだなぁと

284:デフォルトの名無しさん
10/02/13 14:03:55
そもそもなんのためにexec()呼び出すん?

285:デフォルトの名無しさん
10/02/13 14:51:13
コマンドの実行本体の流れ自体はコンソールで充分なんだけど
エラーのときだけメッセージボックス出したいとか


やってみたら
QWindow だけ作って メッセージボックスにハンドル渡して
app.exec() 呼ばなくてもちゃんと動いたわ w

286:デフォルトの名無しさん
10/02/13 14:54:53
>>283
>void MyClass::doSometiong() { done(); }

Q_OBJECT 書いてる?

287:デフォルトの名無しさん
10/02/13 14:56:22
>>286
書いてるよー
じゃないとmocに怒られるし

288:デフォルトの名無しさん
10/02/13 15:04:21
moc って qmake 実行し直しだよね

289:デフォルトの名無しさん
10/02/13 15:07:02
void MyClass::doSomething(){ emit done(); }

290:デフォルトの名無しさん
10/02/13 15:33:54
>>220
試してみたところWindowsのMingw環境でもプリコンパイルドヘッダーが使えました。
debugディレクトリ以下にstable.h.gchというディレクトリができていたので
ちゃんと機能しているようです。
コンパイル速度の変化は正確にはわからないですが、
もっとたくさんヘッダファイルを使う場合には差が出るのではと思います。

291:283
10/02/13 16:01:02
こんな感じです
URLリンク(www.dotup.org)
トレースしてみましたが明らかにexec()より先にdone() -> quit()が呼ばれてます

292:220
10/02/13 21:38:02
>>290
俺はVCだけど。プリコンパイルドヘッダー使ったら、コンパイルが劇的に速くなった。
QApplicationとQtGuiをプリコンパイルの対象にしたから、殆どすべてのヘッダーが
プリコンパイルされて巨大なファイルが出来上がったけどねw

それよりデバッガーの遅さが気になる。VCだからcdbなんだけど、デバッグ起動して
ブレークで止まってから、ローカル変数が表示されるまでかなり時間が掛かる
(「ダンパーを初期化しています」とか表示されてから10秒以上あるかな)。

あんまりほめられたことじゃないけど、カットアンドトライ的にソースをホイホイ
書き換えてはデバッガーで動かしてテストしてみるのはちょっと苦痛。


293:デフォルトの名無しさん
10/02/13 21:39:46
>>283
MyClass cls;
QObject::connect(&cls, SIGNAL(done()), &app, SLOT(quit()), Qt::QueuedConnection);
cls.doSomething();
return app.exec();

と Qt::QueuedConnection を付けて呼ぶと

>QCoreApplication::exec()より後で呼び出されることを保障する手段としては

が満たされるようですね

>>286 >>289
できました
emit は書いてなくても動くみたいです
ありがとうございました

294:デフォルトの名無しさん
10/02/13 21:54:49
>>282

> まあ外部エディタでいいんだけど、自動補完がよくできてるからもったいないなと

うん。だから場面によって使い分けてる。マークジャンプとか、アウトライン機能
(見出し機能)で関数一覧を表示させといて一発ジャンプとか、使い慣れたエディタの
方が良いこともあるから。

295:デフォルトの名無しさん
10/02/14 01:29:16
>>269 >>285 >>293
わざわざ MyClass 作らなくてもこれでも終われるね (connect の行がないと終わらない)

QApplication app(argc, argv);
QMainWindow *window = new QMainWindow();
window->setAttribute(Qt::WA_DeleteOnClose);
コンソールのみ使用するプログラム
QMessageBox::about(window, QObject::trUtf8("テスト"), QObject::trUtf8("!!"));
QObject::connect(window, SIGNAL(destroyed()), &app, SLOT(quit()));
window->close();
return app.exec();



296:デフォルトの名無しさん
10/02/14 01:58:36
いや、GUI作らない場合の話をしてるんだから、
QApplication app(argc, argv);
じゃなくて、
QCoreApplication app(argc, argv);
でないと反則。

っつーかそもそも、>>284さんの指摘にもあるが、
app.exec();
を呼ぶ動機が微妙。
ひょっとしてネットワークとかタイマーとか、
どっかでイベントループ回す必要がある、
ってことなら判らんでもないが。

297:デフォルトの名無しさん
10/02/14 02:46:20
qdbusではapp.exec()呼び出してないね。
URLリンク(cep.xor.aps.anl.gov)

298:デフォルトの名無しさん
10/02/14 14:28:49
シグナルとスロットで引数がある場合、どちらも同じ値が入ってくるのですか?

299:デフォルトの名無しさん
10/02/14 18:12:53
>>298
emitしたシグナルの引数が、スロットに渡される。
スロットの受け取る引数の数が少ないときは、後ろの引数は削られる。
スロットの受けとるのが多い場合は(どうなるか忘れたが)うまくいかない

signal valueChanged(int)とslot setValue(int)をconnectしたら、
例えばvalueChanged(3)がemitされたとき、setValue(3)が呼び出される。

signal valueChanged(int)とslot update()をconnectしたら、
例えばvalueChanged(3)がemitされたとき、signalの引数が1つに対してslotは引数を取らないので削られて、
update()が呼び出される。

300:デフォルトの名無しさん
10/02/14 18:39:44
>>299
ありがとうございます

301:デフォルトの名無しさん
10/02/14 19:32:53
Qt Creatorで「void Hoge::Hoge() F1」みたいなポップアップでてくるじゃん
あれってどこで消すのよ?

302:デフォルトの名無しさん
10/02/14 20:05:36
ESCキー

303:デフォルトの名無しさん
10/02/14 20:49:49
Qt CreatorをFreeBSDにインストールしたいんだけどpackageで提供されていたっけ?

304:デフォルトの名無しさん
10/02/14 22:38:57
>>303
あるよ
devel/qtcreator
だったかな

305:デフォルトの名無しさん
10/02/15 01:30:11
>>304
thx

それ入れればたぶん依存でQt本体も勝手にインストールされるよね(´・ω・`)?

306:デフォルトの名無しさん
10/02/15 05:54:11
QNetworkAccessManagerが送信するリクエストヘッダフィールドの順番って変えられないんでしょうか?
それとヘッダに強制的に追加される不要な項目を消すことはできますか?
リクエストだけ直に書ければ助かるんですけど・・・

307:デフォルトの名無しさん
10/02/15 09:13:00
>>305
もちろんですとも

308:デフォルトの名無しさん
10/02/15 10:53:03
>>306
QNetworkRequestで出来る操作だけで不満ならQTcpSocket使ってはいかがか。

309:デフォルトの名無しさん
10/02/15 16:45:19
去年のイベントのビデオとpdfが出てる。
URLリンク(qt.nokia.com)


310:デフォルトの名無しさん
10/02/15 17:08:40
>>306
ヘッダーはユーザが追加した順番になるはず。

自動的に追加されるヘッダーは送出の直前で追加されるので削除は無理っぽい。
空かどうかをチェックして追加しているので自前のものに置き換えることは可能。

311:デフォルトの名無しさん
10/02/15 21:36:17
URLリンク(meego.com)
moblin と maemo をマージした Linux & Qt ベースの
mobile向けディストリビューションらしい。

312:デフォルトの名無しさん
10/02/15 23:07:50
Qt 4.6.2

313:デフォルトの名無しさん
10/02/15 23:20:24
QtCreatorでFramework Onlyの方の全てのプラットフォームいけます?

314:デフォルトの名無しさん
10/02/15 23:27:04
Qt 4.6.1入れたばかりだぞ、ゴラァ

315:デフォルトの名無しさん
10/02/15 23:30:08
一ヶ月弱でバージョンアップかよw

316:デフォルトの名無しさん
10/02/15 23:33:08
4.6だったか4.6.1だったかをこの前入れたばかりですが・・・

317:デフォルトの名無しさん
10/02/15 23:33:13
入れ替えるのそんなにめんどくないからいいじゃん。
何なら鍼灸療法入れといたって医院だし。

318:デフォルトの名無しさん
10/02/16 02:09:43
4.6.1入れたばっかなのに4.6.2入れるのマンドクセ

319:デフォルトの名無しさん
10/02/16 11:43:58
メインウインドウはどうやって作っていますか?
やっぱり、手書きか

320:デフォルトの名無しさん
10/02/16 11:46:37
designerで作ってる。

321:デフォルトの名無しさん
10/02/16 20:57:05
臨機応変に

322:デフォルトの名無しさん
10/02/16 21:18:14
Windows版のQtCreatorってどうやってバージョンアップしてる?
一度クリーンアンインストールしてから再度インストールしなおす?

323:デフォルトの名無しさん
10/02/16 21:30:39
すいませんQtの質問ではないと思いますが
ダイアログ1のデータをダイアログ2で使いたいんですが、うまく行きません。
class Dialog : public QDialog{
Q_OBJECT
public:
Dialog2(QWidget *parent = 0);
Dialog2(QWidget *parent, Dialog1 *dlg1);
として
Mainwindowで
Dialog2 *m_dlg2 = new Dialog2(0, &m_dlg1);
とすれば、動くんですが、m_dlg2をメンバー変数にしようと思いMainwindow.hで
Dialog1 m_dlg1;
Dialog2 m_dlg2(QWidget *parent=0, Dialog1* &m_dlg1);
としてみたんですが
default argument missing for parameter 2 of 'Dialog2 Mainwindow::m_dlg2(QWidget*, Dialog1*&)'
とのエラーになってしまいます。
どうすれば、できるでしょうか


324:デフォルトの名無しさん
10/02/16 21:45:37
test.proにQT += webkitが書いていないと、コンパイラに怒られるんですが
何してんですか?これ

325:デフォルトの名無しさん
10/02/16 21:52:29
>Dialog2 m_dlg2(QWidget *parent=0, Dialog1* &m_dlg1);
>としてみたんですが
>default argument missing for parameter 2 of 'Dialog2 Mainwindow::m_dlg2(QWidget*, Dialog1*&)'
>とのエラーになってしまいます。

Dialog2 m_dlg2(QWidget *parent=0, Dialog1*m_dlg1=0);


326:デフォルトの名無しさん
10/02/16 21:53:01
>>322
普通に旧版アンインストールしてから新しいのインストールすれば問題ないよ。

設定は自分のプロファイルフォルダの下(C:\Documents and Settings\(ユーザー名)
\Application Data\Nokia)に保存されてるから、消される心配しなくて大丈夫。


327:デフォルトの名無しさん
10/02/16 21:53:20
>>324
ソースの方で webkit 使ってるんだろ

328:デフォルトの名無しさん
10/02/16 22:03:10
というか何が変わったん4.6.2...

329:デフォルトの名無しさん
10/02/16 22:03:53
>>324

URLリンク(qt.nokia.com)

QT は使用するモジュール(ライブラリ)の指定。>>327の言うとおり、QtWebKit使ってるから
だと思われ。

330:デフォルトの名無しさん
10/02/16 22:17:30
>>328
URLリンク(qt.gitorious.org)


331:デフォルトの名無しさん
10/02/16 22:21:23
>>297
そうなんだ
「入門Qt4プログラミング」の FTP / HTTP だと
exec() でイベントループ回さないといけないと書いてあった

332:324
10/02/16 22:30:18
>>327,329
ひとまず、qmakeの勉強をしてみることにします

333:デフォルトの名無しさん
10/02/16 22:35:03
qt creatorでMainWindowを作っているわけなですが、
メニュバーは自分でシコシコ手書きするしかないんですか?

334:デフォルトの名無しさん
10/02/16 22:45:44
>>333
ウィンドウの左上に「ここに入力」って書かれてるところをクリックして、&File とでも
入力してごらんよ。

コンテキストメニュー(ポップアップメニュー)は手書きするしかないけど。


335:デフォルトの名無しさん
10/02/16 22:47:09
↑ごめん。ダブルクリックだった。

336:デフォルトの名無しさん
10/02/16 22:50:24
>>326
ありがとう。
それならバージョンアップも楽だね('A` )b

337:333
10/02/16 22:55:30
>>334
最後にエンター押さなきゃ行けないんですね、
Visual Studioだとエンターを押さなくてもよかった(俺の記憶では)ので気がつかなかった

ありがとう

338:323
10/02/16 22:57:56
>>325
ありがとうございました。
Dialog2 m_dlg2(QWidget *parent=0, Dialog1*pdlg1=&m_dlg1);
としたら、今度は
SO C++ forbids taking the address of a bound member function to form a pointer to member function
と怒られました。
ISO C++では、インスタンスのメンバ関数のアドレスを、メンバ関数へのポインタを作るために取得することは禁じらています。
結局、この方法はペケなんですかね



339:デフォルトの名無しさん
10/02/16 23:16:41
>>338
Dialog1 *m_dlg1;
Dialog2 *m_dlg2;
とポインタでクラスメンバを宣言して、
コンストラクタの初期部で
m_dlg1(new Dialog1), m_dlg2(new Dialg2(0, m_dlg1))
とでもすれば。
親を 0 にするならデストラクタで delete を呼ぶ必要があるけど。

340:デフォルトの名無しさん
10/02/17 00:50:34
>ダイアログ1のデータをダイアログ2で使いたいんですが、うまく行きません。
シグナルるでスロットにデータを渡す

341:デフォルトの名無しさん
10/02/17 01:28:14
Mingwをmsysでも使うからupdateはマンドクセ
1. 旧Qtアンインストール
2. 新Qtインストール
3. システムの詳細なプロパティで変数pathにQtを加える。
4. c:/msys/1.0/etc/fstabにmingw32の場所を教える。
makeするのマンドクセ

342:デフォルトの名無しさん
10/02/17 13:50:31
makeしなくてもmsysとQtで別々にMinGWがある状態でやってればいいんじゃ?
共存できないのかな

343:デフォルトの名無しさん
10/02/17 14:14:46
できる

344:デフォルトの名無しさん
10/02/17 15:20:08
qt4.6.2はバグフィックス集みたいだから
余計な苦労したくなければ入れておく方がよさげだね

345:デフォルトの名無しさん
10/02/18 00:21:55
QtCreatorってVCみたいなドッキングウィンドウにならないのかなぁ・・・

346:デフォルトの名無しさん
10/02/18 00:22:52
なるよ

347:デフォルトの名無しさん
10/02/18 20:22:21
qtってSIGNALとSLOTがあるから例外を投げてこないのかな~

348:デフォルトの名無しさん
10/02/18 21:18:41
とあるソフトではQApplicationを継承したクラスに、
public + staticなメンバ変数を宣言していました

お前らは、QApplicationをどんな感じで使ってますか?

349:デフォルトの名無しさん
10/02/18 22:13:08
「入門Qt4プログラミング」誤字脱字多すぎね?
ソースにまでバグがあるw

350:デフォルトの名無しさん
10/02/18 22:30:39
>>346
Designerの方はなるんだね
プラグイン追加すればいいのかな?
でも自動的に開いたり閉じたりはしないよね?

351:デフォルトの名無しさん
10/02/19 01:04:30
>>348
そのまま使ってる。

352:デフォルトの名無しさん
10/02/19 03:28:11
QCoreApplication でコンソールアプリ書けるのは判ったけど
Windows 用の DLL って Qt ではどうやって作るの?


353:デフォルトの名無しさん
10/02/19 03:36:33
コンパイラの成果物がDLLなのかEXEなのかと
Qt使ってるかどうかは関係ないよ。


354:デフォルトの名無しさん
10/02/19 06:51:59
>>352
qmake の .pro で、TEMPLATE = lib


355:デフォルトの名無しさん
10/02/19 06:59:42
>>353-354
ありがとうございます
Win32API とかだと DLLMain を書かないといけなかったりするのは
Qt だとどう書くのかなと思ったのです

356:デフォルトの名無しさん
10/02/19 07:48:19
その辺りも含めてやってくれる。
同じソースから、*NIXならlibXXX.soが、WindowsならXXX.dllが作られる。

357:デフォルトの名無しさん
10/02/19 11:42:20
ダイアログベースでWindowsのイベントを自分で処理している
レガシーなアプリケーションの改修を任されたのですが、
新規に追加するダイアログだけ Qt を使うことは可能ですか?

358:デフォルトの名無しさん
10/02/19 18:54:13
QHttp 使って 2ch に書き込みしたいんだけど
cookie とか session 用のメソッドが全然見つからない
このあたりのを自分で作らないとだめなのかな

359:デフォルトの名無しさん
10/02/19 20:02:35
QNetworkCookie

360:デフォルトの名無しさん
10/02/19 21:09:28
FreeBSDにパッケージからQtCreatorをインストール。
無事起動までこぎつけたけどなぜかコンパイルの段階になって
「Qtの本体が無いよ」と言われてコンパイルできず。

あるぇ~?
言われてみれば qmake とコマンドラインで打ち込んでも認識されないな・・・
パスがきちんと通ってないのかな?

361:デフォルトの名無しさん
10/02/19 21:14:15
ここはお前の日記帳じゃ(rt

362:デフォルトの名無しさん
10/02/19 21:47:14
>259
thx!!

363:デフォルトの名無しさん
10/02/19 22:00:15
>>362
アンカを間違えてるがな( ^ω^)

364:デフォルトの名無しさん
10/02/20 01:12:12
Mac Portsからqt4インストールして出来たqtdemoを起動すると
いつの間にやらまっしろなウィンドウしか表示されなくなってしまったんだけど、他に同じ症状の人いないかな?
ビルド&起動環境は64bitカーネル、64bit版のqt
発生するバージョンはここ最近の5バージョンぐらい?



365:デフォルトの名無しさん
10/02/20 02:45:31
>>364
10.6 で qt4-mac @4.6.2 の qtdemo-mac (コマンドライン) と
/Applications/MacPorts/Qt/qtdemo.app を起動してみたけど,どっちも問題ないです.
ビルドはデフォルトのまま 64bit でしてるけど, MacBook なのでカーネルは32bit.

366:デフォルトの名無しさん
10/02/20 09:47:44
>>359
QNetwork を見ると QHttp とほとんど同じメソッドっぽいんですが
QNetwork の方が高機能で QHttp は obsolete ってことですか?

367:デフォルトの名無しさん
10/02/20 11:47:45
>>366
そうです。
URLリンク(doc.trolltech.com)

368:デフォルトの名無しさん
10/02/20 14:25:13
FreeBSDにパッケージからQt4をインストールしたんだけど

> qmake -project

まではおkだけど、次の

> qmake

の段階になると「QMAKESPECが定義されてませんよ」と言われてエラーが返される。

たんにパッケージからインストールしただけじゃダメなの?
他にどんな設定をする必要がある?

369:デフォルトの名無しさん
10/02/20 14:58:55
当然QMAKESPECについてググってみたんだよな?

370:デフォルトの名無しさん
10/02/20 15:06:28
ググったけど通販のページしか出てこない

371:デフォルトの名無しさん
10/02/20 15:30:15
>>369
ログインするユーザー毎にQMAKESPECを設定しないといけないのかorz・・・
QMAKESPECに freebsd-g++ を指定したら > qmake が通るようになった。
でも同じシステム上だったら freebsd-g++ しか指定しないのは分かり切ったことなんだから
Qt本体の方で freebsd-g++ と指定してくれてもいいのにね(´・ω・`)

ところで
> qmake -project
> qmake
とまで通るようになったけど次の
> make
でエラーが返される。なんでも「QApplicationなんてファイルやフォルダはありませんよ」とか
「QLabelなんてファイルやフォルダなんてありませんよ」とか・・・

なんかがおかしいだろorz・・・

以前Troll-techからQtのソースを取ってきてFreeBSD上でシコシココンパイルしてからインストール
したときはこんな初歩的なトラブルでつまずいたりすることはなかった。
packageからインストールしたことで何か問題が起きているとしか思えん。

372:デフォルトの名無しさん
10/02/20 16:52:38
濃厚なゆとり臭がする

373:デフォルトの名無しさん
10/02/20 17:12:24
>366
thx!!


374:デフォルトの名無しさん
10/02/20 17:23:03
obsolete なクラス(というかヘッダー)使ってたら
qmake 時か make 時に warning 吐いてくれてもよさそうなきがする

375:デフォルトの名無しさん
10/02/20 17:31:17
>>372
インストールすべきものは全てインストールしたんだがな(´・ω・`)・・・

376:デフォルトの名無しさん
10/02/20 18:11:31
>>372
ここのひとかもなぁ
スレリンク(unix板:446-番)

377:デフォルトの名無しさん
10/02/20 18:12:45
>>371
おまい C は初めてか?力抜けよ

378:デフォルトの名無しさん
10/02/20 18:15:20
>>371
FreeBSD の ports は充分テストされないでリリースされるのが常識


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch