トップページ⇒tech
1001コメント311KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん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】
http://toro.2ch.net/test/read.cgi/tech/1313727889/
0153デフォルトの名無しさん2012/03/19(月) 18:07:35.39
>>152
> どちらも正しいです。moveToThread()の方がよいという訳ではないでしょう。
ごめん、何と比べてるの?
moveToThread() しない方法って、QThread をサブクラス化して、
run() を再実装する方法のことを言ってるの?

それだと、QThread のサブクラスのスロットをコールしても
別スレッドのコンテキストで実行されないという問題があるぞ
0154デフォルトの名無しさん2012/03/19(月) 20:15:34.98
>>153
いつでもシグナルとスロットを使わなければならない訳ではないから、
QThreadをサブクラス化してもしなくてもどちらも正しい方法です。

>136
>run()で完結する処理ならexec()必要ないし。
このような場合には、問題になりませんし、それで済む場合も多いのです。
そもそも、QThreadのrun()は元々実装しなければならなものであり、
スレッドを分かっていれば、サブクラスかをして使いこなせていたのです。

偉い人の記事を読んで、moveToThread()がよいと妄信するのは、技術力がないからです。
01551372012/03/19(月) 20:18:01.57
一応言っておくけど137以降は書いてないからな。

>>149
明示的にrun()もexec()も呼び出してないのに内部でexec()が動いてるってこと?
なんか前半と矛盾するんだけど。

invokeMethodでの呼び出しが別スレッドのコンテキストでの実行になるんだから、
exec()がずっと動いてる必要もないだろう。invokeMethodから1度だけ呼ばれれば
いいんじゃないの。
01561372012/03/19(月) 20:20:27.32
ざーと見たところ、invokeMethodはかなりメタ処理やってるので
遅そうだな。使い道は微妙かもしれない。
0157デフォルトの名無しさん2012/03/19(月) 21:26:08.92
Qtアプリはシグナルスロットを基盤として設計されるものであり、
スレッドが関わってもその方針が維持できるようになったのは大きな進歩だ
昔はサブクラス化が必須であったが、この進歩のおかげで今となってはサブクラス化は例外的なものであり、
決して"間違い"ではないものの、推奨されたものではない
QThreadのrunがexecを呼び出すようになったのは、ただのお節介ではない
使い方を理解していればどちらでもよいなんて、Qtが他と比べて優れている点を理解していない証拠だ
人の技術力をとやかく言う前に、自分の技術力と読解力を疑った方がよい
0158デフォルトの名無しさん2012/03/19(月) 21:31:09.82
そろそろmoc使わないでもいいようになってくれ
0159デフォルトの名無しさん2012/03/19(月) 21:40:25.36
>>155
お前は結局何が言いたいの?
リファレンス読んでもまだ仕様が分からないのか、それともQtの仕様は糞だって言いたいの?
お前といい>>149といい、もうぼくのかんがえたさいきょうのらいぶらりでも作ってろよ
01601372012/03/19(月) 22:08:58.17
>>159
え?何を言ってるのかわからない。

俺は単にmoveToThread()ってどういう挙動?って聞いてただけ。

シグナル受けるかinvokeMethod経由で呼ばれたタイミングで初めて
スレッドが動き出すのかと推測してたんだけど、exec()の話が出てきて
よく分からなくなったんだわ。
0161デフォルトの名無しさん2012/03/19(月) 22:20:03.75
いやお前今の今までそんな質問一度もしてないから
スレッドが始まるタイミングとイベントループの話だけじゃん
一度自分が何を理解していないのか考えをまとめた方がいいぞ
0162デフォルトの名無しさん2012/03/19(月) 23:20:53.09
横レスすみません

class Thread : public QThread
{
protected:
 void run() {
  QNetworkAccessManager manager;
  reply = manager.get(QNetwotkRequest(QUrl("http://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()と同じスレッドで実行されると思っていたのですが、違うのでしょうか
0163デフォルトの名無しさん2012/03/20(火) 04:48:42.32
関数内でQThread::currentThreadId()を呼び出してスレッドID表示してみればどのスレッドでその関数が実行されてるかわかるよ
0164デフォルトの名無しさん2012/03/20(火) 07:25:50.19
>>162
せめて、コンパイルエラーが発生しないコードを示せよ。
すぐに検証できることを人に聞くだけで、自分ではいっさい検証してないってことか?
0165デフォルトの名無しさん2012/03/20(火) 13:46:24.52
入門Qt4プログラミングのサンプルコードが、QThreadをサブクラス化して処理を追加するようになってるのが良くないね
あれで誤解している人も結構いそう
01661242012/03/20(火) 22:26:29.08
需要は無さそうですが、解決したので念のため。

今のXcodeではメニューのXcodeからPreferencesからDownloadsで
Command Line Tools for Xcode
ってのをインストールする必要がありました。
0167デフォルトの名無しさん2012/03/21(水) 17:49:08.55
QTextCodec::toUnicodeとQTextDecoder::toUnicode(ConversionFlags設定なし)の違いって何なんでしょうか?
実行中同じオブジェクトが同じコーデックで何度もデコードするんですが、こういう場合どちらを利用するのがベターなんでしょうか?
0168デフォルトの名無しさん2012/03/22(木) 03:33:55.96
>>165
そう言えば、でるでると言ってなかなかでない「でるでる詐欺」のQt翻訳本はどうなったのかな?
0169デフォルトの名無しさん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
0170デフォルトの名無しさん2012/03/22(木) 05:42:32.29
Qt5って夏ごろだっけか
てかもう春だしな
0171デフォルトの名無しさん2012/03/22(木) 14:51:40.23
QTextEditでsetHtml("<img src='path'>")としてもうまく画像が表示されず
↓こんな感じになってしまうのですがどこがまずいのでしょうか
http://uploader.sakura.ne.jp/src/up89806.png
コピーしてEvernoteに貼り付けるとちゃんと表示されるのでパスが間違っている等のミスはなさそうなのですが。
0172デフォルトの名無しさん2012/03/22(木) 16:00:10.30
まさか一時間で流れるとは…画像上げなおしました
http://www.rupan.net/uploader/download/1332399473.png
0173デフォルトの名無しさん2012/03/22(木) 16:38:45.85
これがいるんじゃね?
http://qt-project.org/doc/qt-4.8/qtextdocument.html#addResource
0174デフォルトの名無しさん2012/03/22(木) 19:30:07.08
>>173
ありがとうございます。無事いけました。
0175デフォルトの名無しさん2012/03/22(木) 20:55:39.90
QtスレっちゅうかQtドキュメント探すスレやな
ttp://qt-project.org/doc/
ttp://doc.qt.nokia.com/
を含むレス数がQt力や
0176デフォルトの名無しさん2012/03/25(日) 15:45:01.71
そして時は動き出す
0177デフォルトの名無しさん2012/03/25(日) 17:24:58.39
−−−−−−−−−−−−−−−−終了−−−−−−−−−−−−−−−−
0178デフォルトの名無しさん2012/03/27(火) 01:38:53.36
QMLなんかより本体の方をまともにしてくれ
0179デフォルトの名無しさん2012/03/27(火) 06:25:32.67
最近Qt始めたんだけど、そんなにバギーなん?
0180デフォルトの名無しさん2012/03/27(火) 06:47:52.89
別にバギーじゃないお
0181デフォルトの名無しさん2012/03/27(火) 06:48:54.32
問題が多いだけ
0182デフォルトの名無しさん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 を別スレッドにするという対処はできそうにありません。
http://qt-project.org/forums/viewthread/4002
そのため、完全に手詰まり状態となってしまいました。

もしよかったら freeze を防ぐための アドバイスいただけないでしょうか。
0183デフォルトの名無しさん2012/03/27(火) 21:40:40.22
一定量溜まったら、ってどのくらい?
KB単位なのかMB単位なのか

あまりでかいのなら見えてるところだけappendして遅延ロードさせるとか
0184デフォルトの名無しさん2012/03/27(火) 22:17:30.28
>>183
Line base なので 10000行ごとにロードしています。
appendの処理が重いため、この量が少ないと処理時間が伸びました。

遅延ロードも検討したのですが、私のプログラミングスキルだと、
利便性と兼ね合いを持たせて実装する仕組みを思いつきませんでした。
他のエディタのアルゴリズムとか調べてみると発見があるかもしれないですね。
アドバイスありがとうございます。
0185デフォルトの名無しさん2012/03/27(火) 23:06:01.11
本質的ではないのですが、appendPlainText を insertPlainText に変えて、
このページにあるように SyntaxHighlighter をロード中に切ると、
処理時間が半分程度になりました。
https://qt-project.org/doc/qt-4.7/QSyntaxHighlighter.html
(もともと SyntaxHighlighter はロード中は「内部で即return」 するようにしていたので、
あまり影響はないですが。。。)
0186デフォルトの名無しさん2012/03/28(水) 14:20:40.74
Qt Creatorってemacsのキーバインドないの?
0187デフォルトの名無しさん2012/03/28(水) 15:03:47.18
少なくともデフォルトではないんでなかったか
キーボードの挙動は結構自分で変えられるから試してみてはいかがか
0188デフォルトの名無しさん2012/03/28(水) 22:14:23.21
Qt CreatorとかQt Assistantのアイコンがそっくりすぎる
もう少しぱっと見てわかるようにならないかな
0189営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 05:29:06.19
馬鹿には無理
0190営利利用に関するLR審議中@詳細は自治スレへ2012/03/29(木) 23:37:45.82
今Twitterのクライアント作っててGUIにQt4を使っています。
TLを表示する時、Twitter側からつぶやきの情報を取得して
QLavel作成して描画しようと思っているんですが、
ツイートの文字数、ウィンドウの大きさによってラベルの高さを変えたいです。
リファレンスがわかりにくくてよく分からなかったんですが
setGeometry関数は横の長さだけ指定して
縦を自動調整してくれるようにできるんでしょうか。
できないなら方法ないでしょうか。
丸投げな質問ですいません。
0191営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 00:31:51.58
heightForWidthとか
0192営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 00:34:47.49
>>191
今調べられる環境では無いですが
多分引数intで縦の長さ決定する関数ですね。
その逆って無いですか?
0193営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 09:00:57.21
QTableViewとは違うエリアで変化したデータの変更を、すぐにQTableViewの描画に
反映することってできますか?

今、設定された値によってテーブルの背景色を変化させるようにしていますが、
違うウィンドウで値を変えても、すぐに描画が反映されず、
QTableViewが貼りつけてあるウィンドウに行って、クリックとか何かイベントを
起こさせないと反映されません。

わざわざそのウィンドウに行かずに、すぐに反映されるようにするにはどうしたらいいんでしょうか?
0194営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 09:24:23.35
>>193
QTabView を update() してる?
0195営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 04:20:48.74
Qtはいつまで32bitしか配らないのか?
自前でビルドするとエラー出るし
0196営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 09:47:18.31
ん?Linuxはx86-64版を配布しておるが。Windowsの話か?
0197営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 10:26:51.67
Mac版も64bitだな
0198営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 14:15:56.23
Win版も非公式ビルドなら、4.8.0のx64がGoogle Codeにある
0199営利利用に関するLR審議中@詳細は自治スレへ2012/03/31(土) 14:18:33.15
もしかしてこれのことかね?
http://code.google.com/p/qt-msvc-installer/
0200営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 09:39:43.22
重たい処理をしてる最中の描画がうまく働かず、GUIの一部がうまくアップデートされない状態に時々ならないですか?
その箇所をアップデートするようなイベント(クリックとか、マウスオーバーとか)で元に戻るんですが、
放置しておくと永遠に見えないままです。

定期的(1000ms間隔ぐらい?) な MainWindow のリフレッシュとかが必要なんですかね。。。
Macだとこの問題は発生しないのですが、Windowsだと起きます。
0201営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 14:38:00.95
>>200
> 重たい処理をしてる最中の描画がうまく働かず、GUIの一部がうまくアップデートされない状態に時々ならないですか?
イベントハンドラで重たい処理をしてれば、イベントループが回らないので
GUIがうまく更新されないのはしょうがないんじゃないかい?

重い処理は別スレッドで処理しないと駄目なんじゃないかな
0202営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 15:09:12.57
よく分からんのですが、qtのオープンソース版ってひとつしか頒布されてなくて、
(自分がインストールしたのはこれです → Qt by Nokia v4.8.0 (MinGW OpenSource) )
>>2のLGPLライセンスだと思って使ってもいいってことですか?

つまり、LGPLライセンス用とGPLライセンス用の2種が存在するわけではないですか?
0203営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 15:21:08.19
GPL、LGPU好きな方で使える
0204営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 15:33:35.09
あ、即レスありがとうございます
0205営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:08:32.63
初歩的だと思いのですが、質問させてください

QtCreatorを使っており、ui_mainwindowを読み込んだ
MainWindowクラスがあります。
uiではMainWindowウィジェットの子ウィジェットとしてQTabWidgetクラスのtabsウィジェットが
設定されています。

このtabウィジェットに対して色々な処理を加えたい
(コンテキストメニューでタブを追加したり消したりするような処理など)
時に、この処理をMainWindowクラスに書くのは何かちがうのかなと思ったのですが、
別個にTabsクラスを作って、それにtabsを渡して色々処理するようにしようと思ったのですが
セオリー的にはどうなっているのでしょうか

教えていただけますと嬉しいです
0206営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 20:51:51.75
Tabsクラスにtabsを渡すって何?
0207営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 22:12:58.87
>>205
コンテキストメニューでタブを追加するという処理なら、
・コンテキストメニューを作ってQActionをアサインする
・QAction::triggered()シグナルをMainWindowクラスで受け取る
・追加するtabをQWidgetで作成(もしくはあらかじめ作る)
・ui->tabs->addTab()で追加する
で鉄板だと思うのだが、好きにやってみたらいいんじゃね?
0208営利利用に関するLR審議中@詳細は自治スレへ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; }
という形で、アップデートをかけ続けるという動きを考えたのですが、
あまりイケてなさそうな気がして。。。
0209営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 00:54:38.58
エスパーじゃないんでよくわからんが、QStringの扱い方がまずいんでないの?
コピーしまくってたりとか、変なループ回して同じ処理を何度も繰り返したりとか。
メッセージが回らなくなるレベルの重さなんて、今時の環境だったらよっぽど無駄なことしないと難しいよ。
0210営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 07:15:50.94
ループの中に QApplication::processEvents() を入れるとか、そういう話じゃない?
0211営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 08:19:06.11
>>209
QStringの扱いがまずいというのはあるかもですね。
本来、QPlainTextEditは大量の文書を入れる用途には向いていないようなのに、
数十万行程度読みこませることがあるので。。。
あと、signal の送受信の際に、内部的にQStringを何度もコピーしている可能性も
考えたほうがいいかもしれないです。。。

>>210
それも以前試したのですが、目に見えた改善はなかったです。

ううむ。
0212営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 10:00:08.79
試してないが、QTextDocumentを別スレッドで作って、
そこにテキストを設定した後にQPlainTextEditにsetDocumentする手は使えない?
QTextDocument::clone() を使ってコピーする必要はありそうだが。
http://qt-project.org/doc/qt-4.8/threads-modules.html#threads-and-rich-text-processing
動的にテキストが更新されていく場合は難しいかもしれないが。
0213営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 10:06:18.35
>>211
> 本来、QPlainTextEditは大量の文書を入れる用途には向いていないようなのに、
> 数十万行程度読みこませることがあるので。。。
それが問題だと思う。
巨大文書用のエディタクラスを作るしかないかも。
#仕事として発注してくれれば受けるけど、そこまでコストかける気はなさそうだね
0214営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 14:08:43.81
>>211
>あと、signal の送受信の際に、内部的にQStringを何度もコピーしている可能性も
>考えたほうがいいかもしれないです。。。
QStringはコビーオンライトするようになっているので、ポインタサイズしかコピーしていません。
0215営利利用に関するLR審議中@詳細は自治スレへ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();
}
}
0216営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 17:58:41.07
ながれをぶったぎってすみませんが、
Qt4.8.0以降でOpenGLを使う場合、glutをincludeしなくなっているので
gluLookAt()が使えません。そうすると、自前で視点変換の行列を
用意しなければならないのですか。それとも代わりの関数がどこかの
クラスに用意されているのでしょうか。
0217営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 19:05:22.68
#include <GL/glu.h> を追加すればいいんでないの
ttps://bugreports.qt-project.org/browse/QTBUG-12227
そういう問題じゃない?
0218営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 20:33:42.11
>>217
なるほど。たしかにglu.hでうごくみたいですね。
<QtOpenGL/QGLWidget>のなかでgl.hしか読み込んでいなかったので
そうしようと思いませんでした。
リンクによると、Qtではglutを使わない方針になっているんですね。
0219営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 20:44:55.49
>>218
Qt4.8から使い始めたから知らなかったけど、
includeしてたのってGLUTじゃなくてGLUじゃない?

OSXはこんな感じで書けばいいみたい
ttp://qt-project.org/forums/viewthread/14269
0220営利利用に関するLR審議中@詳細は自治スレへ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 した時の挙動も若干違いましたが。
0221営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 23:44:06.97
>>213
ググったら似たようなトラブルが山のように出てきたので、
おそらくそうですね。

プロっぽい人の回答だと、
1) オンラインのログのようなものなら、組み込み機能の行数制限を使って、古い行を上から自動で消す
2) ページングに細かくぶったぎる
というのがよく見られるパターンでした。

私も趣味で開発(タダ)してるんで、金はかけられないですw
巨大文書用のエディタクラスですか。。。
作るならQPlainTextEditと上位クラスのコード読まないと無理そうですね。
0222営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 23:52:48.62
>> 212
ああ、それいいかもですね。
setTextDocument の スピード について main thread で検証してみて、
それが速ければ試してみる価値がありそうです。
結果は後日報告します。ありがとうございます。

いやー、随分悩んだのですが、相談すると自分が考えつかないような
解法を色々教えていただけて、助かります。
0223営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 23:10:53.31
Qt 5 Alphaリリースしました
02241082012/04/04(水) 03:52:13.17
Qt5では、簡単に言うと何がいいのでしょう?
0225営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 11:48:51.05
>>224
http://qt-project.org/wiki/Qt-5-Alpha
0226営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 18:19:44.50
>>225
もう和訳でてる
http://labs.qt.nokia.co.jp/2012/04/04/qt-5-alpha.html
0227営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 22:29:23.76
>>199
これつかわないと64ビット版のwindows向けにビルドできないのでしょうか???
0228営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 00:22:05.26
>>227
WOW64でいいなら使わなくてもよいでしょう
0229営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 00:25:37.15
組み込みでもOpenGL使えるのかな
0230営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 01:36:43.32
>>229
ドライバがあれば、な。
0231営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 07:58:01.23
>>229
Qt 4ではドライバがあっても問題が多過ぎて満足に使えませんでした。
問題を報告したら、今のアーキテクチャではもう無理なので、Lighthouse迄待ってくれと言われました。
Qt 4.8のLighthouseのOpenGLドライバは、問題がまだあるけれどそこそこ動きます。
0232営利利用に関するLR審議中@詳細は自治スレへ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特有なんで原因がよくわからないんですよね。。。
0233営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 22:26:04.52
>>232
ここ数年こういったQtの実装の不十分さが目立って来ています。
報告しても、古いからもう改善しないとクローズされるのが何度もあって、言う気も失せています。
0234営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 00:50:31.53
そのへんはしかたないと思うけどね。
Javaとかと違ってネイティブで動くことに意味があるんだし。
0235営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 00:55:01.74
QMLの不具合は報告するとすぐさま修正されるよ
QWidgetは放置されるけど
0236営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 11:16:36.41
馬鹿には無理
0237営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 11:44:19.69
オプソは総じて、過去の遺産のメンテみたいな面白くもないことはしたがらないからな
自分で直すか有償サポート申し込めってことだな
0238営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 12:35:16.58
オープンソースといってもNokia関係者が8割だそうだ。
0239営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 12:59:20.02
NokiaはQMLで何がしたいんだろう?
0240営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 17:20:24.03
Qtで作ったMeeGoを捨てて、Windows Phoneに寝返ったNokiaに、
もう一度Qtの開発者達へ目を向けさして、Nokiaのメインストリームにして欲しいんじゃないかな。
0241営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 22:51:02.32
Qtの GUI 系のアップデートって、メソッドの呼び出し順序で挙動が変わりますね。
QPlainTextEdit を拡張して、左側にラインナンバーを表示させているのですが、
再定義を以下のようにすると

paintEvent(QPaintEvent *e){
lineNumberArea->repaint(); <--- (1)
QPlainTextEdit::paintEvent(e); <--- (2)
}

Editer本体の描画がうまく動かなかったのですが、
この(1)(2)を逆にしたら問題なく動くようになりました。
重要なイベントを先に動かしたほうがいいみたいですね。
0242営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 23:06:09.30
単に理解できてないだけなんじゃね
0243営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 23:11:35.16
それは単純に、(2)が上書きしているからじゃないの?
Widget が透ける設定じゃなけりゃ、塗りつぶすでしょ。
0244営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 23:33:02.87
>>243
PlainTextEditの描画を少し右寄せして、空いた隙間にライン描画のための QWidget を配置しています。
両者は重なっていないので、塗りつぶしは発生しないです。

ペイントイベントが半動きのようになっていて、以下のような症状がでていました。
- スライダーを動かすと、上下 20 % が空白になる
- 停止すると Editer が真っ白
- クリックすると、描画され文字が確認できる
- カーソルを動かすと、現カーソル行だけが空白
- 左側 30%ほどしか描画されない
上記は全て同時に発生するのではなく、このうちのいくつかが複合的に起きていました。
Win/Macともに問題なかったコードを、Macでコードをリファクタリングしたあとに、
Windowsで動かすと急に上記のような症状が現れて焦りました。
きちんと両方で検証しながらコードの修正変更を加えないと危ういですね。。。

0245営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 00:28:09.75
>>244
>PlainTextEditの描画を少し右寄せして
どのようにして右寄せにしていますか。
0246営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 14:09:33.70
なんでupdateじゃなくてrepaintなの?

あと http://qt-project.org/doc/qt-4.8/qwidget.html#paintEvent の
> Generally, you should refrain from calling update() or repaint() inside a paintEvent().
> For example, calling update() or repaint() on children inside a paintevent()
> results in undefined behavior; the child may or may not get a paint event.
は関係あるのだろうか
0247営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 23:00:20.51
>>245
setViewportMargins(x, 0, 0, 0);
ですね。

>>246
QPlainTextEdit の 継承クラスの中に QWidget(ライン番号表示)を持っていたのですが、
両者のアップデートのタイミングが異なっており、「行番号がアップデートされずに、
実際の行と食い違いがある」という状態になっていました。

なので、継承クラスで PaintEvent をオーバーライドし、
「本来のPaintEvent + 同時にアップデートされなかったWidgetのアップデート」
を行うようにしています。
0248営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 23:01:56.89
伝え忘れましたが、行番号はSQroll範囲全てにあるわけではなく、
現在見ている Window範囲にしか存在せず、必要に応じて行番号を
アップデートする仕組みで動作しています。
0249営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 23:04:30.55
>>246
どっかのドキュメントで 「update ではなく、repaint を呼び出すべき」というのを見かけ、
それを盲目的に信じていました。
申し訳ないですが、一ヶ月近く前の話なので覚えていないです。ごめんなさい。
0250営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 23:14:29.07
lineNumberArea実装の例はQtのサンプルに含まれてるよ
俺はそれ参考にして実装してる
0251営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 23:20:05.39
>>244
>塗りつぶしは発生しないです
どうやって確認したの?
0252営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 23:21:17.23
Code Editor Example | Documentation | Qt Developer Network
http://qt-project.org/doc/qt-4.8/widgets-codeeditor.html
■ このスレッドは過去ログ倉庫に格納されています