- 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/
- 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 を防ぐための アドバイスいただけないでしょうか。
- 183 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 21:40:40.22 ]
- 一定量溜まったら、ってどのくらい?
KB単位なのかMB単位なのか あまりでかいのなら見えてるところだけappendして遅延ロードさせるとか
- 184 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 22:17:30.28 ]
- >>183
Line base なので 10000行ごとにロードしています。 appendの処理が重いため、この量が少ないと処理時間が伸びました。 遅延ロードも検討したのですが、私のプログラミングスキルだと、 利便性と兼ね合いを持たせて実装する仕組みを思いつきませんでした。 他のエディタのアルゴリズムとか調べてみると発見があるかもしれないですね。 アドバイスありがとうございます。
- 185 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 23:06:01.11 ]
- 本質的ではないのですが、appendPlainText を insertPlainText に変えて、
このページにあるように SyntaxHighlighter をロード中に切ると、 処理時間が半分程度になりました。 https://qt-project.org/doc/qt-4.7/QSyntaxHighlighter.html (もともと SyntaxHighlighter はロード中は「内部で即return」 するようにしていたので、 あまり影響はないですが。。。)
- 186 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 14:20:40.74 ]
- Qt Creatorってemacsのキーバインドないの?
- 187 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 15:03:47.18 ]
- 少なくともデフォルトではないんでなかったか
キーボードの挙動は結構自分で変えられるから試してみてはいかがか
- 188 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 22:14:23.21 ]
- Qt CreatorとかQt Assistantのアイコンがそっくりすぎる
もう少しぱっと見てわかるようにならないかな
- 189 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 05:29:06.19 ]
- 馬鹿には無理
- 190 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/03/29(木) 23:37:45.82 ]
- 今Twitterのクライアント作っててGUIにQt4を使っています。
TLを表示する時、Twitter側からつぶやきの情報を取得して QLavel作成して描画しようと思っているんですが、 ツイートの文字数、ウィンドウの大きさによってラベルの高さを変えたいです。 リファレンスがわかりにくくてよく分からなかったんですが setGeometry関数は横の長さだけ指定して 縦を自動調整してくれるようにできるんでしょうか。 できないなら方法ないでしょうか。 丸投げな質問ですいません。
- 191 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/30(金) 00:31:51.58 ]
- heightForWidthとか
- 192 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/03/30(金) 00:34:47.49 ]
- >>191
今調べられる環境では無いですが 多分引数intで縦の長さ決定する関数ですね。 その逆って無いですか?
- 193 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/30(金) 09:00:57.21 ]
- QTableViewとは違うエリアで変化したデータの変更を、すぐにQTableViewの描画に
反映することってできますか? 今、設定された値によってテーブルの背景色を変化させるようにしていますが、 違うウィンドウで値を変えても、すぐに描画が反映されず、 QTableViewが貼りつけてあるウィンドウに行って、クリックとか何かイベントを 起こさせないと反映されません。 わざわざそのウィンドウに行かずに、すぐに反映されるようにするにはどうしたらいいんでしょうか?
- 194 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/30(金) 09:24:23.35 ]
- >>193
QTabView を update() してる?
- 195 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 04:20:48.74 ]
- Qtはいつまで32bitしか配らないのか?
自前でビルドするとエラー出るし
- 196 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 09:47:18.31 ]
- ん?Linuxはx86-64版を配布しておるが。Windowsの話か?
- 197 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 10:26:51.67 ]
- Mac版も64bitだな
- 198 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 14:15:56.23 ]
- Win版も非公式ビルドなら、4.8.0のx64がGoogle Codeにある
- 199 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 14:18:33.15 ]
- もしかしてこれのことかね?
code.google.com/p/qt-msvc-installer/
- 200 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 09:39:43.22 ]
- 重たい処理をしてる最中の描画がうまく働かず、GUIの一部がうまくアップデートされない状態に時々ならないですか?
その箇所をアップデートするようなイベント(クリックとか、マウスオーバーとか)で元に戻るんですが、 放置しておくと永遠に見えないままです。 定期的(1000ms間隔ぐらい?) な MainWindow のリフレッシュとかが必要なんですかね。。。 Macだとこの問題は発生しないのですが、Windowsだと起きます。
- 201 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 14:38:00.95 ]
- >>200
> 重たい処理をしてる最中の描画がうまく働かず、GUIの一部がうまくアップデートされない状態に時々ならないですか? イベントハンドラで重たい処理をしてれば、イベントループが回らないので GUIがうまく更新されないのはしょうがないんじゃないかい? 重い処理は別スレッドで処理しないと駄目なんじゃないかな
- 202 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 15:09:12.57 ]
- よく分からんのですが、qtのオープンソース版ってひとつしか頒布されてなくて、
(自分がインストールしたのはこれです → Qt by Nokia v4.8.0 (MinGW OpenSource) ) >>2のLGPLライセンスだと思って使ってもいいってことですか? つまり、LGPLライセンス用とGPLライセンス用の2種が存在するわけではないですか?
- 203 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 15:21:08.19 ]
- GPL、LGPU好きな方で使える
- 204 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 15:33:35.09 ]
- あ、即レスありがとうございます
- 205 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/01(日) 18:08:32.63 ]
- 初歩的だと思いのですが、質問させてください
QtCreatorを使っており、ui_mainwindowを読み込んだ MainWindowクラスがあります。 uiではMainWindowウィジェットの子ウィジェットとしてQTabWidgetクラスのtabsウィジェットが 設定されています。 このtabウィジェットに対して色々な処理を加えたい (コンテキストメニューでタブを追加したり消したりするような処理など) 時に、この処理をMainWindowクラスに書くのは何かちがうのかなと思ったのですが、 別個にTabsクラスを作って、それにtabsを渡して色々処理するようにしようと思ったのですが セオリー的にはどうなっているのでしょうか 教えていただけますと嬉しいです
- 206 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 20:51:51.75 ]
- Tabsクラスにtabsを渡すって何?
- 207 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 22:12:58.87 ]
- >>205
コンテキストメニューでタブを追加するという処理なら、 ・コンテキストメニューを作ってQActionをアサインする ・QAction::triggered()シグナルをMainWindowクラスで受け取る ・追加するtabをQWidgetで作成(もしくはあらかじめ作る) ・ui->tabs->addTab()で追加する で鉄板だと思うのだが、好きにやってみたらいいんじゃね?
- 208 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 00:24:56.43 ]
- >>201
GUI に依存する重たい処理なんで、別スレッドに対比できないんですよね。 QWidgetの派生クラスの「1行の関数呼び出し」がえらい負荷をかけているらしく、 要素の分解もできない状態です。 具体的には、以前相談させていただいた QPlainTextWidget の String の追加処理(insertPlainText)を、高速化できないので、 (1) テキストを追加 (2) 重くなる (3) GUI がアップデートされない (4) TextEdit 以外の 他のGUIイベントが発生しても、それが反映されない (5) タッチされるまで見えないまま という状態になっています。 QMainWindowの派生クラスで Thread を持ち、それが while(true){ msleep(1000); emit windowUpdateSignal; } という形で、アップデートをかけ続けるという動きを考えたのですが、 あまりイケてなさそうな気がして。。。
- 209 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 00:54:38.58 ]
- エスパーじゃないんでよくわからんが、QStringの扱い方がまずいんでないの?
コピーしまくってたりとか、変なループ回して同じ処理を何度も繰り返したりとか。 メッセージが回らなくなるレベルの重さなんて、今時の環境だったらよっぽど無駄なことしないと難しいよ。
- 210 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 07:15:50.94 ]
- ループの中に QApplication::processEvents() を入れるとか、そういう話じゃない?
- 211 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 08:19:06.11 ]
- >>209
QStringの扱いがまずいというのはあるかもですね。 本来、QPlainTextEditは大量の文書を入れる用途には向いていないようなのに、 数十万行程度読みこませることがあるので。。。 あと、signal の送受信の際に、内部的にQStringを何度もコピーしている可能性も 考えたほうがいいかもしれないです。。。 >>210 それも以前試したのですが、目に見えた改善はなかったです。 ううむ。
- 212 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 10:00:08.79 ]
- 試してないが、QTextDocumentを別スレッドで作って、
そこにテキストを設定した後にQPlainTextEditにsetDocumentする手は使えない? QTextDocument::clone() を使ってコピーする必要はありそうだが。 qt-project.org/doc/qt-4.8/threads-modules.html#threads-and-rich-text-processing 動的にテキストが更新されていく場合は難しいかもしれないが。
- 213 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 10:06:18.35 ]
- >>211
> 本来、QPlainTextEditは大量の文書を入れる用途には向いていないようなのに、 > 数十万行程度読みこませることがあるので。。。 それが問題だと思う。 巨大文書用のエディタクラスを作るしかないかも。 #仕事として発注してくれれば受けるけど、そこまでコストかける気はなさそうだね
- 214 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 14:08:43.81 ]
- >>211
>あと、signal の送受信の際に、内部的にQStringを何度もコピーしている可能性も >考えたほうがいいかもしれないです。。。 QStringはコビーオンライトするようになっているので、ポインタサイズしかコピーしていません。
- 215 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 17:47:45.85 ]
- >>205
QtCreatorで配置したオブジェクトに任意の処理を加えたいって ことならオレはこうしてる。 これならQMainWindowクラスに記述するコードは必要最低限に なるかな。 void MainWindow::on_actionOpen_triggered() { MyArea *localarea = centralWidget()->findChild<MyArea *>(); if (localarea!=0) { localarea->on_actionOpen_triggered(); } }
- 216 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 17:58:41.07 ]
- ながれをぶったぎってすみませんが、
Qt4.8.0以降でOpenGLを使う場合、glutをincludeしなくなっているので gluLookAt()が使えません。そうすると、自前で視点変換の行列を 用意しなければならないのですか。それとも代わりの関数がどこかの クラスに用意されているのでしょうか。
- 217 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 19:05:22.68 ]
- #include <GL/glu.h> を追加すればいいんでないの
ttps://bugreports.qt-project.org/browse/QTBUG-12227 そういう問題じゃない?
- 218 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 20:33:42.11 ]
- >>217
なるほど。たしかにglu.hでうごくみたいですね。 <QtOpenGL/QGLWidget>のなかでgl.hしか読み込んでいなかったので そうしようと思いませんでした。 リンクによると、Qtではglutを使わない方針になっているんですね。
- 219 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 20:44:55.49 ]
- >>218
Qt4.8から使い始めたから知らなかったけど、 includeしてたのってGLUTじゃなくてGLUじゃない? OSXはこんな感じで書けばいいみたい ttp://qt-project.org/forums/viewthread/14269
- 220 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 23:24:29.17 ]
- Directorry に対する FiliInfo の absolute path 系って Mac と Windowsで挙動が違うみたいですね。
fileInfo.absoluteDir().absolutePath() とやった際に、 Macだと 自分のディレクトリを含んだパスを返し、 Windowsだと 親のディレクトリのパスを返しました。 fileInfo.absoluteFilePath() だけだと、Mac は最後に / がついて、 windows は / なし。 dirPath = fileInfo.absoluteFilePath(); if(dirPath.endWith("/"){ dirPath = dirPath.left(dirPath.length() - 1); } のような形で、両者の違いを吸収できました。 ただ、数千行書いて、初めて処理結果の食い違いが出てきたレベルなので、 やはり汎用性が高いですね。 あと、nullを間違えて addWidget した時の挙動も若干違いましたが。
- 221 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 23:44:06.97 ]
- >>213
ググったら似たようなトラブルが山のように出てきたので、 おそらくそうですね。 プロっぽい人の回答だと、 1) オンラインのログのようなものなら、組み込み機能の行数制限を使って、古い行を上から自動で消す 2) ページングに細かくぶったぎる というのがよく見られるパターンでした。 私も趣味で開発(タダ)してるんで、金はかけられないですw 巨大文書用のエディタクラスですか。。。 作るならQPlainTextEditと上位クラスのコード読まないと無理そうですね。
- 222 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 23:52:48.62 ]
- >> 212
ああ、それいいかもですね。 setTextDocument の スピード について main thread で検証してみて、 それが速ければ試してみる価値がありそうです。 結果は後日報告します。ありがとうございます。 いやー、随分悩んだのですが、相談すると自分が考えつかないような 解法を色々教えていただけて、助かります。
- 223 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/03(火) 23:10:53.31 ]
- Qt 5 Alphaリリースしました
- 224 名前:108 [2012/04/04(水) 03:52:13.17 ]
- Qt5では、簡単に言うと何がいいのでしょう?
- 225 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 11:48:51.05 ]
- >>224
qt-project.org/wiki/Qt-5-Alpha
- 226 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 18:19:44.50 ]
- >>225
もう和訳でてる labs.qt.nokia.co.jp/2012/04/04/qt-5-alpha.html
- 227 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 22:29:23.76 ]
- >>199
これつかわないと64ビット版のwindows向けにビルドできないのでしょうか???
- 228 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 00:22:05.26 ]
- >>227
WOW64でいいなら使わなくてもよいでしょう
- 229 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 00:25:37.15 ]
- 組み込みでもOpenGL使えるのかな
- 230 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 01:36:43.32 ]
- >>229
ドライバがあれば、な。
- 231 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 07:58:01.23 ]
- >>229
Qt 4ではドライバがあっても問題が多過ぎて満足に使えませんでした。 問題を報告したら、今のアーキテクチャではもう無理なので、Lighthouse迄待ってくれと言われました。 Qt 4.8のLighthouseのOpenGLドライバは、問題がまだあるけれどそこそこ動きます。
- 232 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 11:05:12.73 ]
- みなさんって Qt4 を Windows か Mac、Linux もしくは 複数のどれで利用しています?
アプリケーションの大枠としてはだいたい同じ挙動になりますが、OSごとに若干GUI系のレスポンスが違いませんか。。。 Windowsだけ、このWidget_Aが遅くてアップデートがうまく動かないとか、 Macだけ、このWidget_Bが遅くて、もっさりしているとか。 Windowsだけ、QLineEdit(コピペしたときの見た目が更新されない), と QTreeWidget(1クリックでフォーカスが表示されない) のアップデートが遅く、 Mac だけ QTreeWidget の plasticStyle がもっさり(カクカク)しています。 解消したいんですが、OS特有なんで原因がよくわからないんですよね。。。
|

|