1 名前:デフォルトの名無しさん [2012/02/18(土) 11:01:17.97 ] 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 総合スレ 12 【Win/Mac/Linux】 toro.2ch.net/test/read.cgi/tech/1313727889/
82 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 12:57:09.69 ] サイズを小さくするには どんなオプション付けるん?
83 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:43:00.32 ] QT初心者だが、 qmake -project qmake make ってやったら don't know how to make 'FORCE' と出たんだが。
84 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 16:38:25.08 ] qbs の紹介 labs.qt.nokia.co.jp/2012/03/03/introducing-qbs.html 何年もの間、qmake とは愛憎の入り混じった関係を育んできました。 ちゃんと仕事はしてくれるのですが、うまく行かないこともあり、 多くの人がメンテナンスは不可能だと考えています。
85 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:56:06.39 ] noDebug
86 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 02:14:48.29 ] >>82 pdbファイルがでかいので-nomake samplesなのかも
87 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 23:44:22.01 ] Qt初心者です。 resizeEventに関して質問があります。 QPlainTextEditにでかいファイルを読み込ませた状態で 「MainWindowのサイズを変更したことによる リサイズイベント」が発生すると、非常に処理が重いです。 - イベントの発行数を減らす - qsplitの子ウィジェット感のサイズ変更のように、 サイズ変更が終了した時だけ描画する などで対処したいのですが、何か良い方法はありませんか。 現在の第一候補はQPlainTextEditの resizeEvent のオーバーライドで、 イベント発行数を1/5ぐらいにする方法です。 (親クラスのリサイズの呼び出し回数を減らす) ただ、問題もありそうなので、もっと良い方法を探しています。 アドバイスいただけないでしょうか。 よろしくお願いします。
88 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 08:10:51.62 ] >>87 > QPlainTextEditにでかいファイルを読み込ませた状態で > 「MainWindowのサイズを変更したことによる > リサイズイベント」が発生すると、非常に処理が重いです。 リサイズイベントハンドラのソースは以下のようになっています。 if (e->oldSize().width() != e->size().width()) d->relayoutDocument(); たぶん、relayoutDocument() で右端で折り返す処理を行なっているんだけど、 行数が多いとこれに処理時間がかかってしまうんだと思う。 表示されている部分だけをレイアウト処理して、それ以外はマルチスレッド化 するといいとは思うけど、対処はかなり難しいと思う。
89 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 15:05:57.99 ] 初心者質問ですんません エンターを押下したら特定のプッシュボタンをクリックしたのと同じ効果となる方法ってありますか?
90 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 15:24:06.43 ] >>89 > エンターを押下したら特定のプッシュボタンをクリックしたのと同じ効果となる方法ってありますか? keyEvent() で エンター かどうかを判定し、そうなら プッシュボタンの clicked() シグナルを エミットすればいいんじゃね?
91 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 17:48:41.87 ] >>90 clicked()シグナルのエミットのみでは、クリックしたのと同じ効果にはならないし、 エンターの判定には、どこにフォーカスがあるかどうかも考慮する必要があります。 >>89 プッシュボタンのanimateClick()を呼べばクリックしたのと同じことになります。 例えば、どこでもよいからエンターを押したのを判断するならば、QApplicationにイベントフィルターを設定して、 エンター押下を判断して、特定のボタンに対して、animateClick()を呼べばよいでしょう。
92 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 09:25:07.05 ] >>89 QDialogだけかもしれないけど、QPushButtonのdefaultをtrueにすれば良さそう。
93 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 19:39:54.77 ] >>92 QLineEditなどがあったらダメでしょう。
94 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 21:33:35.28 ] Qtwebkitの開発停滞してんなあ
95 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 23:06:48.54 ] ちょっと質問。 QListとかQHashなどのコンテナってスレッドセーフにできてるんですか? 自分の作ったものじゃないウィジェッドを使ってプログラムを作ってる最中なんですが、 スロットの中で、QListのメンバ変数にデータを追加する時に、 アクセスエラーと言われて落ちてしまいます。
96 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 23:24:15.12 ] 基本的にドキュメントにスレッドセーフってわざわざ書いてないものについては 自動で排他制御したりはしてくれないので 別スレッドからインスタンスに触るときは、QMutexLockerなりなんなりで保護しないとダメです
97 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:14:47.45 ] ありがとうございます。なるほど・・・。 QMutexLockerってものがあったんですね。
98 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 03:28:15.66 ] オープンソースのものをとりあえずコンパイルしてみたいという段階の初心者なのですが、 CMake Error at c:/CMake/share/cmake-2.8/Modules/FindQt4.cmake:575 (MESSAGE): It appears you're trying to use Visual Studio with Qt built by mingw. Those compilers do not produce code compatible with each other. Call Stack (most recent call first): CMakeLists.txt:52 (FIND_PACKAGE) これはどう言ったエラーでしょうか mingwとgccでcmakeしろと書いてあったのでやってみています。 エラー文でclがないとエラーが出たのでvisual studio expressを入れて、 次はqtがないとエラーが出たのでqt sdkを入れてみました。 エラー文はqtとvisual studioは競合しているように言ってるように思うのですが・・
99 名前:98 mailto:sage [2012/03/08(木) 05:21:04.47 ] qt sdkでないqtを入れてみたら先に進みました 失礼しました
100 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 07:55:37.66 ] ありがとう
101 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 11:20:27.25 ] Designerへのプラグインの登録についての質問です。 Linuxで自分の作成したプラグインをDesignerで使用するには /usr/lib/qt4/plugins/designerに放りこめば使えるようになりました。 ただこれにはroot権限が要る為、 一般ユーザがそのユーザのみで使用する場合は どのようにDesignerにpluginを登録すれば良いでしょうか。 何かパスを通すなどで解決するのでしょうか。
102 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 18:42:51.60 ] QStringList QCoreApplication::libraryPaths() { const QByteArray libPathEnv = qgetenv("QT_PLUGIN_PATH"); とあるんで、試してないが、環境変数のQT_PLUGIN_PATHにパス追加しておけばいける
103 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 15:04:24.63 ] >>88 アドバイスありがとうございました。 とりあえず「折り返しなし」にしたら問題がマシになりました。 調査していてわかったのですが、どうやら Mac かつ plastiqueStyle で QTreeWidget が重いというバグに関わっているようでした。 描画スタイルをMacやMotifにしたら、だいぶ早くなりました。
104 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 15:06:49.24 ] QLabelにあるテキストを ドラッグで範囲指定して、コピーできないもんですかね。 ぐぐったら継承して対応するというような意見があったのですが、 もっといい方法がありそうな気がします。。。。 なにか知っていらっしゃいますか。
105 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 16:55:47.96 ] >>104 これで出来るんじゃないの? qt-project.org/doc/qt-4.8/qt.html#TextInteractionFlag-enum
106 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 16:56:06.52 ] >>104 textInteractionFlagsプロパティに、Qt::TextSelectableByMouseを指定すると出来る。
107 名前:デフォルトの名無しさん [2012/03/10(土) 16:59:05.47 ] あるPCでは正常に動作するQtのアプリが他のPCの同様な環境では ?fromWCharArray@Qstring@@SA?AV1@PB_WH@ZがQtCore4.dllに無いという エラーメッセージで落ちてしまいます。ググっても同じように泣きを 入れている人がいるのですが解決方法が見出せません。 動作しない環境でコンパイルしなおしてもやっぱり同じエラーで落ちます。 誰か助けて。 Windows7とかWindowsXPで複数のPCで試しました。 それぞれの複数のPCでVisualStudio2005とVisualStudio2010の両方で試しました 規則性はないような感じです。
108 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 17:07:09.70 ] これ? www.qtcentre.org/threads/4625-WCHAR-to-QString-giving-error-in-vs2005 stackoverflow.com/questions/5625884/conversion-of-stdwstring-to-qstring-throws-linker-error > Edit your Visual Studio project settings and under C/C++ -> Language > set the option Treat wchar_t was Built-in Type to No.
109 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 17:10:03.59 ] >>107 違うバージョンのQtCore4.dllがロードされているんじゃないか
110 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 18:24:01.50 ] >>102 返事が遅れてすみません。 ~/qp/myplugin/myplugin.pro というプラグインが在る所 $ env QT_PLUGIN_PATH=~/qp/myplugin/plugin qtcreator と起動することで確かにプラグインが追加されました。 ありがとうございました。
111 名前:110 mailto:sage [2012/03/11(日) 18:26:01.35 ] 絶対パスだと長くなるので相対パスで書いたのですが、 相対パスでは動きませんでした。 失礼しました。
112 名前:108 [2012/03/11(日) 19:46:07.03 ] >>109 QtCore4.dllは1つしかないのでそれはありません 結局Qtのコンパイルを、動作しないPCの環境で行ってからアプリケーションを 再コンパイルして解決しましたかが、釈然としません。
113 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 20:26:31.31 ] >>108 これだとコンパイル時にわかるだろうね 2005と2008のQtCore4.dllをごっちゃにしてるんじゃないかな
114 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 20:29:43.38 ] gccとかmingw のバージョン違いでもおかしくなることあるよ
115 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 23:57:23.00 ] win7の32bitで動いた場所とディレクトリから、64bit(別PCでコンパイル)のdllを取ってきても動かなかったりしたなぁ。 えらい悩んだが、Qt Creator で動いたのなら、どこかに必要な dll は必ずあるはず。
116 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 17:18:33.80 ] mac OSX, pyside 1.1環境でQGLWidgetのrenderTextを呼び出すと以下のようなエラーを吐いてプログラムが落ちてしまいます。 Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 Crashed Thread: 0 Dispatch queue: com.apple.main-thread また、C++で同様にrenderTextを呼び出した場合はエラーは起こりませんが、テキストは表示されません 解決方法が思い当たる方、同じようなエラーが起こる方、レスをいただけると嬉しいです。
117 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 00:11:48.77 ] QtwebkitでQtTestbrowserをもとに簡単なブラウザようなものを作成したのですが どうにも自分のwin環境だと日本語入力が正常に行えません 調べてもissueも出てないし日本語圏で誰も問題にしていないので自分の環境だけなのかな〜と思ったのですが 自分以外の環境でも問題再現するようでしたらQtwebkit Projectにissue投げたいのですがいかがでしょうか?
118 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 00:27:25.29 ] 前にテキストエリアとかで漢字変換すると WebKitが死んでしまうって話しは出てたな
119 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 00:42:40.04 ] メーリス見たところWebkitが落ちるだか画面暗転?するバグは直ってるっぽいですね Aroraあたりのqtwebkitがっつり使ってるブラウザもテキストエリアでキャレットが動かないなどの不具合ありました メーリングリストに投げた方がいいんですかね……?
120 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 03:53:05.89 ] 4.7.3で問題なく動作していたソフトが4.8.0では正常に動作しなくなりました。 色々調べてQNetworkAccessManager::postの実行時にQNetworkReply::UnknownNetworkErrorが起きていることが分かったのですが、 QNetworkReply::UnknownNetworkErrorってどんな原因が考えられるんでしょうか? ちなみに、QNetworkAccessManager::post実行後にネットワークアクセスは発生していません。 そしてエラーを無視して同じ引数で再度postを実行すると問題なく動作します。
121 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 09:36:56.37 ] 色々と調べたところQtwebkitの処理周りのバグはWebkit Bugzillaになげるべきらしいですね… 自分はレポートはできてもリテストできる環境にないのでどなたか投げといてくれると嬉しいです
122 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 22:34:38.00 ] うちの環境では(XPで4.7.4)は特に問題なかった
123 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 23:23:54.09 ] アプリケーションをインストールした後、PCで初めて起動する時にだけ、 特定の処理を行いたいと思ってます。 Qtでの定番のやり方ってありますか? やろうと思えば、いくらでもやり方はあると思いますが、 Qtでいい方法が用意されているのならそれを使おうかな、と。
124 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 23:44:15.51 ] macでQt使ってるんだが、Qt Creatorにアップデートしろって表示されたから アップデートしようとしたら以下のように言われる。 You need a C++ compiler to be able install the Qt SDK. Please install the latest Xcode first before invoking this installer. でも、Xcodeの4.3.1はインストール済みだし何がおかしいんでしょうか?
125 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 00:06:14.67 ] >>122 ありがとうございます Vistaと7、Qt4.8で再現するバグですのでその旨もちゃんとBugzillaに書いておきます。
126 名前:120 mailto:sage [2012/03/15(木) 22:47:28.94 ] 原因が分かりました。 4.8.0ではQHttpNetworkConnectionChannel::allDone内のエラー処理がコメントアウトされていました。 その影響で4.7.3では隠れていた不具合が表に出たようです。 恐らくですが、Connection: closeを指定していても、サーバがレスポンスの末尾に不要なデータを付け足して送ってくると、使い終わったソケットの終了処理が行われないようです。 そして次に同じホストに対してpostを実行すると、この使い終わったソケットを再接続せずに再利用してしまい、書き込みエラーが発生します。 該当部分のコメントによると既知の問題みたいですが、一応報告だけ。
127 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 22:55:31.54 ] Qt初心者です。プログラミングはそれなりに経験があります。 Layoutに対するwidgetのadd, removeでわからない点があるので、 もしよろしければアドバイスいただけないでしょうか。 === メーラーにあるような、分類分けルールを任意の数で追加するウィジェットを作っていて、 データ定義 Widget: 「LineEdit, 複数のボタン, addButton, deleteButton」の構成 というウィジェットを、QScrollArea にsetされる QWidget の VBOXLayoutに追加します。 このデータ定義ウィジェットのaddButtonを押すと、そのオブジェクトの下に新しいデータ定義Widgetを追加。 deleteを押すと、VBoxのwidget数が0でなければ、呼び出したデータ定義ウィジェットを remove という仕組みで動かしています。 ただ、QBoxLayout から removeWidget(w) したオブジェクトが見た目上で消えない場合があります。 (countを出力すると減っています) repaintイベントを呼び出しても表示上の問題は解決しません。 おそらく、 (1) メソッド呼び出しが deleteButtonClicked() Managerに自分自身を渡す (2) Manager の delete (dataDifWidget) で渡されたオブジェクトをremove (3) deleteButtonClicked() 関数に戻る という流れの(2)で処理が残っているのに remove することに問題があるのではないかと推測しています。 なにかよい対処法があったら、アドバイスいただけないでしょうか。 よろしくお願いします。
128 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 23:08:44.82 ] すいません、127 です。 baseWidget->remove(w); w->deleteLater(); としたら、解決しました。 オブジェクトの開放のタイミングとか検証してから質問するべきでした。 お騒がせしました。
129 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:23:57.27 ] QThreadの使い方でこういうの見つけたんだけど、いまいちよく分からん。 vivi.dyndns.org/tech/Qt/QThread.html クラスをthreadに割り当てて、start()では実際のスレッド動作は始まらず、 クラスメンバー関数を呼び出した時点でスレッドとして動作が始まるって理解でいいの?
130 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:55:29.03 ] startでスレッドが始まってデフォルトのrunが呼び出されて、 デフォルトのrunが呼び出されるとexecが呼び出されて、 execが呼び出されるとイベントループに入る だと思う
131 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 19:06:56.95 ] >>129 > クラスをthreadに割り当てて、start()では実際のスレッド動作は始まらず、 > クラスメンバー関数を呼び出した時点でスレッドとして動作が始まるって理解でいいの? いや違う。 start() でスレッドの動作が始まり、イベントループが開始される。 スロットがシグナル経由で呼び出されると、スレッド側のコンテキストで 処理されるということ スレッド間のスロットコールは内部ではイベントとして処理される
132 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 19:37:20.96 ] >>130-131 うーん、ちょっとデバッガで追っかけてみたけど(VC++環境) start()ではSUSPENDでスレッド起動してるだけみたいだけど。 それに呼び出してもないのにexec()が勝手に動いちゃ駄目じゃない?
133 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 19:49:10.15 ] ソース嫁 qt.gitorious.org/qt/qtbase/blobs/master/src/corelib/thread/qthread.cpp
134 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 19:55:24.48 ] >>132 > それに呼び出してもないのにexec()が勝手に動いちゃ駄目じゃない? なんで、exec() が動いちゃ駄目なの? exec() が何をするものか分かってる?
135 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 19:56:06.03 ] ソース読まなくてもQThreadのリファレンスに書いてあったと思うけど
136 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 20:11:30.34 ] >>134 run()で完結する処理ならexec()必要ないし。必要のないものが勝手に動くと駄目だろ。 ざーと見てみたけど、signal受けるとQThreadのイベントハンドラが1回だけ呼び出されて 対応する処理に移動するって感じがするんだけど。 イベントループがずっと動いてるって確証は今のところ見当たらない。
137 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 20:14:09.54 ] 念のため言っておくけど、>>129 のmoveToThreadやinvokeMethod使った処理な。
138 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 20:25:32.25 ] なんで公式のリファレンスを読まないの? 分からないことがあったら一番最初にすることでしょ?
139 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 20:32:13.43 ] >>136 とりあえず、ここを読んでおけ labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/
140 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 20:40:35.67 ] リファレンス読めなくてもソースなら読めるだろ
141 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 05:47:19.10 ] ソース嫁ソース嫁ってしつこくてうざいよ リファレンス読まずにソース読むなんて、仕事がなくて暇なヤツのすること
142 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 08:15:21.78 ] やれやれ ここもそろそろIDが必要になったか
143 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 08:45:34.92 ] リファレンス読んでもわからないからソース読みます
144 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 09:41:08.16 ] 自演乙。やっぱり最低でもID出なきゃダメだね。
145 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 15:47:30.88 ] Qtはちゃんと資本が入ってるお陰で、ちゃんとしたドキュメントが整備されてるし よくあるオプソライブラリみたくソースから入る必要もないだろ
146 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 16:22:39.71 ] リファレンス読んでも分からないときにソース読むのは正しい リファレンス読めば分かるのにソース読むのはマヌケ
147 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 16:28:36.94 ] 馬鹿には無理
148 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 16:50:43.61 ] ソースソスソスソーソーソース ソスーソソススソスソーソース
149 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 17:12:32.26 ] >>136 >run()で完結する処理ならexec()必要ないし。必要のないものが勝手に動くと駄目だろ。 その通りだと思う。シグナルとスロットを使わずにスレッドを使いたいだけならば、exec() は不要でしょう。 >ざーと見てみたけど、signal受けるとQThreadのイベントハンドラが1回だけ呼び出されて >対応する処理に移動するって感じがするんだけど。 >イベントループがずっと動いてるって確証は今のところ見当たらない。 run()でexec()を呼ぶとイベントループがずっと動いて、スレッド間でシグナルとスロットを 使うと、シグナルを送信するとイベントループに投げ込まれ、イベントループ経由でスロット が呼び出されるという仕組み。 >>139 >labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/ これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、 QThreadをサブクラス化するのがダメとみなしてはいけないと思います。
150 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 17:27:55.24 ] >>149 > >labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/ > これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、 > QThreadをサブクラス化するのがダメとみなしてはいけないと思います。 じゃあ、何が正しいの? QThreadをstart()して、QObjectをmoveToThread()するのが絶対じゃないけど、推奨される方法じゃないの?
151 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 17:34:46.56 ] いやちょっと待ってほしい サブクラス化自体がダメなんて話>>149 以外誰もしてないんだけど
152 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 17:55:11.18 ] >>150 どちらも正しいです。moveToThread()の方がよいという訳ではないでしょう。
153 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:07:35.39 ] >>152 > どちらも正しいです。moveToThread()の方がよいという訳ではないでしょう。 ごめん、何と比べてるの? moveToThread() しない方法って、QThread をサブクラス化して、 run() を再実装する方法のことを言ってるの? それだと、QThread のサブクラスのスロットをコールしても 別スレッドのコンテキストで実行されないという問題があるぞ
154 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 20:15:34.98 ] >>153 いつでもシグナルとスロットを使わなければならない訳ではないから、 QThreadをサブクラス化してもしなくてもどちらも正しい方法です。 >136 >run()で完結する処理ならexec()必要ないし。 このような場合には、問題になりませんし、それで済む場合も多いのです。 そもそも、QThreadのrun()は元々実装しなければならなものであり、 スレッドを分かっていれば、サブクラスかをして使いこなせていたのです。 偉い人の記事を読んで、moveToThread()がよいと妄信するのは、技術力がないからです。
155 名前:137 mailto:sage [2012/03/19(月) 20:18:01.57 ] 一応言っておくけど137以降は書いてないからな。 >>149 明示的にrun()もexec()も呼び出してないのに内部でexec()が動いてるってこと? なんか前半と矛盾するんだけど。 invokeMethodでの呼び出しが別スレッドのコンテキストでの実行になるんだから、 exec()がずっと動いてる必要もないだろう。invokeMethodから1度だけ呼ばれれば いいんじゃないの。
156 名前:137 mailto:sage [2012/03/19(月) 20:20:27.32 ] ざーと見たところ、invokeMethodはかなりメタ処理やってるので 遅そうだな。使い道は微妙かもしれない。
157 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 21:26:08.92 ] Qtアプリはシグナルスロットを基盤として設計されるものであり、 スレッドが関わってもその方針が維持できるようになったのは大きな進歩だ 昔はサブクラス化が必須であったが、この進歩のおかげで今となってはサブクラス化は例外的なものであり、 決して"間違い"ではないものの、推奨されたものではない QThreadのrunがexecを呼び出すようになったのは、ただのお節介ではない 使い方を理解していればどちらでもよいなんて、Qtが他と比べて優れている点を理解していない証拠だ 人の技術力をとやかく言う前に、自分の技術力と読解力を疑った方がよい
158 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 21:31:09.82 ] そろそろmoc使わないでもいいようになってくれ
159 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 21:40:25.36 ] >>155 お前は結局何が言いたいの? リファレンス読んでもまだ仕様が分からないのか、それともQtの仕様は糞だって言いたいの? お前といい>>149 といい、もうぼくのかんがえたさいきょうのらいぶらりでも作ってろよ
160 名前:137 mailto:sage [2012/03/19(月) 22:08:58.17 ] >>159 え?何を言ってるのかわからない。 俺は単にmoveToThread()ってどういう挙動?って聞いてただけ。 シグナル受けるかinvokeMethod経由で呼ばれたタイミングで初めて スレッドが動き出すのかと推測してたんだけど、exec()の話が出てきて よく分からなくなったんだわ。
161 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 22:20:03.75 ] いやお前今の今までそんな質問一度もしてないから スレッドが始まるタイミングとイベントループの話だけじゃん 一度自分が何を理解していないのか考えをまとめた方がいいぞ
162 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 23:20:53.09 ] 横レスすみません class Thread : public QThread { protected: void run() { QNetworkAccessManager manager; reply = manager.get(QNetwotkRequest(QUrl("hoge/fuga.html "))); connect(reply, SIGNAl(finished()), this, SLOT(someSlot())); exec(); } protected slots: void someSlot(); private: QNetworkreply *reply; } void func() { ・・・ Thread x; x.start(); } このとき、Thread::run()のイベントループ中に呼ばれたsomeSlot()は、 Thread::run()と同じスレッドで実行されると思っていたのですが、違うのでしょうか
163 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 04:48:42.32 ] 関数内でQThread::currentThreadId()を呼び出してスレッドID表示してみればどのスレッドでその関数が実行されてるかわかるよ
164 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 07:25:50.19 ] >>162 せめて、コンパイルエラーが発生しないコードを示せよ。 すぐに検証できることを人に聞くだけで、自分ではいっさい検証してないってことか?
165 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 13:46:24.52 ] 入門Qt4プログラミングのサンプルコードが、QThreadをサブクラス化して処理を追加するようになってるのが良くないね あれで誤解している人も結構いそう
166 名前:124 mailto:sage [2012/03/20(火) 22:26:29.08 ] 需要は無さそうですが、解決したので念のため。 今のXcodeではメニューのXcodeからPreferencesからDownloadsで Command Line Tools for Xcode ってのをインストールする必要がありました。
167 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 17:49:08.55 ] QTextCodec::toUnicodeとQTextDecoder::toUnicode(ConversionFlags設定なし)の違いって何なんでしょうか? 実行中同じオブジェクトが同じコーデックで何度もデコードするんですが、こういう場合どちらを利用するのがベターなんでしょうか?
168 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 03:33:55.96 ] >>165 そう言えば、でるでると言ってなかなかでない「でるでる詐欺」のQt翻訳本はどうなったのかな?
169 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 05:34:30.45 ] 4月に実践Qt4プログラミングが出るらしいけど、そろそろQt5がやってくるのでは ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-87311-507-8
170 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 05:42:32.29 ] Qt5って夏ごろだっけか てかもう春だしな
171 名前:デフォルトの名無しさん [2012/03/22(木) 14:51:40.23 ] QTextEditでsetHtml("<img src='path'>")としてもうまく画像が表示されず ↓こんな感じになってしまうのですがどこがまずいのでしょうか uploader.sakura.ne.jp/src/up89806.png コピーしてEvernoteに貼り付けるとちゃんと表示されるのでパスが間違っている等のミスはなさそうなのですが。
172 名前:デフォルトの名無しさん [2012/03/22(木) 16:00:10.30 ] まさか一時間で流れるとは…画像上げなおしました www.rupan.net/uploader/download/1332399473.png
173 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 16:38:45.85 ] これがいるんじゃね? qt-project.org/doc/qt-4.8/qtextdocument.html#addResource
174 名前:デフォルトの名無しさん [2012/03/22(木) 19:30:07.08 ] >>173 ありがとうございます。無事いけました。
175 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 20:55:39.90 ] QtスレっちゅうかQtドキュメント探すスレやな ttp://qt-project.org/doc/ ttp://doc.qt.nokia.com/ を含むレス数がQt力や
176 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 15:45:01.71 ] そして時は動き出す
177 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 17:24:58.39 ] −−−−−−−−−−−−−−−−終了−−−−−−−−−−−−−−−−
178 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 01:38:53.36 ] QMLなんかより本体の方をまともにしてくれ
179 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 06:25:32.67 ] 最近Qt始めたんだけど、そんなにバギーなん?
180 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 06:47:52.89 ] 別にバギーじゃないお
181 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 06:48:54.32 ] 問題が多いだけ
182 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 20:39:12.68 ] Qt4にやっと慣れてきたレベルの初級者です。 現在、ジャンルごとにタブで表示するログ閲覧用のエディタを開発しております。 QPlainTextEdit での巨大ファイルの処理に関してアドバイスをいただけないでしょうか。 実現したいことは、「 QPlainTextEdit のレスポンスは遅くてもいいので、 それより上位の Widget のレスポンスは早くしたい」ということです。 現在の処理は (1) Worker Thread で file から read (2) buffer(QString) につめこむ (3) 一定量溜まったら、Signal を emit (4) main thread の Slot でそれを受け取る (5) plainTextEdit に appendPlainTextでバッファのStringを追加. (6) (1)に戻る という流れにしてみたのですが、どうやら(5)の工程が遅いらしく、 main の GUI がファイル読み込み中に freeze します。 (試しに appendPlainText をコメントアウトしたところ、freeze はしなくなりました) Widget自体を別スレッドにすることは、どうやらできなさそうなので、 plainTextEdit を別スレッドにするという対処はできそうにありません。 qt-project.org/forums/viewthread/4002 そのため、完全に手詰まり状態となってしまいました。 もしよかったら freeze を防ぐための アドバイスいただけないでしょうか。