2012年09月プログラム68: 【RAD統合環境】 Qt 総合スレ 14 【Win/Mac/Linux】 (226) TOP カテ一覧 スレ一覧 2ch元 削除依頼
C++相談室 part98 (372)
GPGPU#5 (274)
強いAI(人工知能)ver0.0.1 (962)
メガデモを語る fr-08 (663)
★★Java質問・相談スレッド157★★ (759)
くだすれC++Builder(超初心者用)その5 (328)

【RAD統合環境】 Qt 総合スレ 14 【Win/Mac/Linux】


1 :2012/08/13 〜 最終レス :2012/11/02
Qt(キュート)は C++ ベースのフレームワーク&RAD開発環境です。
ライブラリの機能は、フォーム、ボタンなどの各種ウィジェットからネットワーク、マルチスレッド、
グラフィックス(OpenGL)や各種コンテナ、XMLパーサー、組み込み JavaScript など、非常に多岐に渡ります。
公式の統合開発環境「Qt Creator IDE」を使えば、クロスプラットフォーム対応のRAD開発が可能です。
また、EclipseやVisual Studio上で開発したい人のためのアドインも用意されています。
■主な対応プラットフォーム(デスクトップ用途の場合)
Windows XP, Vista, 7
Mac OS X 10.4, 10.5, 10.6
Linux
■ライセンス
・オープンソース版(Open-source version)
 LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
 LGPL を選んだ場合はソースコード非公開のままでの商用利用が可能です(いくつか制限あり)。
 ※正確には通常「LGPL+商用利用向きの例外条項」を選ぶことにな7ります(Qtインストール先の「LGPL_EXCEPTION.txt」を参照)。
  ちなみにGPLでも商用利用が不可能というわけではありません、念のため。
・商用版(Commercial version)
 こっちはNokia社か日本の代理店(SRA社)とライセンス契約(年間30万くらい?)を結んで使います
■Qt を使って作られたソフト例
KDE、Adobe Photoshop Elements、Google Earth、Skype、DAZ Studio など
■前スレ
【RAD統合環境】 Qt 総合スレ 13 【Win/Mac/Linux】
http://toro.2ch.net/test/read.cgi/tech/1329530477/

2 :
■リンク
・Qt Development Frameworks (Nokia社のQt公式サイト)
http://qt.nokia.com/title-jp
・SRA社(日本の代理店)の日本語で読める Qt 関連ドキュメント
http://www.sra.co.jp/qt/relation/index.html
・Qt Users Forum Japan
http://qtusersforum.s2.zmx.jp/forum/index.php

■ライセンス関連まとめ
各ライセンスでの自作アプリのソース公開/頒布
Qtのライセンス   アプリのライセンス     Qtの頒布/(変更部分のソース公開)
GPL           GPL(ソース公開必須)      必須
LGPL         任意(ソース公開不要)      必須
商用          任意(ソース公開不要)      不要
*: LGPLは動的リンク時
実際には他にも条件(リバースエンジニアリング関係とか)あるので、
きちんとライセンスの条文を読むこと。

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

4 :
■Qt Creator 日本語化プロジェクト
Qt Creator を日本語化するプロジェクトです(非公式)
http://qt-creator-jp.sourceforge.jp/

■Python バインディング
PyQt4(GPL。定番)
http://www.riverbankcomputing.co.uk/software/pyqt/intro
PySide(LGPL。)
http://www.pyside.org/downloads/
ごちゃごちゃ言わず、QtQuickも使ってみてください(><;)

5 :
Qt 解説書
■ 実践 Qt 4プログラミング
http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5-Qt-4%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Mark-Summerfield/dp/4873115078/ref=pd_cp_b_1
■ Qtプログラミング入門―使いやすいフレームワークを基礎から解説
http://www.amazon.co.jp/gp/product/4777516504/ref=pd_lpo_k2_dp_sr_2?pf_rd_p=466449256&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=487311344X&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=1A9G2JCJYMD8FS57MBAC
■ 入門 Qt 4 プログラミング
http://www.amazon.co.jp/%E5%85%A5%E9%96%80-Qt-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Jasmin-Blanchette/dp/487311344X
■ Qtで簡単 GUIプログラミング―Qt入門書を読む前に読む「入門書」
http://www.amazon.co.jp/gp/product/4877832211/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=466449256&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=487311344X&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=1A9G2JCJYMD8FS57MBAC

6 :
>>1


7 :


8 :
スマホでQt動くってのはQMLだけ?
だったらマジ糞だわ

9 :
こっちにも貼っときますね。
Nokia、全Qt事業をフィンランドのDigiaに売却
http://sourceforge.jp/magazine/12/08/09/2048249
http://gihyo.jp/admin/clip/01/linux_dt/201208/13

10 :
Qt 5 マダー
R

11 :
Qt 5のリリースはされるとしてもクリスマス前かな。

12 :
またKDEは非互換直すのに長い間グダグダになんのかな

13 :
実践本に
QtConcurrent::run()で実行してるスレッドはシグナル/スロットが使えない
って書いてあるんですけど、ホント?
少なくともシグナルのemitは出来たんだけど・・・

14 :
ほんと

15 :
>>13
どういemitができた?

16 :
デザインだけ使ってみようと思ったらインストールに10GB必要とか言われるし・・・
JavaScriptでうんたら言うけど配置しただけだとXMLがあるだけだからよう分からんが、
QMLのデザイナとコンパイラだけでいいんで1GB以下で配布してくれんかなと。

17 :
ソースを自分でビルドすればいいんじゃね

18 :
>>16
SDKだったらSymbianやシミュレータのような要らないのを外せば2G未満で、インストール時間も短くなる。

19 :
一般のHTMLデザイナが使えるならコンパイラだけでもいいんだけど、項目名は独自だよね。
Examples¥4.7を丸ごとビルドしようとしたらエラーになるんですけどどうしたらいいですか?
mingw32/bin/ld.exe: cannot find -lpnp_basictoolsd
collect2: ld returned 1 exit status
セットアップではMinGWはチェック入ってるんですけど
ガジェットのサンプルはコンパイル通った。
すいません。ぐぐったら出てきました。
>あなたがbasictoolsプラグインを最初にコンパイルする必要があります
>ttp://qt.gitorious.org/+qt-develope...ins/basictools

>>18
2GBってでかいな
と思ってインスコフォルダのサイズ見たら8.71GBだった。
ファイル数165kって俺のC:ドライブより多いやんけ。
大人しくエミュ関係削除します。

20 :
>>15
自作の QObject 派生クラスで signal と slot を定義。
QueuedConnection で connect しておく。
QtConcurrent::run() に this とメソッドを渡して、そのメソッド内で emit。
slot がメインスレッドで実行される。
と、こんな感じ。
使い方あってますかね。。。

21 :
>>20
使い方あっている。そういうのはできる。
QtConcurrent自体がシグナルとスロットを使えるようになっていないということだよ。
明示的にQueuedConnectionでconnectしなくてよい。
emitされたときに別スレッドのオブジェクトのスロット呼び出しなら、QueuedConnectionになる。

22 :
やっぱりエラーは変わらず出ます。
でも、他のは一応コンパイルできるので問題ないです。
コンパイルUIにJavaScriptが使えるという点はいいなと思ったんだけど、
QT5ではQMLっていうシンプルなやつがメインになるらしいですね。
JavaScriptは使えなくなるのかな?
まあ、HTMLじゃなくXMLだから普通のHTMLエディタやブラウザで表示できないからあまり意味はなかったかも。
ネイティブ動作で軽いやつがよかったんだけど
OpenGL必要条件にってのは残念。
まあ、OpenGLが使えないのはもうスクラップになる頃だし問題ないのかな。
バージョン確認したらまだQT4だったから先の話か。
最終のQT4は取っておいたほうがよさそう。

23 :
QWebViewで表示しているテキストをプログラム側から動的に編集させたいんですけど、
QWebViewにQTextCursorやQTextEdit::insertHTMLの代わりになるものってありますか?

24 :
>>22
JavaScriptが必須になる。
Qt4はQt5リリース後にいつもの倍の2年はサポートするとDigiaが発表していた。

25 :
>>23
DOM操作で編集、examples/webkitなどを。
QTextCursorやQTextEdit::insertHTMLはQtのリッチテキスト用なので、一般的なHTMLの編集には向かない。

26 :
>>21
thx
しかし、あの文面からは
>QtConcurrent自体がシグナルとスロットを使えるようになっていないということだよ。
とは、読み取れんかった。。。

27 :
ねぇねぇ、qmlでFlickableとかやると怒られるの?

28 :
qmlって何?
Flickableって何?

29 :
Qt 5 Betaが出たというのにこの盛り上がり!

30 :
PyQtとPySideって両方残っていくのか?

31 :
>>29
ついに来ましたか。でもVS用にビルドされたのはまだっぽいですね
頑張ってソースからビルドしてみます

32 :
ビルドがすんなり通ればなあ

33 :
4.8.3ももうすぐくるな
またビルドか

34 :
>>29
QObject,QWidgetについては、びっくりするほどQt4と変化無いからな

35 :
>>29
Alphaだね。Betaと呼べるレベルじゃない。
>>34
ウィジェットにはいろいろ問題があって、安定したアプリは作れない。Qt 4と動作や描画結果が違っている。
ウィジェットがまともに使えるようになるのは、5.1からの予定。


36 :
そうですか
乗り換えはあと一年くらい見送りですね

37 :
個人的にはQt4ちっくな使い方もできる全く別のものと思ってる

38 :
>>36
ウィジェットアプリ乗り換えは、一年は待った方がいい。
>>37
小さいものやQt5でこれから作るものならそれでいい。
Qt4で作った大きなものをQt5にするのに困る。
Qt5にしないままだと半年も経てばバグ修正されなくなるし、機能追加と改良がされないので
陳腐化する。

39 :
QWidgetのデストラクタってなんでvirtual付いてないの?

40 :
>>39
基底クラスのQObjectのデストラクタがvirtualだから,QWidgetのデストラクタも
自動的にvirtualになる。

41 :
QWebViewがデッドキャッシュを解放してくれません。
以下のコードを実行するとappendした画像サイズに応じてメモリ使用量が増え続けます。
(WinXP/7環境で確認しました。)
QWebElement element = getSomeElement();
for (i = 0; i < n; i++) {
element.appendInside(createNewImgHtmlTag());
element.firstChild().removeFromDocument();
}
createNewImgHtmlTagは呼び出すたびに異なるソースへの<img>タグを生成してQString型で返す関数です。
同じソースへのタグを生成した場合はメモリ使用量が増えないので、恐らくキャッシュが原因だと思います。
QWebSettings::setObjectCacheCapacitiesでキャッシュサイズを指定しても変化はありません。
ドキュメントをクリアしても、QWebViewをdeleteLaterしても変化はありません。
この問題を解決する方法はありますでしょうか?

42 :
C++の駄目なところだよな。

43 :
QTとC#ってどっちがGUIアプリ作るの簡単?

44 :
Qt

45 :
>>41
デッドキャッシュと言っているのは具体的にどのインスタンス?
それを特定できて言っているかな?。人の性にしているけれどアプリのバグというのもあるのだよ。

46 :
テストしてみたけどこっちでも再現できたよ

47 :
ぶっちゃけ、デスクトップはQt、Web系はPerlが一番心くすぐるよね?
もっといえば、MeeGoでタッチアプリも作れれば、最高だった。

48 :
>41
そのコードで確保されたメモリはQWebView::setHtmlを呼び出すと解放されるから、
そもそもremoveFromDocumentではデッドキャッシュにならないんじゃないか?
ページの中身を編集しても、あくまでも同じページ扱いなんだろう
しかし、QWebViewを削除しても解放されないのはちょっと困るな
削除する前に必ずsetHtmlか何かを呼び出さないといけないようだ
本家WebKitの方では修正されてるのかな?

49 :
それが仕様ならJavaScriptと相性悪そうだな

50 :
>>41,48
QWebViewをdeleteしたら解放されたよ
メンバ変数でQWebElementを保持してないか?
保持してるとQWebViewをdeleteしても非ナルのまま残るぞ

51 :
使い終わったポインタにはNULLを代入しておきなさいと専門の先生が逝ってた

52 :
多分これだな
https://bugs.webkit.org/show_bug.cgi?id=61006

53 :
グロ中尉

54 :
なんでだよw

55 :
>>48,50,52
レスありがとうございます。
リンク先のパッチを反映させてみたところ劇的に改善しましたが、まだ小さなゴミが残るようですね。
ただこれもsetHtmlを呼び出すときれいさっぱり消えるようですので、定期的にページをリフレッシュするようにします。

56 :
>>47
MeeGoは遅くて重くて使えるものではなかったよ。

57 :
質問なんですが、UbuntuソフトウェアセンターでインストールしたQtCreatorを使って開発した場合はLGPLライセンスを適用できると考えてもよろしいですか?

58 :
別に何のライセンスでもいいんでない?

59 :
QtCreatorでqmakeした実行ファイルをlddで見たら必要なライブラリ一覧がでるはずなんだけど
別のPCに実行ファイルを持っていってlddしたら動的実行ファイルではありませんって出て実行できない。
これってどういうこと?
ライブラリの動的リンクができてないってこと?

60 :
59だけど32bitで開発してたのを64bit環境に持って行ってたのが原因だった
初歩的なとこだった

61 :
いつのまにかQtの公式サイトがdigia仕様になってるし4.8.3も出てるじゃないか
もうこのスレの住人はQtに興味ないのか

62 :
>61

63 :
Qt Projectの方にbookmarkしてるに1票

64 :
qglの質問はここでいいですか?

65 :
qgl って何ですか?

66 :
qglですよ

67 :
Qt OpenGLのことならここでしてもいいけど、
可能なら本家OpenGLのスレで聞いた方が回答は期待できると思うよ

68 :
質問です。QDialのプロパティでスタイルシートを設定して, QSliderと同様にハンドルを画像にしたり、
ダイアルの目盛の色を変更しようとしたのですが、背景色しかカスタマイズが無理でした。
そこでQCommonStyleをサブクラス化してカスタマイズし、setStyle()しようと思ったのですが、Qtのクラスをサブクラス化して
使用すると、自分が書いた部分のソースにもLGPLが適用されてソース公開義務が発生するという考えであってますでしょうか。
また、ソース公開が嫌な場合は、面倒ですが画像か、ペン・ブラシを使ってゴリゴリ書くしかないんでしょうか。(実は、スタイルシートで設定できるとか)
LGPL版でQt SDK 1.2.1をWindows7 64bitで使ってます。よろしくお願いします。

69 :
QTimer使ってタイムアウトごとに交互に別のSLOTを呼ぶことはできますか?
ウィジェットの背景を点滅させたいのですが。

70 :
QtでiOS用プログラムは開発できますか?

71 :
>>69
timerEventのなかで呼び分けろカス

72 :
Linux上のフレームワークでまともにリソースつっこんで開発継続してるのってAndroidくらい?
Qt Extendedってこの先生き残れるの?

73 :
お前の言うフレームワークの意味が判らん

74 :
>70
QMLでならなんとか。正式サポートは、来年のQt 5.1。

75 :
>72
Qt Extendedはとっくになくなっている。その後継のMeeGoも瀕死状態。

76 :
QNetworkReply reply = manager->get(request);
これでエラーが出るんですがどうすればいいですか?

77 :
managerはQNetworkAccessManagerです
requestはQNetworkRequestでUrlを設定しています

78 :
エラーの内容を貼らないと誰も答えられない

79 :
× QNetworkReply reply = manager->get(request);
○ QNetworkReply *reply = manager->get(request);

80 :
3ヶ月前のだけどQt開発者のブログ記事ちょっと訳しときますお
全部翻訳するのは面倒なので要点だけ
■QPointerを使い続けよう(Continue using QPointer)
http://www.macieira.org/blog/2012/07/continue-using-qpointer/
Qt5開発の初期に、我々はQPointerを廃してよりモダンなQWeakPointerに
置き換える決定を行いました。しかし、この決定はいまや覆されました。
QPointerを使っていた場所ではQPointerを使い続けてください。
QWeakPointerは、QSharedPointerとの連携以外では使わないでください。
決定までの経緯の要点
・QPointerはQt3時代の古い実装を引きずっていて、非常に遅かった
・Qt4.5で登場したQWeakPointerは速く効率的な実装だったので、
 QSharedPointerに対応する弱参照という本来の役割だけでなく、
 QObjectへの弱参照であるQPointerの代替との役割も担えるようにした
・しかし去年の11月にある開発者が、QPointerの内部をQWeakPointerで実装しなおした
・さらに、実際にQt5で使われているQPointerをQWeakPointerにリプレースしようと
 したところ、非常に膨大な作業量が発生することがわかった
■まとめ
すなわち、あなたはQPointerを使い続けるべきです。もしあなたがQt4を使っているなら
残念ながら実装の高速化は期待できませんが、少なくともクリーンなコードではあります。
QWeakPointer::data() は非推奨となるので、使ってはいけません。
Qtのスマートポインタは今では下記のようにグループ分けされます。
・共有データ:QSharedDataPointer, QExplicitlySharedDataPointer("侵入的ポインタ"として知られる)
・共有ポインタ:QSharedPointer, QWeakPointer(C++11のstd::shared_ptrに相当)
・スコープドポインタ:QScopedPointer, QScopedPointerArray(RAIIで使われる)
・QObjectトラッキング:QPointer(QObjectインスタンスのライフタイムを監視する)

81 :
>・しかし去年の11月にある開発者が、QPointerの内部をQWeakPointerで実装しなおした
なんだこれ

82 :
iOS/Androidで本当に動くようになるんだろうか心配だ

83 :
昨日、Windows に Android 用 Qt 開発環境の Necessitas をインストールしてみたよ。
http://sourceforge.jp/projects/sfnet_necessitas/
途中、いろいろハマったけど、最終的にはアプリがビルド出来て、実機で動作させることが出来た。
まだいろいろな機能は試してないし、問題もありそうだけど、
Qt で書いたプログラムがちゃんと動作したのは感激だった。

84 :
Androidアプリはネイティブで動くの?
それとも仮想マシン上?

85 :
NDK使ってるから、ネイティブで動いているんだと思う

86 :
Necessitasはβ1になったばっかりだからやるならちょうどいいかもよ

87 :
ライセンスはどう?
LGPLならAndroidの場合apkにパックされて配布されるから、LGPLに従ってソース公開しないとダメなのかな?

88 :
http://sourceforge.net/p/necessitas/wiki/Necessitas%20licensing%20policy/
によるとQtライセンスに準じてNecessitasでの追加部分はBSDライセンスってことみたい。
フリーソフトではなくてもMinistroサービスを自由に使えると強調されているのでそこがミソなんだろう。

89 :
ありがとう。
ということはやっぱりLGPLかぁ。

90 :
ひとまずiOSに対応しないと始まらない

91 :
>>87
LGPLなQt library部分は別パッケージでインストールされて、実行時に
アプリケーションから動的リンクされるよ

92 :
iOSとAndroidへの対応が生命線だと思うんだが、なかなかだな…

93 :
モバイルへの対応は所詮客寄せパンダ
Qtはデスクトップあっての物種だよ
Qt5でデスクトップでも将来性を示すのが最優先だろう

94 :
デスクトップでQtを積極的に用いる必然性がない
cadとブラウザ、photoshopぐらいしか思い浮かばない
どこの市場でQtが採用される需要があるんだ?
スマホ対応されてやっと触ろうって気になる程度だよ

95 :
>>91
おー、サンキュー!
ライセンスがクリアできるならちょっと挑戦してみようかな。

96 :
学生の頃はqtやc++がプロフェッショナルのための道具だと思っていたが、
実際に社会へ出てみると何処で使われているのか非常に悩ましい

97 :
デスクトップでクロスプラットフォームっていうのがそもそも微妙なんだよな
Mac使ってるのはWinに比べりゃ無視でくるほど少数のカルトの教徒しかいないし
LinuxやUnixをデスクトップで使ってるのなんて、それこそ中二病こじらせたようなのしかいないから

98 :
>>97
お、おう…そうですね(棒)。

99 :
今度の私の仕事は、設計の面子にはLinuxで、オペレータにはWindowsでってことで、Qtになったよ。
まぁ、ジャンル自体がニッチなんだけどね。

100 :
かなり前の話しだが、
・組み込み
・リアルタイムlinux
・GUIが必要
って事でQt使う案件に少し関わった
ただ、その案件で何故この組み合わせになったのかは良く分からない
別にlinuxである必要は無かったし、リアルタイム性を活かす処理なんて無かった…
そこでwindowsへ移植でもするなら意味はあったんだろうな

101 :
モバイルでもUNIXでも、クロスプラットフォームであること自体が判断基準になることってあんまり無いんだよね
実際にQt採用してるソフトウェアも別の環境では別のフレームワーク使ってるのが多い
結局重要なのはどの環境に対応してるかじゃなくて個々の環境での性能でしょ
だからiOS/Androidに対応したところで、これまで培ってきたQt(デスクトップ)の評価は上がりも下がりもしないと思うんだ
もちろん既にQtに染まってる俺らには嬉しいことだけどね

102 :
てか、昨今のスマホ事情はバッテリー足りねーからネイティブアプリ作れなんて
クレームばっかなんだし、スマホでこそ、c++とqtの本領が発揮される場所じゃないんだろうか?

103 :
iOS/Android対応でもQMLだけだったら
がっかりだよね

104 :
本流のQtとまぜこぜにされると、デスクトップがモバイルに引っ張られて
ショボくなりそうでいやだけど、今みたいに別プロダクトになってるなら何も問題ないな

105 :
Necessitasの作者はQt5への移植には興味ないみたいなこと言ってたな
今のところQt4以外では考えていないと

106 :
iOSに対応してもダイナミックリンクできないから、ソース公開したくなければ
有料版になるね。値段はどれくらいだろう?
>>97
カルトと言われりゃそれまでだけど、俺みたいに自分で使うために作ったMac用の
ソフトのWin版を公開してる人間もいるから、MacエンジニアがWinユーザに貢献で
きるって利点もある。

107 :
>>106
LGPLなのでソース公開義務なし

108 :
>>106
> iOSに対応してもダイナミックリンクできないから、
iOS に対応すると何故ダイナミックリンクできなくなるの?
iOS ってダイナミックリンクサポートしてないの?

109 :
iOS SDK がダイナミックリンクに対応してないんじゃなかったかな?

110 :
そうそう、iOS用にビルドするには静的リンクして実行形式にするしかない
んで、単純に考えればアプリはLGPLの派生物になって
配布するならユーザーにソース公開義務があると思うんだけど
v2.1の範囲なら例外事項を満たせば大丈夫とか色々議論されてて結局よくわからん

111 :
Android版は、QtLibが別パッケージで、アプリケーションはそのライブラリの有無を確認して、
無ければライブラリーのインストールを促し、有れば動的リンクして実行という形式だから、
リバースエンジニアリング条項さえクリアできればライセンス的にはクリーン。
ただ、良くも悪くもGUIがデスクトップ版と同じだから、タッチパネルで使い易いとは言い難い。

112 :
つ「QML」

113 :
>>110
要求されるまでは公開しなくていい
大抵のユーザーはわざわざ公開要求しない
ウィルスが流行れば別かも知れない

114 :
へーiOSってそうなんだはじめて知った
DLL Hell避けるためなのかな

115 :
いつになったら、企業はQtを採用してくれるにゃ?Qtで給料もらいたいわ。

116 :
>>110
派生物は、ソースを改変した場合を指す
ソース公開義務なし

117 :
>>110
>んで、単純に考えればアプリはLGPLの派生物になって
>配布するならユーザーにソース公開義務があると思うんだけど
違う。and/orだから、リンクに必要なバイナリとソースコードの両方、あるいはどちらかの公開義務がある。
WikipediaのLGPL翻訳は間違いではないが分かりやすく正確に翻訳していない。
原文をしっかり読もう。

118 :
LGPLはスタティックリンクでもソースの公開義務はない。
ただし、第三者がQt自体を変更して同じ実行ファイルを作成できなければいけない。
要するに要求があった場合はリンク直前のオブジェクトファイルを提出する必要はある。

119 :
>>115
受託だから詳細書けないけど、うちで Qt 使ってる案件あるぞ。

120 :
>>115
ウチも使ってるよ。計測器をPCから制御するアプリ。

121 :
QTreeView に QDirModel をセットしてソートするとめちゃくちゃ遅くなるんです
たぶんネットワークドライブを見に行ってるのが原因のようなのです
ソート時が特に遅いのですがソート時に限らなくても遅くなるきっかけがあります
ネットワークドライブがツリー上にあってそれが隠れている間はなんともないのですが
スクロール時にネットワークドライブが画面内に入ってきた瞬間にも固まります
ツリーからネットワークドライブは削除せずに
ソートやスクロール時に遅くならないようにする方法がありますか?
OS は Windows 7 です

122 :
1.QThreadを使う
2.Windowsを窓から捨てる

123 :
ソート時はQSortFilterProxyModelでなんとかならんかな?

124 :
この行があると固まります
  // mModel->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
コメントにすると速くなります
(それでも「スクロール時にネットワークドライブが画面内に入ってきた瞬間にも固まります」の症状は残ります)

125 :
WindowsのQDirModel/QTreeViewは
Explorerと同じコンポーネントが使われるな
XPまではまともだったけど
Vista/7でネットワークドライブのアクセスが糞になった
>122
が正解

126 :
Qtの日本のグループみつけた
http://qt-project.org/groups/qt_japan

127 :
QString を std::string に変換したいんだけど?

128 :
QString::toStdString

129 :
馬鹿には無理

130 :
同意せざるを得ない

131 :
QPainter::begin: Paint device returned engine == 0, type: 1
これって何が原因ですか?

132 :
>>127
windowsだと落ちるぞ。
ascii()じゃないとダメだな。

133 :
installEventFilter()でトラップした先のイベントハンドラに、
MousePressは来るのにMouseMoveやMouseReleaseが来ない。
setMouseTracking()を呼んでも変化ないし、なんだろ。

134 :
OS は Windows 7
ソースは UTF-8 で保存
gcc でコンパイル
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QString img_out_filename(trUtf8("%1/%2").arg("path_to_home").arg("日本語.png"));
QImage img_jp(":/qrc/img_jp");
if(!img_jp.isNull()) img_jp.save(img_out_filename);
hoge.qrc には <file alias="img_jp">日本語.png</file> (これも UTF-8 で保存)
とやるとファイルが作成されて
中身はhoge.qrcで記述した日本語.pngの内容と同じものが正しく出力されるのですが
ファイル名だけ文字化けします
文字化けした文字列はコードを見ると UTF-8 で出力されているようです
たぶん img_jp.save(img_out_filename) のところで
WindowsAPI に対して unicode で保存されず
ベタに UTF-8 で保存されちゃってるのだと思いますが
どう対処するのが正しいでしょう?

135 :
馬鹿には無理

136 :
QString img_out_filename(trUtf8("%1/%2").arg(trUtf8("path_to_home")).arg(trUtf8("日本語.png")));

137 :
>>136
出来ました
ありがとうございました
>135
知らないなら黙っててください
うざいだけです

138 :
>>134
そもそもソースがUTF-8なのに
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
なのがおかしいと思うんだが

139 :
へ?

140 :
QTextCodec::setCodecForCStrings()はconst char *(とQByteArrya)をQStringに変換する
Codecsを伝えるもの。
>>134 でいうと "日本語.png" がそれに相当する。

141 :
trは何のためにあるの?

142 :
trは文字通り翻訳(translation)の為
多国語化に使う

143 :
>130
GetWindowTextA とかで取得した文字列を QString にするときは、
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
になってた方が良くないですか?
そもそもソースが UTF-8 だと分かってるなら、
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
で、
QString img_out_filename(tr("%1/%2").arg(tr"path_to_home").arg(tr"日本語.png"));
が望ましいと思いますが。

144 :
Qtはマルチプラットフォームなtool kitなのでlocaleを適切に解釈し変換する
クラスや関数があるのでそれを使うのが望ましいと思います。

145 :
>3 が何か変だね

146 :
QStringはwcharとmbcsが混在できてしまうのが問題なんだよな

147 :
VC++でコンパイルするとソースがUTF8でもShiftJISで埋め込まれたりしてちょっと混乱するわ
正直、翻訳使わないならワイド文字列使った方が面倒がない気が
wstring cnv(const QString& s) { return s.toStdWString(); }
QString cnv(const wstring& s) { return QString::fromStdWString(s); }
QString img_out_filename(cnv(L"%1/%2").arg(cnv(L"path_to_home")).arg(cnv(L"日本語.png")));
関係ないけど、今までQt Creatorのデバッガは文字列の日本語が全部エスケープされてうざいと思ってんだが
右クリックメニューから「表示フォーマットを変更」→「すべての文字を・・・」で普通に日本語表示されるんだね

148 :
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); //ソースの文字コードを直接指定("utf-8"や"Shift-JIS")
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); //翻訳用マクロ tr()の文字コード
そもそもこの2つが毎回同じもの"utf-8"(ソースの文字コード)を設定するのであれば、
2つに分かれている理由はなんなんでしょうか?
別の設定をする可能性があるから分かれているということであれば、
そのようなケースの具体例はどういう時でしょうか?

149 :
>>148
CStringsとTrのCodecが分かれてるのは歴史的経緯じゃなかったかな?
Qt5では、この二つが廃止されてDefaultCodecに統一されるらしい。

150 :
>147
>VC++でコンパイルするとソースがUTF8でもShiftJISで埋め込まれたりしてちょっと混乱するわ
マジですか。
昔VCでQt使ってみて挫折してgccにしたらうまくいったので、
それ以来ずっとgccだったんですが、VCに戻そうかな。
っていうかgccとVCでそれぞれコンパイルするときに、
ソースのエンコードをいちいち替えないといけないって、
なんか不便だよね。
VCでUTF-8だとBOM付けなきゃいけないみたいだし、
gccでSJISオプションにして全ソースSJISにしたら、
何か負けた気分になる。

151 :
いやさ
それだと何の問題があるんだよ
お前の相手してると疲れるんだよ

152 :
>>144
QString QString::fromAscii ( const char * str, int size = -1 ) [static]
Returns a QString initialized with the first size characters from the string str.
If size is -1 (default), it is taken to be qstrlen(str).
Note that, despite the name, this function actually uses the codec defined by
QTextCodec::setCodecForCStrings() to convert str to Unicode.
Depending on the codec, it may not accept valid US-ASCII (ANSI X3.4-1986) input.
If no codec has been set, this function does the same as fromLatin1().
See also toAscii(), fromLatin1(), fromUtf8(), and fromLocal8Bit().
これ見る限りソースが UTF-8 で書かれているからと言って
QTextCodec::setCodecForCStrings()

QTextCodec::codecForName("utf-8")
しちゃうのはまずいんじゃないかな
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
が望ましいというより必須じゃないかな

153 :
そこはfromLocal8Bitだろ常考

154 :
さあ混乱してまいりました。

155 :
C++11が普及してu8文字列使えるようになるまでの我慢ですあと5年くらい

156 :
移植性を考えてプログラムするならcstringsのcodecはソースコードのcodecにするしかないと思う

157 :
>>150
gccよりVC++の方が断然コンパイル速いから戻すのお勧め
特にjom有効で8コアCPUとかでビルドすると本家VSで1分かかるコードが10秒かからなくて
混乱して念のためリビルドかけたりするのもよくあること

158 :
>>156
でもVCだとバグるんでしょう?

159 :
Windows msvc版とLinux gcc版共用のアプリをいくつか作ってるけど、バグったことは無いなぁ。
ソースコードは古いgccでも対応できるようにShift-JISにしてる。
# 古いgccはBOMを解釈しないから

160 :
たしかに全部SJISにしとけばバグらないかもね

161 :
QThread を継承した自分のクラスから SIGNAL を emit しても問題ないですか?

162 :
GUIアプリ作りたくてQTはじめたけど、どういう勉強法したらいいかわからん。

163 :
ここに書かれていることは一般的な感覚(みんながよくやる方法)と
違うことを推奨しているのですが本当なのでしょうか?
http://vivi.dyndns.org/tech/Qt/QThread.html

164 :
過去スレにあったわ
>とりあえず、ここを読んでおけ
>http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/
コンストラクタで moveToThread(this); 書かない糞コードが多いのと
QTread を継承したクラスでは parent = 0 (省略じゃなくて固定)にしないといけないっぽい
勉強になった

165 :
>>163
http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/
これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、
QThreadをサブクラス化するのがダメとみなしてはいけないと思います。

166 :
入門Qt4プログラミングのサンプルコードが、QThreadをサブクラス化して処理を追加するようになってるのが良くないね
あれで誤解している人も結構いそう

167 :
関数内でQThread::currentThreadId()を呼び出してスレッドID表示してみればどのスレッドでその関数が実行されてるかわかるよ

168 :
>>166
サンプルコードはよいコードだよ。
QThreadをサブクラス化して処理を追加するのが向いている場合もあれば、moveToThread()が向いている場合もある。

169 :
>168
具体的にはそれぞれどんな場合でしょうか?
ここを見ろというリンクとかありますか?

170 :
>>169
マルチスレッドの基本的なことを勉強し直せ
使い方もわからず技術だけ覚えても意味ないぞ

171 :
>QThreadをサブクラス化して処理を追加するのが向いている場合もあれば、moveToThread()が向いている場合もある。
つべこべ言わず具体的な例を言ってください

172 :
>>170
自分が判らないからと言って相手も判らないと思い込み
論を語る基地害ってどこから湧いてくるんだろうな

173 :
QThreadをサブクラス化して処理を追加する方法というのは、
メインスレッドとの signal/slot 通信はどうするんだ?
通信するんであれば、moveToThread()で自分自身を自分のスレッドに
移さないといけない。それが美しくないので、QObject 派生クラスを作って
別スレッドにmoveToThread()した方がいいと言うんじゃないのか?

174 :
シグナル・スロット通信に関係なく、moveToThred()していない、CThread派生クラスオブジェクトの
メソッドを単にコールするとメインスレッドのコンテキストで実行されるので、
結局moveToThred()するのは必須

175 :
run部分に処理を全部書けば、moveToThred()しなくてもいいけどな

176 :
>>167
ありがとうございます
moveToThread(); しなかったときは
main も thread も同じ threadid でした
あと
http://vivi.dyndns.org/tech/Qt/QThread.html

hoge->moveToThread(hoge);
が「みっともない」みたいな言いがかりだと思いましたが
QThread を継承したクラス側のコンストラクタで
moveToThread(this); すれば綺麗なコードになると思います。
なので
http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/
が正しいとすると
>これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、
で問題なさそうです

177 :
>>163
> ここに書かれていることは一般的な感覚(みんながよくやる方法)と
> 違うことを推奨しているのですが本当なのでしょうか?
おまえの言う「一般的な感覚(みんながよくやる方法)」とは
具体的にはどんな方法なんだ?

178 :
おとりこみ中のところすみません。
qDebug() で改行させない方法はどうするのでしょうか?

179 :
小便臭いガキが沸いてるな
くだらない質問する前にQTreadのソース読めよカス

180 :
QFuture使ってる人少ないのかな?
マルチスレッドの用途によるけど、すごい簡単で使いやすいよ

181 :
失礼w 
QtConcurrentというべきだた

182 :
>>172
鏡に向かって喋るなよw

183 :
>133はinstallEventFilter()で委譲するオブジェクトがQGraphicsViewだったのが原因だった模様。
そのViewに紐付けているQGraphicsSceneのinstallEventFilter()を呼んで解決しましたとさ。
エンコーディングの問題はめんどくさいなぁ。取り敢えず、ファイル名の仕様をascii限定にしておくか。

184 :
馬鹿には無理

185 :
・「みんなの意見」「他の人もそう思ってる」など、自分の意見なのに他人もそう思ってると力説する人
 他人が自分とは違うという事実が受け入れられない人です。自分の意見が通らないとコピペや荒らしなど
 無茶をし始めるので見かけたら放置してください。
・根拠もなく、他人を見下したり、差別したりする人、自分で自分を褒める人
 他人を見下すことで自分を慰めようとする人です。実生活で他人に褒めてもらう機会がないが
 プライドだけは高いとか、匿名の掲示板しか話し相手のいない人です。可哀想なので放置してください。
・自分の感情だけ書く人
「〜〜がムカツク」とか自分の感情を掲示板に書くことに意味があると思っている人です。
何がどのようにムカツクのか論理的に書いてあれば、他人が読んでも意味のある文章になりますが、
そういった論理的思考の出来ない人です。もうちょっと賢くなるまでは放置してあげてください。

186 :
このスレでの「馬鹿には無理」は
「ごめんね、馬鹿な僕には返答が無理なので誰かよろしく」って意味なんだが

187 :
おまいら野良ブログ見てコピペばかりしてると
技術は身に付いても知識は身に付かないぞ

188 :
訂正です
>moveToThread(); しなかったときは
>main も thread も同じ threadid でした
これは私の勘違いです
QThread を継承したクラスのインスタンスでは
コンストラクタの moveToThread(this) を
明示的に書かなくても run() メソッドは
違う threadid で実行されていました
なので
http://blog.qt.digia.com/2010/06/17/youre-doing-it-wrong/
に書かれている内容はちょっとへんです
(OS は Windows 7 です)

189 :
>180
そこはdoWorkは使ってるがrunは使ってないぞ.

190 :
>技術は身に付いても知識は身に付かないぞ
そういうひとはそれでいいんじゃないの?
技術は何かを成し得るが知識そのものは何事をも成し得ない。

191 :
>>188
イベントループがあるかないかが問題。

192 :
>>188
だからソース嫁って
ここはお前の学習帳か?

193 :
>>188 もちつけ
http://doc.qt.digia.com/4.7/qobject.html#moveToThread
void QObject::moveToThread ( QThread * targetThread )
Changes the thread affinity for this object and its children.
The object cannot be moved if it has a parent. Event processing will continue in the targetThread.
To move an object to the main thread, use QApplication::instance() to retrieve a pointer to the current application,
and then use QApplication::thread() to retrieve the thread in which the application lives. For example:
 myObject->moveToThread(QApplication::instance()->thread());
If targetThread is zero, all event processing for this object and its children stops.
Note that all active timers for the object will be reset.
The timers are first stopped in the current thread and restarted (with the same interval) in the targetThread.
As a result, constantly moving an object between threads can postpone timer events indefinitely.
A QEvent::ThreadChange event is sent to this object just before the thread affinity is changed.
You can handle this event to perform any special processing.
Note that any new events that are posted to this object will be handled in the targetThread.
Warning: This function is not thread-safe; the current thread must be same as the current thread affinity.
In other words, this function can only "push" an object from the current thread to another thread,
it cannot "pull" an object from any arbitrary thread to the current thread.
See also thread().

194 :
> http://vivi.dyndns.org/tech/Qt/QThread.html
> 長時間処理を行う場合、QThread 派生クラスを定義し、そこで処理をするのではなく、
> 処理を行う QObject 派生クラスを定義し、moveToThread() により
> 実行コンテキストを別スレッドに移すようにするのが本筋だぞ。
間違いではないが、QThreadの派生クラスを定義してはいけない訳ではない。
問題の本質は、run()(実質exec())以外の場所で長時間ループするために、
本来のイベントループ(exec())が実行出来なくなってしまうこと。
あるいは、QObjectの派生クラスを定義することで、run()(exec())自体がないこと。
要するに、QThreadを継承して、run()以外の場所でSLOTを定義すれば良いだけのこと。

195 :
俗に言う無能な働き者ってやつか。
ゆっくり寝て頭冷やせ。

196 :
二度と起きないでくれ。

197 :
別スレッドのコンテキストで実行されるというのと
イベント処理が別スレッドで行われるというのを
読み違えてる気がするな

198 :
>>121
QDirModelはobsoleteになってるよ。
QFileSystemModelを使った方が良いよ。

199 :
C++ Qt 49 QFileSystemModel a simple file explorer example
ttp://www.youtube.com/watch?v=92biLZST6Vg
C++ Qt 48 QDirModel and QTreeView
ttp://www.youtube.com/watch?v=M0PZDrDwdHM

200 :
>>171
>つべこべ言わず具体的な例を言ってください
君はスレッドを使うべきでない程度の技術力しかないということを言い切っている。

201 :
>>172
>自分が判らないからと言って相手も判らないと思い込み
>論を語る基地害ってどこから湧いてくるんだろうな
>>170 の言っていることは正しい、マルチスレッドが分かっていれば、
>>173 のようにそれが美しくないというようないい加減なことは言わない。

202 :
>>174
>メソッドを単にコールするとメインスレッドのコンテキストで実行されるので、
>結局moveToThred()するのは必須
違う、moveToThread()はどのQThreadのイベントループでイベントを受けるようにするというだけで、
コンテキストで実行されるというのではない。

203 :
>>176
>QThread を継承したクラス側のコンストラクタで
>moveToThread(this); すれば綺麗なコードになると思います。
奇麗かどうかではない。moteToThread()をコンストラクタで呼ぶというのは、何をしているか分かっているのか。
>これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、 で問題なさそうです
moveToThread()を呼べば正しいのではない。
こんな程度の理解歯科で機内ら那波、スレッドを使ってはいけない。

204 :
Threading Basics
http://doc.qt.digia.com/qt/thread-basics.html#qobject-and-threads
Most QThread methods are the thread's control interface and are meant to be called from the old thread.
Do not move this interface to the newly created thread using moveToThread();
i.e., calling moveToThread(this) is regarded as bad practice.

205 :
void QObject::moveToThread ( QThread * targetThread )
Changes the thread affinity for this object and its children.
The object cannot be moved if it has a parent. Event processing will continue in the targetThread.
これで決定じゃね?

206 :
>>194
>要するに、QThreadを継承して、run()以外の場所でSLOTを定義すれば良いだけのこと。
これやってみたらうまくいきました
ありがとうございました

207 :
>>206
>>204

208 :
>204
http://blog.qt.digia.com/2010/06/17/youre-doing-it-wrong/

209 :
>>206
>>204>>208

210 :
http://vivi.dyndns.org/tech/Qt/QThread.html
m_myThread = new MyThread;
m_myThread->moveToThread(m_myThread); // 所有権を m_myThread スレッドに移動
connect(m_doWorkButton, SIGNAL(clicked()), m_myThread, SLOT(doWork()));
m_myThread->start();
このひとは何でこんな書き方したのかな?

211 :
1. subclass QThread
2. add signals and slots to do work
3. test code, see that the slots aren’t called “from the right thread”
4. ask google, find moveToThread(this); and comments that “it seems to work when I add this” ←今ココ
ですね
解脱まであと少しです

212 :
基本がわかってないんだろ
だからひたすらアホみたいな書き込みし続けてあげく逆ギレ
ガキは4bitのマシン語から勉強し直せ

213 :
qmlのことも聞いていい?
workerscriptで通信を別スレッドにしたんだけど
QtCreatorから起動してウィンドウの×で終わらせると
ウィンドウ自体は居なくなるんだけど
タイミングに寄るのか、QtCreatorでは終了したことになってないことが多い
QtCreatorから終了させてあげると確実に終了する
×できっちり終わらせるにはどうすればいいんだろう?
Qt4.8.2
WinXP
です。

214 :
>>163からの流れって前にもやったよな
>>165なんか全く同じ内容でレスしてるだろ

215 :
結論が出ていないから同じネタが出る度に同じ人たちが同じ主張を繰り返して無限ループする

216 :
過去ログ見てたかと一瞬思った…
全然詳しくないし勉強中なんだけど、
QObjectをmoveToThreadするのは、ボスワーカーモデル?みたいなのには便利なのかなと思いました
で、せっかく >>213 で新しい話題になったけど、
QML使ったこと無いから反応できない…
コード無いしなあ

217 :
>>213
再現する最小限のコードを貼るとか、QtCreatorからではなくほかから起動するとどうなるか試すとか、
自分で動かんとレスはつかんよ。

218 :
わろた〜〜〜〜

>Qt Japan(@qtjapan)
>Qt Labs Japan の中断に伴い、この Tweet も冬眠します。しばらくは、@qtproject @QtCommercial にて Qt の最新情報をフォローしてください。 #qtjp

219 :
ワロタ、ワロタ...

220 :
DigiaにはNokia時代みたく日本語でQtの情報発信できる社員いんのかな

221 :
NokiaのQt関連の社員はTrolltech社から移動した人だったけど
Digiaには受け入れるだけの余裕は無いだろうしな。
日本ではSRAがどれだけフォローしてくれるか。

222 :
SさんはDigiaに移るってツイートしてたような記憶がある

223 :
>>Digia が Nokia より Qt の全事業を買収しました
ノキアとは一切関わりなくなったってこと?

224 :
Nokiaが社長兼CEOにマイクロソフトの副社長を迎えた時から終りが始まってた

225 :
>>220
OSSなGUIツール扱う層はマニュアルレベルの英語ぐらい難なく読めるだろ

226 :2012/11/02
ノキアに買収されたおかげLGPLになったことは喜ばしい
ノキアの功績はそこ
TOP カテ一覧 スレ一覧 2ch元 削除依頼
WindowsDDK各種についてのスレ (739)
datファイルを共有するP2Pソフト o2on 17dat (371)
【bzr】Bazaarでバージョン管理 Rev 3 (958)
くだすれC++/CLI(初心者用)part2 (614)
Rubyについて(アンチ専用) Part004 (747)
JAVAってこんなことも出来ないの? (473)
--log9.info------------------
別冊羞恥【第14号】 (914)
波乗り棟梁!山口達也 20波目 (440)
少年隊の東山紀之が木村佳乃と結婚 (705)
Twitter愚痴スレ@ジャニ板 (428)
蛇行進・三歩目 (448)
ネンタイの良心〜黄色〜<Part11> (372)
レッツ・△・きーぽん!【其の三十三】 (623)
■V6の3人■  平家派  ■TOKIOの3人■ (268)
売れないV6、K-POPに傾倒してBIGBANGをパクる (294)
(- e -.)爺・其之二十六 (978)
雨上がりの伝説の少年【76】 (818)
二宮和也アンチスレ【8】 (265)
〜自担を美しく撮るために〜7台目 (225)
† すべて魔ぼろし † (265)
▲▲▲第43頁!!!▲▲▲ (682)
お前らが笑ったコピペを貼れinジャニ板【6】 (590)
--log55.com------------------
痛い育児ブログをヲチ62
GIRLS und PANZER/ガールズ&パンツァー(ガルパン)同人ヲチPart.5
プレ花・卒花ヲチ★14
インスタ手書きpostヲチ☆21筆目
The Tower of AION エレスギガル鯖晒しスレ Part 2
しょうがいぢをやヲチスレ96
【京都弁皆無】月賦186回払い【ゥワインセルゥラァ】
戦記ヲチスレ Part.6