12/02/22 22:37:42.73
Qtで作ったアプリを配ってるんだが(Windows)、最初の立ち上がりが結構遅いみたい。
ライブラリのロードに時間がかかってるのかなあと思ってるんだけど、
立ち上がりを速くするにはどうしたら良いんだろう。
あと、例えば、最初にファイル選択ダイアログを表示する時にも、ちょっと遅いよね。
あれってどうしようもないのかな。結構、欝になる。
32:デフォルトの名無しさん
12/02/22 23:13:09.22
俺の実装がまずいのかと思ってたら、似たような問題抱えてる人いるんだな
33:デフォルトの名無しさん
12/02/22 23:30:00.97
.NET系やJava系よりはずっと早いんだけど
DelphiとかMFC製のネイティブアプリと比べると、体感できるくらい遅いよな
34:デフォルトの名無しさん
12/02/22 23:53:06.76
UPXで圧縮すれば多少早くなるかもしれない
CPUが遅いと余計遅くなるかもしれないけど
35:デフォルトの名無しさん
12/02/23 00:31:35.06
>>31
必要なライブラリを使うダミーのプログラムを作って
サービスとして登録しておけば委員で内科医
36:デフォルトの名無しさん
12/02/23 00:45:22.54
遅いってどのくらい遅いの?自分は体感できないな
最小限のプロジェクトでQWidgetをshowするだけのプログラムでも遅いの?
使うライブラリによっては、mingwコンパイルするよりvcコンパイルしたほうが立ち上がりが早いことはある
37:デフォルトの名無しさん
12/02/23 01:44:16.98
QtCreatorの立ち上げからしてもっさり
38:デフォルトの名無しさん
12/02/23 02:13:13.89
インストールも時間かかりすぎ
170Mのファイルインストールで1.5GBってでかすぎ
39:デフォルトの名無しさん
12/02/23 09:32:55.57
あれはadobeがする
40:デフォルトの名無しさん
12/02/23 10:04:03.07
GTK+みたいにGUI部品のツールキットとして始まってるわけだから
Win32ネイティブなGUI部品をそのまま使うやつに比べれば重いし
ファイル容量が大きくなるのは当たり前。(それでもDelphiより重いかなあ)
無意味に.NETなアプリケーションが増えている現在速度はあまり気にしてなかったが
同梱しなきゃなんないdllのサイズは頭が痛い。
けどファイルダイアログなんかはWindowsのをそのまま使ってるんじゃなかったっけ?
41:デフォルトの名無しさん
12/02/23 10:42:40.15
>>31
そんなに重いか?
VS2008のコンパイラでビルドしたexeだけど,PC起動して最初に立ち上げても
2~3秒でメインフォームが表示されるよ。フォーム上に何十個かのウィジットが
あるけど。
起動時に何か処理が入ってない?
そもそも組み込み用途でショボイCPUでも使われてるわけで,PCでやたらに遅かったら
組み込みでは使い物にならないと思うが。
>>40
ファイルダイアログは,Windowsネイティブのものと,Qt独自のものが選択できる。
>>31の話はどっちかな?
42:デフォルトの名無しさん
12/02/23 10:43:57.32
実際に使用する部分だけをdllにしてくれるようなツールがあればいいのに
43:デフォルトの名無しさん
12/02/23 21:57:49.40
VCで静的リンクすると、ただフォーム出すだけのアプリでどんくらいのサイズになるのかな
44:デフォルトの名無しさん
12/02/23 23:31:01.39
>>41
> ファイルダイアログは,Windowsネイティブのものと,Qt独自のものが選択できる。
選択できる?
オンラインマニュアルには、Windowsの場合、スタティックな関数
QFileDialog::getExistingDirectory
QFileDialog::getOpenFileName
QFileDialog::getOpenFileNames
QFileDialog::getSaveFileName
では、nativeのファイルダイアログが使われるようになっている
って書かれてある。
選択できるとは書かれていない。
もともと、普通に使っていれば、nativeなファイルダイアログが表示されるはず。
45:デフォルトの名無しさん
12/02/23 23:47:51.63
QFileDialog *dialog = new QFileDialog;
dialog->show();
これはQt独自
46:デフォルトの名無しさん
12/02/23 23:50:35.36
スタティックな関数でないほう(インスタンス作ってexec())を使うと
常にあの微妙なダイアログが出てるから選択できるんじゃないのか
47:デフォルトの名無しさん
12/02/24 00:13:05.06
QFileDialog::DontUseNativeDialog
使ったことはないが。
48:デフォルトの名無しさん
12/02/24 01:08:16.03
オブジェクト指向なライブラリは重い気がする
49:デフォルトの名無しさん
12/02/24 01:32:06.02
キモオタニート
50:デフォルトの名無しさん
12/02/24 01:48:15.59
>>45-46
ああ、そういうことか。
わざわざそっちの方を使う人もいるのかな?
51:デフォルトの名無しさん
12/02/24 02:16:34.05
がっつりカスタマイズしたいときとか、クロスプラットフォームなソフトだと便利なこともある
52:デフォルトの名無しさん
12/02/24 03:13:50.59
ソフトの挙動がOSごとに異なるのはサポートが面倒な場合があるかもね
53:デフォルトの名無しさん
12/02/24 04:08:02.24
FireAlpacaが話題だねぇ
54:デフォルトの名無しさん
12/02/24 05:39:46.19
こんなところまでステマか
55:41
12/02/24 06:06:34.62
>>44,>>50
ドキュメントの読み方が浅いよ。>>47が正解。
QFileDialog::getOpenFileName()とかのスタティック関数でも,最後の引数
(Options)に指定できる。
だいたいさぁ,やってみたことあるから書いてるに決まってるじゃないか。
良く調べもせずに噛み付いて恥ずかしくないか?
56:デフォルトの名無しさん
12/02/24 08:48:34.99
C++でプログラム書くのを覚えるとCでプログラム書くのは無理
Cを読むくらいならできるけど、Cで書くなんてバカらしくてやってらんない
57:デフォルトの名無しさん
12/02/24 08:50:08.30
How To Become A Hacker
URLリンク(cruel.org)
もしコンピュータ言語をなにも知らないなら、まず Python から始めることを
おすすめします。設計がきれいだし、ドキュメントもしっかりしているし、
初心者にもそこそことっつきやすくできています。でも入門言語として最適でも、
おもちゃではありません。強力で柔軟で、大きなプロジェクトにもじゅうぶん
対応しています。
Java もプログラミングを学ぶにはよい言語です。 Python よりはむずかしい
ですが、できるコードは Python より高速です。二番目の言語としてはとても
すぐれていると思います。
本気でプログラミングをするなら、C を勉強するしかありません。これはUnix の
中核となる言語です。C++ は C と密接な関係にあります。片方を知っていれば、
もう片方を学ぶのはそんなにむずかしくありません。が、どっちも真っ先に
勉強しようとするのには向いた代物ではありません。
58:デフォルトの名無しさん
12/02/24 10:19:20.15
c++なんてどこまでいっても便利でカオスなCじゃん
Cでキッチリかけないやつなんてわかってないだけ
59:デフォルトの名無しさん
12/02/24 12:19:54.39
C++使わないでCでプログラムをするのは
足を使わないで自転車に乗るようなもん
出来ないことはないが馬鹿らしくてやってられない
60:デフォルトの名無しさん
12/02/24 22:36:32.70
CとC++の話は別にどうでもいいですん
61:デフォルトの名無しさん
12/02/25 01:07:15.57
すん
62:デフォルトの名無しさん
12/02/25 01:11:27.53
>>41
ずいぶん偉そうな言葉遣いだな。
プログラムの前に日本語を覚えなw
63:デフォルトの名無しさん
12/02/25 02:02:32.48
CとC++のどっちがいいかなんて無意味。
目的のためなら利用できるものは何でも利用するべきなんじゃないのかな。
でも、はっきり言って、Cでまともなプログラムが書けない人は
やっぱりC++でもまともなプログラムを書いてないよね。
危なっかしいプログラムを平気で書いてる。
64:デフォルトの名無しさん
12/02/25 02:04:13.52
ってか、Qtは大抵の人が安全に使えるから人気があるんだろうね。
そのぶん、パフォーマンスが落ちてるような気がするけど。
65:デフォルトの名無しさん
12/02/25 09:35:19.25
>>62
どこが? で、本題はどうしたの?
66:名無しさん
12/02/26 11:58:23.71
検索エンジンも業務効率の改善にいそいでいる。
67:デフォルトの名無しさん
12/02/26 12:38:25.94
>>31, >>32, >>33
同じく。QtFileDialogのスタティック関数を使ってるけど、最初使うとき体感できるほど遅いね。
dllのロードに時間がかかってるんだろうな。
68:デフォルトの名無しさん
12/02/28 21:56:56.07
ウインドウを不活性にして読み込み中・・・みたいなダイアログ?を表示したいんですけどどうしたらいいでしょうか
69:デフォルトの名無しさん
12/02/28 23:55:04.69
adobeはflashの役割をhtml5にとられるだろうけど、
そのうち、photoshopをarchemyで実装しだすと思う。
javaもc#もクロスプラットフォームなRIAとしては今一な感があるし、
コアなロジックなんかはc++で書いた方がよほどコードをつかいまわせる。
余ったflash技術者にプレゼンテーション層をまかせるとなれば、
今後はqtの採用が減るんじゃないだろうか
70:デフォルトの名無しさん
12/02/29 04:07:43.01
なんか最近見るスレ見るスレで
フォトショ関係のオナニー長レス見かけるんだけど…
71:デフォルトの名無しさん
12/02/29 23:43:05.67
>>69
Qt 5の開発が遅れ気味で、安定するのにも時間がかかるだろうから、新機能は当分使えない。
Qt 4の改良は止めてしまっていて、同じく目新しいことはない。
Qtが停滞している間に、他のものを使うようになる。
72:デフォルトの名無しさん
12/03/01 01:28:24.99
qt5はコアな部分から最適化のためにかなりいじってるみたいね
73:デフォルトの名無しさん
12/03/01 01:29:34.46
他のものの候補ってナニ?GTK位しか知らないんだが
74:デフォルトの名無しさん
12/03/01 18:59:49.51
どーせいつものアンチNokiaの粘着だろ
75:デフォルトの名無しさん
12/03/01 22:53:50.90
>>68
だれかしりませんか・・・
76:デフォルトの名無しさん
12/03/01 23:12:23.00
>>75
要するにボタンのないモーダルダイアログを表示して、プログラムのコードで閉じたいって
ことだよね?
それならQDialog::open()を使えば良い。この関数はダイアログをモーダル表示して
すぐにリターンする。閉じる時はclose()で閉じる。
77:デフォルトの名無しさん
12/03/01 23:40:02.48
>>76
ありがとうございます
やってみます
78:デフォルトの名無しさん
12/03/02 10:30:42.57
VS11のExpressEditionはWin8専用で、Metroアプリしかビルドできないみたいだぞ
競合IDEメーカーがいなくなったからPro以上を売りたいのかも知れないが
Qt Creatorの存在をお忘れだったようだな!
79:デフォルトの名無しさん
12/03/02 13:35:41.65
いいかげん板違い。マ板にでも行って分かったようなこと語っててくれ
80:デフォルトの名無しさん
12/03/02 23:12:23.11
Nokiaの腰巾着よりまともだな。
81:デフォルトの名無しさん
12/03/03 12:41:07.43
ソースから特にオプションをつけないでビルドしたら30GBになってしもた
気をつけてね
82:デフォルトの名無しさん
12/03/03 12:57:09.69
サイズを小さくするには
どんなオプション付けるん?
83:デフォルトの名無しさん
12/03/03 15:43:00.32
QT初心者だが、
qmake -project
qmake
make
ってやったら don't know how to make 'FORCE' と出たんだが。
84:デフォルトの名無しさん
12/03/03 16:38:25.08
qbs の紹介
URLリンク(labs.qt.nokia.co.jp)
何年もの間、qmake とは愛憎の入り混じった関係を育んできました。
ちゃんと仕事はしてくれるのですが、うまく行かないこともあり、
多くの人がメンテナンスは不可能だと考えています。
85:デフォルトの名無しさん
12/03/04 01:56:06.39
noDebug
86:デフォルトの名無しさん
12/03/04 02:14:48.29
>>82
pdbファイルがでかいので-nomake samplesなのかも
87:デフォルトの名無しさん
12/03/05 23:44:22.01
Qt初心者です。
resizeEventに関して質問があります。
QPlainTextEditにでかいファイルを読み込ませた状態で
「MainWindowのサイズを変更したことによる
リサイズイベント」が発生すると、非常に処理が重いです。
- イベントの発行数を減らす
- qsplitの子ウィジェット感のサイズ変更のように、
サイズ変更が終了した時だけ描画する
などで対処したいのですが、何か良い方法はありませんか。
現在の第一候補はQPlainTextEditの resizeEvent のオーバーライドで、
イベント発行数を1/5ぐらいにする方法です。
(親クラスのリサイズの呼び出し回数を減らす)
ただ、問題もありそうなので、もっと良い方法を探しています。
アドバイスいただけないでしょうか。
よろしくお願いします。
88:デフォルトの名無しさん
12/03/06 08:10:51.62
>>87
> QPlainTextEditにでかいファイルを読み込ませた状態で
> 「MainWindowのサイズを変更したことによる
> リサイズイベント」が発生すると、非常に処理が重いです。
リサイズイベントハンドラのソースは以下のようになっています。
if (e->oldSize().width() != e->size().width())
d->relayoutDocument();
たぶん、relayoutDocument() で右端で折り返す処理を行なっているんだけど、
行数が多いとこれに処理時間がかかってしまうんだと思う。
表示されている部分だけをレイアウト処理して、それ以外はマルチスレッド化
するといいとは思うけど、対処はかなり難しいと思う。
89:デフォルトの名無しさん
12/03/06 15:05:57.99
初心者質問ですんません
エンターを押下したら特定のプッシュボタンをクリックしたのと同じ効果となる方法ってありますか?
90:デフォルトの名無しさん
12/03/06 15:24:06.43
>>89
> エンターを押下したら特定のプッシュボタンをクリックしたのと同じ効果となる方法ってありますか?
keyEvent() で エンター かどうかを判定し、そうなら プッシュボタンの clicked() シグナルを
エミットすればいいんじゃね?
91:デフォルトの名無しさん
12/03/06 17:48:41.87
>>90
clicked()シグナルのエミットのみでは、クリックしたのと同じ効果にはならないし、
エンターの判定には、どこにフォーカスがあるかどうかも考慮する必要があります。
>>89
プッシュボタンのanimateClick()を呼べばクリックしたのと同じことになります。
例えば、どこでもよいからエンターを押したのを判断するならば、QApplicationにイベントフィルターを設定して、
エンター押下を判断して、特定のボタンに対して、animateClick()を呼べばよいでしょう。
92:デフォルトの名無しさん
12/03/07 09:25:07.05
>>89
QDialogだけかもしれないけど、QPushButtonのdefaultをtrueにすれば良さそう。
93:デフォルトの名無しさん
12/03/07 19:39:54.77
>>92
QLineEditなどがあったらダメでしょう。
94:デフォルトの名無しさん
12/03/07 21:33:35.28
Qtwebkitの開発停滞してんなあ
95:デフォルトの名無しさん
12/03/07 23:06:48.54
ちょっと質問。
QListとかQHashなどのコンテナってスレッドセーフにできてるんですか?
自分の作ったものじゃないウィジェッドを使ってプログラムを作ってる最中なんですが、
スロットの中で、QListのメンバ変数にデータを追加する時に、
アクセスエラーと言われて落ちてしまいます。
96:デフォルトの名無しさん
12/03/07 23:24:15.12
基本的にドキュメントにスレッドセーフってわざわざ書いてないものについては
自動で排他制御したりはしてくれないので
別スレッドからインスタンスに触るときは、QMutexLockerなりなんなりで保護しないとダメです
97:デフォルトの名無しさん
12/03/08 00:14:47.45
ありがとうございます。なるほど・・・。
QMutexLockerってものがあったんですね。
98:デフォルトの名無しさん
12/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
12/03/08 05:21:04.47
qt sdkでないqtを入れてみたら先に進みました
失礼しました
100:デフォルトの名無しさん
12/03/08 07:55:37.66
ありがとう
101:デフォルトの名無しさん
12/03/08 11:20:27.25
Designerへのプラグインの登録についての質問です。
Linuxで自分の作成したプラグインをDesignerで使用するには
/usr/lib/qt4/plugins/designerに放りこめば使えるようになりました。
ただこれにはroot権限が要る為、
一般ユーザがそのユーザのみで使用する場合は
どのようにDesignerにpluginを登録すれば良いでしょうか。
何かパスを通すなどで解決するのでしょうか。
102:デフォルトの名無しさん
12/03/08 18:42:51.60
QStringList QCoreApplication::libraryPaths()
{
const QByteArray libPathEnv = qgetenv("QT_PLUGIN_PATH");
とあるんで、試してないが、環境変数のQT_PLUGIN_PATHにパス追加しておけばいける
103:デフォルトの名無しさん
12/03/10 15:04:24.63
>>88
アドバイスありがとうございました。
とりあえず「折り返しなし」にしたら問題がマシになりました。
調査していてわかったのですが、どうやら Mac かつ plastiqueStyle で
QTreeWidget が重いというバグに関わっているようでした。
描画スタイルをMacやMotifにしたら、だいぶ早くなりました。
104:デフォルトの名無しさん
12/03/10 15:06:49.24
QLabelにあるテキストを ドラッグで範囲指定して、コピーできないもんですかね。
ぐぐったら継承して対応するというような意見があったのですが、
もっといい方法がありそうな気がします。。。。
なにか知っていらっしゃいますか。
105:デフォルトの名無しさん
12/03/10 16:55:47.96
>>104
これで出来るんじゃないの?
URLリンク(qt-project.org)
106:デフォルトの名無しさん
12/03/10 16:56:06.52
>>104
textInteractionFlagsプロパティに、Qt::TextSelectableByMouseを指定すると出来る。
107:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/10 17:07:09.70
これ?
URLリンク(www.qtcentre.org)
URLリンク(stackoverflow.com)
> Edit your Visual Studio project settings and under C/C++ -> Language
> set the option Treat wchar_t was Built-in Type to No.
109:デフォルトの名無しさん
12/03/10 17:10:03.59
>>107
違うバージョンのQtCore4.dllがロードされているんじゃないか
110:デフォルトの名無しさん
12/03/11 18:24:01.50
>>102
返事が遅れてすみません。
~/qp/myplugin/myplugin.pro というプラグインが在る所
$ env QT_PLUGIN_PATH=~/qp/myplugin/plugin qtcreator
と起動することで確かにプラグインが追加されました。
ありがとうございました。
111:110
12/03/11 18:26:01.35
絶対パスだと長くなるので相対パスで書いたのですが、
相対パスでは動きませんでした。
失礼しました。
112:108
12/03/11 19:46:07.03
>>109
QtCore4.dllは1つしかないのでそれはありません
結局Qtのコンパイルを、動作しないPCの環境で行ってからアプリケーションを
再コンパイルして解決しましたかが、釈然としません。
113:デフォルトの名無しさん
12/03/11 20:26:31.31
>>108
これだとコンパイル時にわかるだろうね
2005と2008のQtCore4.dllをごっちゃにしてるんじゃないかな
114:デフォルトの名無しさん
12/03/11 20:29:43.38
gccとかmingw のバージョン違いでもおかしくなることあるよ
115:デフォルトの名無しさん
12/03/12 23:57:23.00
win7の32bitで動いた場所とディレクトリから、64bit(別PCでコンパイル)のdllを取ってきても動かなかったりしたなぁ。
えらい悩んだが、Qt Creator で動いたのなら、どこかに必要な dll は必ずあるはず。
116:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/14 00:11:48.77
QtwebkitでQtTestbrowserをもとに簡単なブラウザようなものを作成したのですが
どうにも自分のwin環境だと日本語入力が正常に行えません
調べてもissueも出てないし日本語圏で誰も問題にしていないので自分の環境だけなのかな~と思ったのですが
自分以外の環境でも問題再現するようでしたらQtwebkit Projectにissue投げたいのですがいかがでしょうか?
118:デフォルトの名無しさん
12/03/14 00:27:25.29
前にテキストエリアとかで漢字変換すると
WebKitが死んでしまうって話しは出てたな
119:デフォルトの名無しさん
12/03/14 00:42:40.04
メーリス見たところWebkitが落ちるだか画面暗転?するバグは直ってるっぽいですね
Aroraあたりのqtwebkitがっつり使ってるブラウザもテキストエリアでキャレットが動かないなどの不具合ありました
メーリングリストに投げた方がいいんですかね……?
120:デフォルトの名無しさん
12/03/14 03:53:05.89
4.7.3で問題なく動作していたソフトが4.8.0では正常に動作しなくなりました。
色々調べてQNetworkAccessManager::postの実行時にQNetworkReply::UnknownNetworkErrorが起きていることが分かったのですが、
QNetworkReply::UnknownNetworkErrorってどんな原因が考えられるんでしょうか?
ちなみに、QNetworkAccessManager::post実行後にネットワークアクセスは発生していません。
そしてエラーを無視して同じ引数で再度postを実行すると問題なく動作します。
121:デフォルトの名無しさん
12/03/14 09:36:56.37
色々と調べたところQtwebkitの処理周りのバグはWebkit Bugzillaになげるべきらしいですね…
自分はレポートはできてもリテストできる環境にないのでどなたか投げといてくれると嬉しいです
122:デフォルトの名無しさん
12/03/14 22:34:38.00
うちの環境では(XPで4.7.4)は特に問題なかった
123:デフォルトの名無しさん
12/03/14 23:23:54.09
アプリケーションをインストールした後、PCで初めて起動する時にだけ、
特定の処理を行いたいと思ってます。
Qtでの定番のやり方ってありますか?
やろうと思えば、いくらでもやり方はあると思いますが、
Qtでいい方法が用意されているのならそれを使おうかな、と。
124:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/15 00:06:14.67
>>122
ありがとうございます
Vistaと7、Qt4.8で再現するバグですのでその旨もちゃんとBugzillaに書いておきます。
126:120
12/03/15 22:47:28.94
原因が分かりました。
4.8.0ではQHttpNetworkConnectionChannel::allDone内のエラー処理がコメントアウトされていました。
その影響で4.7.3では隠れていた不具合が表に出たようです。
恐らくですが、Connection: closeを指定していても、サーバがレスポンスの末尾に不要なデータを付け足して送ってくると、使い終わったソケットの終了処理が行われないようです。
そして次に同じホストに対してpostを実行すると、この使い終わったソケットを再接続せずに再利用してしまい、書き込みエラーが発生します。
該当部分のコメントによると既知の問題みたいですが、一応報告だけ。
127:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/15 23:08:44.82
すいません、127 です。
baseWidget->remove(w);
w->deleteLater();
としたら、解決しました。
オブジェクトの開放のタイミングとか検証してから質問するべきでした。
お騒がせしました。
129:デフォルトの名無しさん
12/03/18 16:23:57.27
QThreadの使い方でこういうの見つけたんだけど、いまいちよく分からん。
URLリンク(vivi.dyndns.org)
クラスをthreadに割り当てて、start()では実際のスレッド動作は始まらず、
クラスメンバー関数を呼び出した時点でスレッドとして動作が始まるって理解でいいの?
130:デフォルトの名無しさん
12/03/18 16:55:29.03
startでスレッドが始まってデフォルトのrunが呼び出されて、
デフォルトのrunが呼び出されるとexecが呼び出されて、
execが呼び出されるとイベントループに入る
だと思う
131:デフォルトの名無しさん
12/03/18 19:06:56.95
>>129
> クラスをthreadに割り当てて、start()では実際のスレッド動作は始まらず、
> クラスメンバー関数を呼び出した時点でスレッドとして動作が始まるって理解でいいの?
いや違う。
start() でスレッドの動作が始まり、イベントループが開始される。
スロットがシグナル経由で呼び出されると、スレッド側のコンテキストで
処理されるということ
スレッド間のスロットコールは内部ではイベントとして処理される
132:デフォルトの名無しさん
12/03/18 19:37:20.96
>>130-131
うーん、ちょっとデバッガで追っかけてみたけど(VC++環境)
start()ではSUSPENDでスレッド起動してるだけみたいだけど。
それに呼び出してもないのにexec()が勝手に動いちゃ駄目じゃない?
133:デフォルトの名無しさん
12/03/18 19:49:10.15
ソース嫁
URLリンク(qt.gitorious.org)
134:デフォルトの名無しさん
12/03/18 19:55:24.48
>>132
> それに呼び出してもないのにexec()が勝手に動いちゃ駄目じゃない?
なんで、exec() が動いちゃ駄目なの?
exec() が何をするものか分かってる?
135:デフォルトの名無しさん
12/03/18 19:56:06.03
ソース読まなくてもQThreadのリファレンスに書いてあったと思うけど
136:デフォルトの名無しさん
12/03/18 20:11:30.34
>>134
run()で完結する処理ならexec()必要ないし。必要のないものが勝手に動くと駄目だろ。
ざーと見てみたけど、signal受けるとQThreadのイベントハンドラが1回だけ呼び出されて
対応する処理に移動するって感じがするんだけど。
イベントループがずっと動いてるって確証は今のところ見当たらない。
137:デフォルトの名無しさん
12/03/18 20:14:09.54
念のため言っておくけど、>>129のmoveToThreadやinvokeMethod使った処理な。
138:デフォルトの名無しさん
12/03/18 20:25:32.25
なんで公式のリファレンスを読まないの?
分からないことがあったら一番最初にすることでしょ?
139:デフォルトの名無しさん
12/03/18 20:32:13.43
>>136
とりあえず、ここを読んでおけ
URLリンク(labs.qt.nokia.com)
140:デフォルトの名無しさん
12/03/18 20:40:35.67
リファレンス読めなくてもソースなら読めるだろ
141:デフォルトの名無しさん
12/03/19 05:47:19.10
ソース嫁ソース嫁ってしつこくてうざいよ
リファレンス読まずにソース読むなんて、仕事がなくて暇なヤツのすること
142:デフォルトの名無しさん
12/03/19 08:15:21.78
やれやれ
ここもそろそろIDが必要になったか
143:デフォルトの名無しさん
12/03/19 08:45:34.92
リファレンス読んでもわからないからソース読みます
144:デフォルトの名無しさん
12/03/19 09:41:08.16
自演乙。やっぱり最低でもID出なきゃダメだね。
145:デフォルトの名無しさん
12/03/19 15:47:30.88
Qtはちゃんと資本が入ってるお陰で、ちゃんとしたドキュメントが整備されてるし
よくあるオプソライブラリみたくソースから入る必要もないだろ
146:デフォルトの名無しさん
12/03/19 16:22:39.71
リファレンス読んでも分からないときにソース読むのは正しい
リファレンス読めば分かるのにソース読むのはマヌケ
147:デフォルトの名無しさん
12/03/19 16:28:36.94
馬鹿には無理
148:デフォルトの名無しさん
12/03/19 16:50:43.61
ソースソスソスソーソーソース
ソスーソソススソスソーソース
149:デフォルトの名無しさん
12/03/19 17:12:32.26
>>136
>run()で完結する処理ならexec()必要ないし。必要のないものが勝手に動くと駄目だろ。
その通りだと思う。シグナルとスロットを使わずにスレッドを使いたいだけならば、exec()
は不要でしょう。
>ざーと見てみたけど、signal受けるとQThreadのイベントハンドラが1回だけ呼び出されて
>対応する処理に移動するって感じがするんだけど。
>イベントループがずっと動いてるって確証は今のところ見当たらない。
run()でexec()を呼ぶとイベントループがずっと動いて、スレッド間でシグナルとスロットを
使うと、シグナルを送信するとイベントループに投げ込まれ、イベントループ経由でスロット
が呼び出されるという仕組み。
>>139
>URLリンク(labs.qt.nokia.com)
これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、
QThreadをサブクラス化するのがダメとみなしてはいけないと思います。
150:デフォルトの名無しさん
12/03/19 17:27:55.24
>>149
> >URLリンク(labs.qt.nokia.com)
> これを読んで、QThreadをstart()して、QObjectをmoveToThread()するのが正しく、
> QThreadをサブクラス化するのがダメとみなしてはいけないと思います。
じゃあ、何が正しいの?
QThreadをstart()して、QObjectをmoveToThread()するのが絶対じゃないけど、推奨される方法じゃないの?
151:デフォルトの名無しさん
12/03/19 17:34:46.56
いやちょっと待ってほしい
サブクラス化自体がダメなんて話>>149以外誰もしてないんだけど
152:デフォルトの名無しさん
12/03/19 17:55:11.18
>>150
どちらも正しいです。moveToThread()の方がよいという訳ではないでしょう。
153:デフォルトの名無しさん
12/03/19 18:07:35.39
>>152
> どちらも正しいです。moveToThread()の方がよいという訳ではないでしょう。
ごめん、何と比べてるの?
moveToThread() しない方法って、QThread をサブクラス化して、
run() を再実装する方法のことを言ってるの?
それだと、QThread のサブクラスのスロットをコールしても
別スレッドのコンテキストで実行されないという問題があるぞ
154:デフォルトの名無しさん
12/03/19 20:15:34.98
>>153
いつでもシグナルとスロットを使わなければならない訳ではないから、
QThreadをサブクラス化してもしなくてもどちらも正しい方法です。
>136
>run()で完結する処理ならexec()必要ないし。
このような場合には、問題になりませんし、それで済む場合も多いのです。
そもそも、QThreadのrun()は元々実装しなければならなものであり、
スレッドを分かっていれば、サブクラスかをして使いこなせていたのです。
偉い人の記事を読んで、moveToThread()がよいと妄信するのは、技術力がないからです。
155:137
12/03/19 20:18:01.57
一応言っておくけど137以降は書いてないからな。
>>149
明示的にrun()もexec()も呼び出してないのに内部でexec()が動いてるってこと?
なんか前半と矛盾するんだけど。
invokeMethodでの呼び出しが別スレッドのコンテキストでの実行になるんだから、
exec()がずっと動いてる必要もないだろう。invokeMethodから1度だけ呼ばれれば
いいんじゃないの。
156:137
12/03/19 20:20:27.32
ざーと見たところ、invokeMethodはかなりメタ処理やってるので
遅そうだな。使い道は微妙かもしれない。
157:デフォルトの名無しさん
12/03/19 21:26:08.92
Qtアプリはシグナルスロットを基盤として設計されるものであり、
スレッドが関わってもその方針が維持できるようになったのは大きな進歩だ
昔はサブクラス化が必須であったが、この進歩のおかげで今となってはサブクラス化は例外的なものであり、
決して"間違い"ではないものの、推奨されたものではない
QThreadのrunがexecを呼び出すようになったのは、ただのお節介ではない
使い方を理解していればどちらでもよいなんて、Qtが他と比べて優れている点を理解していない証拠だ
人の技術力をとやかく言う前に、自分の技術力と読解力を疑った方がよい
158:デフォルトの名無しさん
12/03/19 21:31:09.82
そろそろmoc使わないでもいいようになってくれ
159:デフォルトの名無しさん
12/03/19 21:40:25.36
>>155
お前は結局何が言いたいの?
リファレンス読んでもまだ仕様が分からないのか、それともQtの仕様は糞だって言いたいの?
お前といい>>149といい、もうぼくのかんがえたさいきょうのらいぶらりでも作ってろよ
160:137
12/03/19 22:08:58.17
>>159
え?何を言ってるのかわからない。
俺は単にmoveToThread()ってどういう挙動?って聞いてただけ。
シグナル受けるかinvokeMethod経由で呼ばれたタイミングで初めて
スレッドが動き出すのかと推測してたんだけど、exec()の話が出てきて
よく分からなくなったんだわ。
161:デフォルトの名無しさん
12/03/19 22:20:03.75
いやお前今の今までそんな質問一度もしてないから
スレッドが始まるタイミングとイベントループの話だけじゃん
一度自分が何を理解していないのか考えをまとめた方がいいぞ
162:デフォルトの名無しさん
12/03/19 23:20:53.09
横レスすみません
class Thread : public QThread
{
protected:
void run() {
QNetworkAccessManager manager;
reply = manager.get(QNetwotkRequest(QUrl("URLリンク(hoge)")));
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:デフォルトの名無しさん
12/03/20 04:48:42.32
関数内でQThread::currentThreadId()を呼び出してスレッドID表示してみればどのスレッドでその関数が実行されてるかわかるよ
164:デフォルトの名無しさん
12/03/20 07:25:50.19
>>162
せめて、コンパイルエラーが発生しないコードを示せよ。
すぐに検証できることを人に聞くだけで、自分ではいっさい検証してないってことか?
165:デフォルトの名無しさん
12/03/20 13:46:24.52
入門Qt4プログラミングのサンプルコードが、QThreadをサブクラス化して処理を追加するようになってるのが良くないね
あれで誤解している人も結構いそう
166:124
12/03/20 22:26:29.08
需要は無さそうですが、解決したので念のため。
今のXcodeではメニューのXcodeからPreferencesからDownloadsで
Command Line Tools for Xcode
ってのをインストールする必要がありました。
167:デフォルトの名無しさん
12/03/21 17:49:08.55
QTextCodec::toUnicodeとQTextDecoder::toUnicode(ConversionFlags設定なし)の違いって何なんでしょうか?
実行中同じオブジェクトが同じコーデックで何度もデコードするんですが、こういう場合どちらを利用するのがベターなんでしょうか?
168:デフォルトの名無しさん
12/03/22 03:33:55.96
>>165
そう言えば、でるでると言ってなかなかでない「でるでる詐欺」のQt翻訳本はどうなったのかな?
169:デフォルトの名無しさん
12/03/22 05:34:30.45
4月に実践Qt4プログラミングが出るらしいけど、そろそろQt5がやってくるのでは
URLリンク(ssl.ohmsha.co.jp)
170:デフォルトの名無しさん
12/03/22 05:42:32.29
Qt5って夏ごろだっけか
てかもう春だしな
171:デフォルトの名無しさん
12/03/22 14:51:40.23
QTextEditでsetHtml("<img src='path'>")としてもうまく画像が表示されず
↓こんな感じになってしまうのですがどこがまずいのでしょうか
URLリンク(uploader.sakura.ne.jp)
コピーしてEvernoteに貼り付けるとちゃんと表示されるのでパスが間違っている等のミスはなさそうなのですが。
172:デフォルトの名無しさん
12/03/22 16:00:10.30
まさか一時間で流れるとは…画像上げなおしました
URLリンク(www.rupan.net)
173:デフォルトの名無しさん
12/03/22 16:38:45.85
これがいるんじゃね?
URLリンク(qt-project.org)
174:デフォルトの名無しさん
12/03/22 19:30:07.08
>>173
ありがとうございます。無事いけました。
175:デフォルトの名無しさん
12/03/22 20:55:39.90
QtスレっちゅうかQtドキュメント探すスレやな
URLリンク(qt-project.org)
URLリンク(doc.qt.nokia.com)
を含むレス数がQt力や
176:デフォルトの名無しさん
12/03/25 15:45:01.71
そして時は動き出す
177:デフォルトの名無しさん
12/03/25 17:24:58.39
----------------終了----------------
178:デフォルトの名無しさん
12/03/27 01:38:53.36
QMLなんかより本体の方をまともにしてくれ
179:デフォルトの名無しさん
12/03/27 06:25:32.67
最近Qt始めたんだけど、そんなにバギーなん?
180:デフォルトの名無しさん
12/03/27 06:47:52.89
別にバギーじゃないお
181:デフォルトの名無しさん
12/03/27 06:48:54.32
問題が多いだけ
182:デフォルトの名無しさん
12/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 を別スレッドにするという対処はできそうにありません。
URLリンク(qt-project.org)
そのため、完全に手詰まり状態となってしまいました。
もしよかったら freeze を防ぐための アドバイスいただけないでしょうか。
183:デフォルトの名無しさん
12/03/27 21:40:40.22
一定量溜まったら、ってどのくらい?
KB単位なのかMB単位なのか
あまりでかいのなら見えてるところだけappendして遅延ロードさせるとか
184:デフォルトの名無しさん
12/03/27 22:17:30.28
>>183
Line base なので 10000行ごとにロードしています。
appendの処理が重いため、この量が少ないと処理時間が伸びました。
遅延ロードも検討したのですが、私のプログラミングスキルだと、
利便性と兼ね合いを持たせて実装する仕組みを思いつきませんでした。
他のエディタのアルゴリズムとか調べてみると発見があるかもしれないですね。
アドバイスありがとうございます。
185:デフォルトの名無しさん
12/03/27 23:06:01.11
本質的ではないのですが、appendPlainText を insertPlainText に変えて、
このページにあるように SyntaxHighlighter をロード中に切ると、
処理時間が半分程度になりました。
URLリンク(qt-project.org)
(もともと SyntaxHighlighter はロード中は「内部で即return」 するようにしていたので、
あまり影響はないですが。。。)
186:デフォルトの名無しさん
12/03/28 14:20:40.74
Qt Creatorってemacsのキーバインドないの?
187:デフォルトの名無しさん
12/03/28 15:03:47.18
少なくともデフォルトではないんでなかったか
キーボードの挙動は結構自分で変えられるから試してみてはいかがか
188:デフォルトの名無しさん
12/03/28 22:14:23.21
Qt CreatorとかQt Assistantのアイコンがそっくりすぎる
もう少しぱっと見てわかるようにならないかな
189:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 05:29:06.19
馬鹿には無理
190:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 23:37:45.82
今Twitterのクライアント作っててGUIにQt4を使っています。
TLを表示する時、Twitter側からつぶやきの情報を取得して
QLavel作成して描画しようと思っているんですが、
ツイートの文字数、ウィンドウの大きさによってラベルの高さを変えたいです。
リファレンスがわかりにくくてよく分からなかったんですが
setGeometry関数は横の長さだけ指定して
縦を自動調整してくれるようにできるんでしょうか。
できないなら方法ないでしょうか。
丸投げな質問ですいません。
191:営利利用に関するLR審議中@詳細は自治スレへ
12/03/30 00:31:51.58
heightForWidthとか
192:営利利用に関するLR審議中@詳細は自治スレへ
12/03/30 00:34:47.49
>>191
今調べられる環境では無いですが
多分引数intで縦の長さ決定する関数ですね。
その逆って無いですか?
193:営利利用に関するLR審議中@詳細は自治スレへ
12/03/30 09:00:57.21
QTableViewとは違うエリアで変化したデータの変更を、すぐにQTableViewの描画に
反映することってできますか?
今、設定された値によってテーブルの背景色を変化させるようにしていますが、
違うウィンドウで値を変えても、すぐに描画が反映されず、
QTableViewが貼りつけてあるウィンドウに行って、クリックとか何かイベントを
起こさせないと反映されません。
わざわざそのウィンドウに行かずに、すぐに反映されるようにするにはどうしたらいいんでしょうか?
194:営利利用に関するLR審議中@詳細は自治スレへ
12/03/30 09:24:23.35
>>193
QTabView を update() してる?
195:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 04:20:48.74
Qtはいつまで32bitしか配らないのか?
自前でビルドするとエラー出るし
196:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 09:47:18.31
ん?Linuxはx86-64版を配布しておるが。Windowsの話か?
197:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 10:26:51.67
Mac版も64bitだな
198:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 14:15:56.23
Win版も非公式ビルドなら、4.8.0のx64がGoogle Codeにある
199:営利利用に関するLR審議中@詳細は自治スレへ
12/03/31 14:18:33.15
もしかしてこれのことかね?
URLリンク(code.google.com)
200:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 09:39:43.22
重たい処理をしてる最中の描画がうまく働かず、GUIの一部がうまくアップデートされない状態に時々ならないですか?
その箇所をアップデートするようなイベント(クリックとか、マウスオーバーとか)で元に戻るんですが、
放置しておくと永遠に見えないままです。
定期的(1000ms間隔ぐらい?) な MainWindow のリフレッシュとかが必要なんですかね。。。
Macだとこの問題は発生しないのですが、Windowsだと起きます。
201:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 14:38:00.95
>>200
> 重たい処理をしてる最中の描画がうまく働かず、GUIの一部がうまくアップデートされない状態に時々ならないですか?
イベントハンドラで重たい処理をしてれば、イベントループが回らないので
GUIがうまく更新されないのはしょうがないんじゃないかい?
重い処理は別スレッドで処理しないと駄目なんじゃないかな
202:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 15:09:12.57
よく分からんのですが、qtのオープンソース版ってひとつしか頒布されてなくて、
(自分がインストールしたのはこれです → Qt by Nokia v4.8.0 (MinGW OpenSource) )
>>2のLGPLライセンスだと思って使ってもいいってことですか?
つまり、LGPLライセンス用とGPLライセンス用の2種が存在するわけではないですか?
203:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 15:21:08.19
GPL、LGPU好きな方で使える
204:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 15:33:35.09
あ、即レスありがとうございます
205:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 18:08:32.63
初歩的だと思いのですが、質問させてください
QtCreatorを使っており、ui_mainwindowを読み込んだ
MainWindowクラスがあります。
uiではMainWindowウィジェットの子ウィジェットとしてQTabWidgetクラスのtabsウィジェットが
設定されています。
このtabウィジェットに対して色々な処理を加えたい
(コンテキストメニューでタブを追加したり消したりするような処理など)
時に、この処理をMainWindowクラスに書くのは何かちがうのかなと思ったのですが、
別個にTabsクラスを作って、それにtabsを渡して色々処理するようにしようと思ったのですが
セオリー的にはどうなっているのでしょうか
教えていただけますと嬉しいです
206:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 20:51:51.75
Tabsクラスにtabsを渡すって何?
207:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 22:12:58.87
>>205
コンテキストメニューでタブを追加するという処理なら、
・コンテキストメニューを作ってQActionをアサインする
・QAction::triggered()シグナルをMainWindowクラスで受け取る
・追加するtabをQWidgetで作成(もしくはあらかじめ作る)
・ui->tabs->addTab()で追加する
で鉄板だと思うのだが、好きにやってみたらいいんじゃね?
208:営利利用に関するLR審議中@詳細は自治スレへ
12/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審議中@詳細は自治スレへ
12/04/02 00:54:38.58
エスパーじゃないんでよくわからんが、QStringの扱い方がまずいんでないの?
コピーしまくってたりとか、変なループ回して同じ処理を何度も繰り返したりとか。
メッセージが回らなくなるレベルの重さなんて、今時の環境だったらよっぽど無駄なことしないと難しいよ。
210:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 07:15:50.94
ループの中に QApplication::processEvents() を入れるとか、そういう話じゃない?
211:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 08:19:06.11
>>209
QStringの扱いがまずいというのはあるかもですね。
本来、QPlainTextEditは大量の文書を入れる用途には向いていないようなのに、
数十万行程度読みこませることがあるので。。。
あと、signal の送受信の際に、内部的にQStringを何度もコピーしている可能性も
考えたほうがいいかもしれないです。。。
>>210
それも以前試したのですが、目に見えた改善はなかったです。
ううむ。
212:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 10:00:08.79
試してないが、QTextDocumentを別スレッドで作って、
そこにテキストを設定した後にQPlainTextEditにsetDocumentする手は使えない?
QTextDocument::clone() を使ってコピーする必要はありそうだが。
URLリンク(qt-project.org)
動的にテキストが更新されていく場合は難しいかもしれないが。
213:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 10:06:18.35
>>211
> 本来、QPlainTextEditは大量の文書を入れる用途には向いていないようなのに、
> 数十万行程度読みこませることがあるので。。。
それが問題だと思う。
巨大文書用のエディタクラスを作るしかないかも。
#仕事として発注してくれれば受けるけど、そこまでコストかける気はなさそうだね
214:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 14:08:43.81
>>211
>あと、signal の送受信の際に、内部的にQStringを何度もコピーしている可能性も
>考えたほうがいいかもしれないです。。。
QStringはコビーオンライトするようになっているので、ポインタサイズしかコピーしていません。
215:営利利用に関するLR審議中@詳細は自治スレへ
12/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審議中@詳細は自治スレへ
12/04/02 17:58:41.07
ながれをぶったぎってすみませんが、
Qt4.8.0以降でOpenGLを使う場合、glutをincludeしなくなっているので
gluLookAt()が使えません。そうすると、自前で視点変換の行列を
用意しなければならないのですか。それとも代わりの関数がどこかの
クラスに用意されているのでしょうか。
217:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 19:05:22.68
#include <GL/glu.h> を追加すればいいんでないの
URLリンク(bugreports.qt-project.org)
そういう問題じゃない?
218:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 20:33:42.11
>>217
なるほど。たしかにglu.hでうごくみたいですね。
<QtOpenGL/QGLWidget>のなかでgl.hしか読み込んでいなかったので
そうしようと思いませんでした。
リンクによると、Qtではglutを使わない方針になっているんですね。
219:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 20:44:55.49
>>218
Qt4.8から使い始めたから知らなかったけど、
includeしてたのってGLUTじゃなくてGLUじゃない?
OSXはこんな感じで書けばいいみたい
URLリンク(qt-project.org)
220:営利利用に関するLR審議中@詳細は自治スレへ
12/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審議中@詳細は自治スレへ
12/04/02 23:44:06.97
>>213
ググったら似たようなトラブルが山のように出てきたので、
おそらくそうですね。
プロっぽい人の回答だと、
1) オンラインのログのようなものなら、組み込み機能の行数制限を使って、古い行を上から自動で消す
2) ページングに細かくぶったぎる
というのがよく見られるパターンでした。
私も趣味で開発(タダ)してるんで、金はかけられないですw
巨大文書用のエディタクラスですか。。。
作るならQPlainTextEditと上位クラスのコード読まないと無理そうですね。
222:営利利用に関するLR審議中@詳細は自治スレへ
12/04/02 23:52:48.62
>> 212
ああ、それいいかもですね。
setTextDocument の スピード について main thread で検証してみて、
それが速ければ試してみる価値がありそうです。
結果は後日報告します。ありがとうございます。
いやー、随分悩んだのですが、相談すると自分が考えつかないような
解法を色々教えていただけて、助かります。
223:営利利用に関するLR審議中@詳細は自治スレへ
12/04/03 23:10:53.31
Qt 5 Alphaリリースしました
224:108
12/04/04 03:52:13.17
Qt5では、簡単に言うと何がいいのでしょう?
225:営利利用に関するLR審議中@詳細は自治スレへ
12/04/04 11:48:51.05
>>224
URLリンク(qt-project.org)
226:営利利用に関するLR審議中@詳細は自治スレへ
12/04/04 18:19:44.50
>>225
もう和訳でてる
URLリンク(labs.qt.nokia.co.jp)
227:営利利用に関するLR審議中@詳細は自治スレへ
12/04/04 22:29:23.76
>>199
これつかわないと64ビット版のwindows向けにビルドできないのでしょうか???
228:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 00:22:05.26
>>227
WOW64でいいなら使わなくてもよいでしょう
229:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 00:25:37.15
組み込みでもOpenGL使えるのかな
230:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 01:36:43.32
>>229
ドライバがあれば、な。
231:営利利用に関するLR審議中@詳細は自治スレへ
12/04/05 07:58:01.23
>>229
Qt 4ではドライバがあっても問題が多過ぎて満足に使えませんでした。
問題を報告したら、今のアーキテクチャではもう無理なので、Lighthouse迄待ってくれと言われました。
Qt 4.8のLighthouseのOpenGLドライバは、問題がまだあるけれどそこそこ動きます。
232:営利利用に関するLR審議中@詳細は自治スレへ
12/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特有なんで原因がよくわからないんですよね。。。
233:営利利用に関するLR審議中@詳細は自治スレへ
12/04/07 22:26:04.52
>>232
ここ数年こういったQtの実装の不十分さが目立って来ています。
報告しても、古いからもう改善しないとクローズされるのが何度もあって、言う気も失せています。
234:営利利用に関するLR審議中@詳細は自治スレへ
12/04/08 00:50:31.53
そのへんはしかたないと思うけどね。
Javaとかと違ってネイティブで動くことに意味があるんだし。
235:営利利用に関するLR審議中@詳細は自治スレへ
12/04/08 00:55:01.74
QMLの不具合は報告するとすぐさま修正されるよ
QWidgetは放置されるけど
236:営利利用に関するLR審議中@詳細は自治スレへ
12/04/08 11:16:36.41
馬鹿には無理
237:営利利用に関するLR審議中@詳細は自治スレへ
12/04/08 11:44:19.69
オプソは総じて、過去の遺産のメンテみたいな面白くもないことはしたがらないからな
自分で直すか有償サポート申し込めってことだな
238:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 12:35:16.58
オープンソースといってもNokia関係者が8割だそうだ。
239:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 12:59:20.02
NokiaはQMLで何がしたいんだろう?
240:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 17:20:24.03
Qtで作ったMeeGoを捨てて、Windows Phoneに寝返ったNokiaに、
もう一度Qtの開発者達へ目を向けさして、Nokiaのメインストリームにして欲しいんじゃないかな。
241:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 22:51:02.32
Qtの GUI 系のアップデートって、メソッドの呼び出し順序で挙動が変わりますね。
QPlainTextEdit を拡張して、左側にラインナンバーを表示させているのですが、
再定義を以下のようにすると
paintEvent(QPaintEvent *e){
lineNumberArea->repaint(); <--- (1)
QPlainTextEdit::paintEvent(e); <--- (2)
}
Editer本体の描画がうまく動かなかったのですが、
この(1)(2)を逆にしたら問題なく動くようになりました。
重要なイベントを先に動かしたほうがいいみたいですね。
242:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:06:09.30
単に理解できてないだけなんじゃね
243:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:11:35.16
それは単純に、(2)が上書きしているからじゃないの?
Widget が透ける設定じゃなけりゃ、塗りつぶすでしょ。
244:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:33:02.87
>>243
PlainTextEditの描画を少し右寄せして、空いた隙間にライン描画のための QWidget を配置しています。
両者は重なっていないので、塗りつぶしは発生しないです。
ペイントイベントが半動きのようになっていて、以下のような症状がでていました。
- スライダーを動かすと、上下 20 % が空白になる
- 停止すると Editer が真っ白
- クリックすると、描画され文字が確認できる
- カーソルを動かすと、現カーソル行だけが空白
- 左側 30%ほどしか描画されない
上記は全て同時に発生するのではなく、このうちのいくつかが複合的に起きていました。
Win/Macともに問題なかったコードを、Macでコードをリファクタリングしたあとに、
Windowsで動かすと急に上記のような症状が現れて焦りました。
きちんと両方で検証しながらコードの修正変更を加えないと危ういですね。。。
245:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 00:28:09.75
>>244
>PlainTextEditの描画を少し右寄せして
どのようにして右寄せにしていますか。
246:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 14:09:33.70
なんでupdateじゃなくてrepaintなの?
あと URLリンク(qt-project.org) の
> 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.
は関係あるのだろうか
247:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:00:20.51
>>245
setViewportMargins(x, 0, 0, 0);
ですね。
>>246
QPlainTextEdit の 継承クラスの中に QWidget(ライン番号表示)を持っていたのですが、
両者のアップデートのタイミングが異なっており、「行番号がアップデートされずに、
実際の行と食い違いがある」という状態になっていました。
なので、継承クラスで PaintEvent をオーバーライドし、
「本来のPaintEvent + 同時にアップデートされなかったWidgetのアップデート」
を行うようにしています。
248:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:01:56.89
伝え忘れましたが、行番号はSQroll範囲全てにあるわけではなく、
現在見ている Window範囲にしか存在せず、必要に応じて行番号を
アップデートする仕組みで動作しています。
249:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:04:30.55
>>246
どっかのドキュメントで 「update ではなく、repaint を呼び出すべき」というのを見かけ、
それを盲目的に信じていました。
申し訳ないですが、一ヶ月近く前の話なので覚えていないです。ごめんなさい。
250:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:14:29.07
lineNumberArea実装の例はQtのサンプルに含まれてるよ
俺はそれ参考にして実装してる
251:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:20:05.39
>>244
>塗りつぶしは発生しないです
どうやって確認したの?
252:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:21:17.23
Code Editor Example | Documentation | Qt Developer Network
URLリンク(qt-project.org)
253:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:45:22.15
>>250,252
私もこれを参考にしました。
LineNumberAreaの行番号表示のアルゴリズム と、QPlainText の共存方法自体はほぼ同じです。
ただ、描画イベントの処理系はサンプルのままだとうまく動かなかったので、変更を加えています。
あと、他機能との実装の兼ね合いもあるので。。。
>>251
エリアがかぶっていないからです。
<--LineNumberArea->
<----(blank)--------------|----QPlainTextArea-------------->
というような感じですね。
254:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 23:48:57.16
結局、Qtのせいではなくて理解が足りなかったということでおk?
255:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 00:04:59.07
>>254
私はエキスパートはおろか、本業プログラマですらないので、
Qtの問題性を疑うより私の理解不足を疑うほうが妥当だと判断します。
ただ、文脈を持たないその指摘に、なんの意味があるかがよく分かりません。
低レベルな質問でスレ汚しをするな、という指摘なら謝ります。
256:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 08:29:10.49
>>255
> 私はエキスパートはおろか、本業プログラマですらないので、
> Qtの問題性を疑うより私の理解不足を疑うほうが妥当だと判断します。
以下の文章は自分の理解不足を疑った方がいいと判断している人の
文章には思えないのだが
理解不足の人が知ったかぶって不完全な知識をひけらかしているように読めた
> Qtの GUI 系のアップデートって、メソッドの呼び出し順序で挙動が変わりますね。
> QPlainTextEdit を拡張して、左側にラインナンバーを表示させているのですが、
===中略===
> 重要なイベントを先に動かしたほうがいいみたいですね。
257:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 20:21:10.84
煽るより正しい情報を書き込めよ
258:デフォルトの名無しさん
12/04/11 22:10:03.60
実践 Qt 4プログラミング
URLリンク(www.oreilly.co.jp)
目次
推薦のことば
序文
本書で使用されている表記規則
意見と質問
謝辞
1章.デスクトップ用ハイブリッドインターネットアプリケーション
1.1 インターネット指向ウィジェット
1.2 WebKitの適用
2章.オーディオとビデオ
2.1 QSoundと QMovieの適用
2.2 Phononマルチメディアフレームワーク
3章.モデル /ビュー.テーブルモデル.
3.1 Qtのモデル /ビューアーキテクチャ
3.2 テーブルに対する QStandardItemModelの使用
3.3 カスタムテーブルモデルの作成
259:デフォルトの名無しさん
12/04/11 22:10:25.48
4章.モデル /ビュー.ツリーモデル.
4.1 ツリーに対する QStandardItemModelの使用
4.2 カスタムツリーモデルの作成
5章.モデル /ビュー.デリゲート
5.1 データ型固有のエディタ
5.2 データ型固有のデリゲート
5.3 モデル固有のデリゲート
6章.モデル /ビュー.ビュー
6.1 QAbstractItemViewのサブクラス化
6.2 モデル固有の可視化を行うビュー
7章.QtConcurrentを用いたスレッド化.
7.1 スレッド内での関数実行
7.2 フィルタとマップによるスレッド分散
8章.QThreadを使ったマルチスレッドプログラミング
8.1 独立データの処理
8.2 共有アイテムの処理
9章.リッチテキストエディタの作成
9.1 QTextDocumentの概要
9.2 カスタムテキストエディタの作成
9.3 リッチテキスト単一行エディタ
9.4 複数行リッチテキスト編集
260:デフォルトの名無しさん
12/04/11 22:10:54.60
10章.リッチテキストドキュメントの作成
10.1 QTextDocumentから書き出したファイルの品質
10.2 QTextDocumentの作成
10.3 ドキュメントの書き出しと印刷
10.4 ページを描く
11章.グラフィックス /ビュー.ウィンドウの作成
11.1 グラフィックス /ビューアーキテクチャ
11.2 グラフィックス /ビューウィジェットとレイアウト
11.3 グラフィックスアイテム入門
12章.グラフィックス /ビュー.シーンの作成
12.1 シーン、アイテム、アクション
12.2 QGraphicsViewの拡張
12.3 ドックウィジェットツールボックスの生成
12.4 カスタムグラフィックスアイテムの作成
13章.アニメーションと状態マシンフレームワーク
13.1 アニメーションフレームワーク入門
13.2 状態マシンフレームワーク入門
13.3 アニメーションと状態マシンの結合
終わりに
精選参考文献
索引
オライリーの新刊は内容的に入門書ではないね。
マルチメディア系てんこもりで期待大。
261:デフォルトの名無しさん
12/04/11 22:21:57.74
エディタの所のカスタムテキストエディタは、1行エディタとかやってるとこからして
IME周りからやってくれるのかな?だとしたらほしいなあ。よくわかんないし
262:デフォルトの名無しさん
12/04/12 01:23:36.35
翻訳元これかな、サンプルコード見るとそこまで凝ったエディタでもなさそう
Advanced Qt Programming
URLリンク(www.qtrac.eu)
263:デフォルトの名無しさん
12/04/12 01:35:00.34
QTextEditの使い方の説明だよ
264:デフォルトの名無しさん
12/04/12 08:36:37.86
Mac OS-X Lion 10.7.3 に Qt SDK 1.2.1 をインストールしようとすると、
C++ コンパイラが無い、Xcode の最新版をインストールしろと言われます。
Xcode 3.2 を既にインストール済みだったので uninstall-devtools で消し、
Xcode 4.3.2 を App Store からインストールしました
(/Application/Xcode.app が出来、空の Cocoa プロジェクトがビルド出来る
ことを確認しました)
しかし、Qt SDK 1.2.1 をインストールしようとすると、以前と同様に
C++ コンパイラが無い というダイアログが表示されます。
どうしたら SDK をインストール出来るのでしょうか?
265:264
12/04/12 08:38:46.24
すみません訂正です。
誤:/Application/Xcode.app
正:/Applications/Xcode.app
266:デフォルトの名無しさん
12/04/12 08:56:20.72
>>264
頑張ってこのスレ読み返せば解決する
267:デフォルトの名無しさん
12/04/12 09:25:27.01
>>266
> 頑張ってこのスレ読み返せば解決する
情報ありがとうございます。xcode で検索して >>166 を発見しました。
>>166
> 需要は無さそうですが、解決したので念のため。
いえいえ、需要大有りです。大変助かりました。
ありがとうございます。
今、Qt SDK 1.2.1 をインストール中です。C++ が無いというエラーダイアログ
は出なくなりました。
268:デフォルトの名無しさん
12/04/12 13:58:42.21
Mac で QTextEdit に(フォントはデフォルトのまま)日本語の文字を入れると、
行が下に少しずれるのですが、これはそういうものなのでしょうか?
ずれないように対処する方法がありましたら、ご教授ください。
よろしくお願いします。
269:デフォルトの名無しさん
12/04/12 22:22:44.26
Threadの継承クラス以外で sleep 関数に類似する関数は使えないのでしょうか。
QMainWindow を close する際に、child thread (無限ループ)を終了させたいです。
closeEvent を継承して、その中で以下のような形で実装するつもりだったんですが、
QThread::sleep() は protected だとコンパイラに怒られてしまいました。
アドバイスいただけないでしょうか。
thread->terminate();
while(true){
sleep(100);
if(thread->isFinished()) break;
}
QTest に sleep があったのですが、これはとりあえず保留しています。
270:デフォルトの名無しさん
12/04/12 22:46:34.89
sleep の問題の解決になっていないのですが、threadの終了を待つには
thread->terminate();
while(!thread->isFinished(){
QCoreApplication::processEvents();
}
で十分でした。
マシンによると思うのですが、うちのやつだと100回以内にループを
抜けていたので sleep するレベルではありませんでした。
271:デフォルトの名無しさん
12/04/12 22:53:29.53
wait()だろ普通
272:デフォルトの名無しさん
12/04/12 23:09:12.95
>>271
wait() って、そのインスタンスに走らせたスレッド(runが動いているやつ)を止めるのではなく、
呼び出し元のを止めるんですね。。。
wait()を使うことにします。
ありがとうございました。
273:デフォルトの名無しさん
12/04/12 23:17:50.70
wait()はメインスレッド止まるけど、while使うとQCoreApplication::processEvents()呼ぶから画面がぬるぬる動くんじゃね
274:デフォルトの名無しさん
12/04/13 07:31:31.12
>>270
QTimer::singleShot()で呼び出されるスロットで、スレッドの終了判定をするというのはどうでしょうか。
スレッドが終了していなければ、singleShot()を再度呼び出す。
ビジーループにならず、wait()でメインスレッドが固まるのも避けられます。
275:デフォルトの名無しさん
12/04/13 09:40:19.86
>>269
>Threadの継承クラス以外で sleep 関数に類似する関数は使えないのでしょうか。
QTest::qSleep()は別として、メインスレッドでsleep関数に類似するものを使うとGUIが固まるので、
敢えて用意していません。
276:デフォルトの名無しさん
12/04/13 13:22:55.99
QTimerだとかで小細工しなくても、こんなんで十分じゃね?
while(!thread->wait(300))
{
qApp->processEvents();
}
277:デフォルトの名無しさん
12/04/14 00:11:59.16
270です。
>>273
確かにそうですね。挙動として問題がないので、結局この実装のままにしています。
>>274
closeEvent 内部で終了を待ちたかったので、今回の処理はそれは利用しませんでした。
その方式が一番 GUI に負担が少なくていいですよね。
>>275
sleep に関わらず main thread で時間がかかる処理はやらせないほうが無難みたいですね。。
入門書にあった基本中の基本ですが、頭から抜けていましたw
>>276
wait()のみと、while 方式の両方のいいとこをとったような実装ですね。
while内の判定がスマートw
278:デフォルトの名無しさん
12/04/14 00:54:10.88
Macでアプリの配布ってどうやります?
Deploying an Application on Mac OS X
URLリンク(qt-project.org)
という記事を見つけましたが、もっと簡単にやる方法があったら教えてもらえないですか?
できれば Qt Creator からそのまま出力したいです。
279:デフォルトの名無しさん
12/04/14 03:57:34.72
質問させてください。
QtCreator のアクションエディタで生成したQAction(button1)をQToolBar(toolBar)の
部分にドラッグアンドドロップして、
toolBarからそのbutton1を取得したいのですが、
QAction* button1 = toolBar->findChild<QAction *>("button1");
としてもヌルポインタが返ってきてしまうようです。
QtCreatorのデザイナーの右にあるパースペクティブでは、
ツリー構造でbutton1はtoolBarの子供のような感じになっているのですが、
uiファイルのxmlを見てみると親子関係になっていないようでしたので
これがfindChildで取れない理由だと思うのですが、
どのようにすればbutton1のactionを取得できますでしょうか。
280:デフォルトの名無しさん
12/04/14 09:03:04.90
countとかすると、0じゃない値が帰ってくる?
ワンラインで取ろうとせず、どの行程でコケてるか調べてみたら。
しばらく使ってないから忘れたけど
menubar -> menu -> action
って親子関係じゃなかったっけ?
281:デフォルトの名無しさん
12/04/14 09:04:22.15
あ、ごめん。menubar じゃなくて toolbar か。
282:デフォルトの名無しさん
12/04/14 09:17:00.41
ui->button1とかでアクセスできるだろ
283:デフォルトの名無しさん
12/04/14 10:52:39.37
馬鹿には無理
284:デフォルトの名無しさん
12/04/14 11:42:54.59
AccessとQtは同じくらい面白い。
285:279
12/04/14 12:36:13.14
レスありがとうございます。
uiを色んなモジュールで引き回しまくるのが嫌なので、できればtoolBarから取得したいのですが、なんとかならないものでしょうか。
QTでは普通、どのモジュールからもuiオブジェクトから個々の部品オブジェクトにアクセスするものなんでしょうか
286:デフォルトの名無しさん
12/04/14 12:38:25.90
他のMacで動くか試していないですが、以下のコマンドを使うと Mac で
アプリをデプロイできそうです。
# which macdeployqt
/usr/bin/macdeployqt
# cd /usr/bin/
# ./macdeployqt /PASS_TO_APP/myapp.app
※ myapp.app は Qt Creator で作ったアプリ
これをやると、myapp.app が 1M ぐらいから 35M ぐらいに膨らんで、
パッケージの中にライブラリが色々と入っていたました。
287:デフォルトの名無しさん
12/04/14 12:46:35.96
>>285
その部分だけ ui じゃなくて、コードを使って GUI を作ったら?
そしたら、toolBar から簡単に子供を取れるんじゃないかな。
288:デフォルトの名無しさん
12/04/14 13:39:19.28
じゃあ、toolbar->actions()から自分で検索すれば?
289:デフォルトの名無しさん
12/04/14 14:11:50.67
スレチかもしれんが、286のついでに。
Mac で Qtで作ったアプリにアイコンをつけたければ、
myapp.app/Resources/ に xxx.icns を追加。
info.plt を 開いて、追加したアイコンを icon に設定。
アイコンのファイル icns を作るには、Img2icns というアプリが便利だった。
URLリンク(www.macupdate.com)
290:デフォルトの名無しさん
12/04/14 14:13:37.19
ちなみに、286 の方法なのですが、snow leopard でコンパイルしたものは、
qt4 をインストールしていない lion で動きました。
10.5 はよくわからんです。
291:デフォルトの名無しさん
12/04/14 14:57:30.19
QT Creatorには新しいファイルの追加でC++ソース、ヘッダの追加は可能ですが
新しいフォルダの追加というのが見つかりません。
ソースファイルを下位フォルダを作成し仕分けする、というようなことは
できないのでしょうか
292:デフォルトの名無しさん
12/04/14 15:12:45.71
できますよ
293:デフォルトの名無しさん
12/04/14 15:15:07.65
>>291
そんなもの下位フォルダ作ってソースをそこに置いて.pro書き換えればいいだけ。
何でもRADツールの機能に頼らないで、.proを手で編集することくらい覚えないと
使いこなせないよ。
つーか.proを直接編集する方が早いし、自由も利く。コメントも書けるし。
294:デフォルトの名無しさん
12/04/14 15:17:20.81
よく解らなくて、すいませんありがとうございました。
295:デフォルトの名無しさん
12/04/14 15:40:33.93
291です。
>>292
>>293
レスありがとうございます。
今までは既存ファイルの追加で新しいファイルを追加していたので
新しいフォルダの作成は気に留めていませんでした。
.proの編集はライブラリ追加等で触っているので出来なくは無いのですが、
可能であればGUIから追加したいと思っていたのですが・・・。
296:デフォルトの名無しさん
12/04/14 16:37:06.65
新しいファイルの追加で出てくるダイアログで右クリックしたらディレクトリくらい作れるだろ
297:デフォルトの名無しさん
12/04/14 16:49:14.93
Qtで作成したアプリケーションってデバッガ上じゃなきゃ動作しないのに
なんで人気なの?
298:デフォルトの名無しさん
12/04/14 16:55:12.51
>>297
ha? Google EarthやPhotoshop Elementsがデバッガー上で動いてたか?
299:デフォルトの名無しさん
12/04/14 17:04:09.99
>>297
んなわけないだろ?
QtのbinディレクトリにPATH通してないんじゃないのか?
300:デフォルトの名無しさん
12/04/14 17:06:15.77
>>295
ヤレヤレ。
やたらにソース嫁ってのもどうかと思うが、こういうのはやっぱりゆとりなのか?
301:デフォルトの名無しさん
12/04/14 18:27:02.18
>>293
ようやく理解できました。
フォルダがツリーに表示されている時はそこから追加、
フォルダが表示されるのはフォルダが必要になった時、なのですね。
先にフォルダだけ作ってからそこから新規作成するのだと思ってました。
>>300
申し訳ないです。出来れば煽りだけではなくソースの提示をお願いします。
302:デフォルトの名無しさん
12/04/14 18:30:12.52
>>255と同じ臭いがする…
303:デフォルトの名無しさん
12/04/14 19:02:13.24
馬鹿には無理
304:デフォルトの名無しさん
12/04/14 19:22:14.51
286です。
このコマンドを利用したあとで、何度かコンパイルをしていたら
QWidget: Must construct a QApplication before a QPaintDevice
というエラーが出るようになりました。
コード的に問題はなく、きちんと new しているWidget にたいして
GUI イベントを呼ぶタイミングでエラー起こっており、
ぐぐったら、どうやら
- release と debug のコードが混ざっている
- 実行ファイルとライブラリのバージョンが違う
などの原因があるようです。
特定のコンポーネント(渡しの場合はQProgressDialog)でのみ発生する可能性があるので、
気をつけたほうがよさそうでした。
305:デフォルトの名無しさん
12/04/14 19:26:01.46
macは糞
306:デフォルトの名無しさん
12/04/14 19:27:03.60
>>304
馬鹿には無理
307:デフォルトの名無しさん
12/04/14 19:29:01.55
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
QWidget: Must construct a QApplication before a QPaintDevice
308:デフォルトの名無しさん
12/04/14 19:30:06.78
なんで素人ってエラーメッセージ読まないんだろうな
309:デフォルトの名無しさん
12/04/14 19:39:10.41
エラーメッセージからは
「QPaintDevice を 使う前に QApplication を作れ」
とだけしか読み取れないのですが。。。
問題が発生するアプリケーションを破棄し、リビルド -> デプロイ用にコマンド呼び出し
としたら直りました。
310:デフォルトの名無しさん
12/04/14 21:23:02.15
既に Deploy したものを Qt Creator が上書きするのがよくないかもしれないですね。
毎回デスクトップにコピーしてから、それを Deploy 用にすることにします。
311:285
12/04/14 22:17:28.95
レスありがとうございます
>>その部分だけコードで
そうすれば多分解決すると思うのですが、デザイナでポトペタでやると
うまくいかないというのが釈然とせず・・
デザイナで置いたアクションをうまくコード側で取得するすべはないものかと。。
>>actions()
こんなメソッドあるんですね。
ただ複数actionあった場合は複数返ってきて、
それぞれ別の処理を加えたい時に面倒臭そうですね
toolBar->serachAction('playButton');
みたいなことが出来ればいいのですが、
こういうメソッドはないのでしょうか?探しても見つからないです。
あまり需要がないということでしょうか。
コードでActionを生成しましょうということなのですかね・・
312:デフォルトの名無しさん
12/04/14 22:22:59.77
ないときはつくれよ
313:デフォルトの名無しさん
12/04/14 23:08:28.81
>>311
自分でsearchActionとやらを作れ
余裕だろ
314:デフォルトの名無しさん
12/04/15 00:25:29.22
>>311
デザイナで作ると、アプリが複雑になるにつれて、機能を作り込むのがキツくなりませんか?
コードでGUIも作ると、「この Widget 周りの処理が複雑になってきたなぁ」 -> 「継承 Widget に仕事を集約するか」
という流れが簡単にできると個人的には思っています。
315:デフォルトの名無しさん
12/04/15 01:12:10.32
PyQt4で最近GUI開発を始めたのですが、わからないところがあったのでご教示願います。
SpinBoxの値などの変更と連動してWidget(PushButtonなど)の追加、削除を動的に行いたいのですが、なかなかうまくいきません。
TestWidgetというクラス(QWidgetを継承)にself.spinbox(QSpinBox)と、self.buttons(QPushButtonの配列)、self.buttonPanel(QWidget、self.buttonsをこの上に配置)、を持たせ
self.spinbox.valueChanged.connect(self.setButtons)とし、
値が変わるごとにself.buttonPanelを作り直してみたり、
self.buttonPanelのlayoutをTestWidgetに持たせ、同様にしてlen(self.buttons)とspinboxの値に応じて
layout.addWidgetやremoveWidgetで調整してみたり自分が思いつく限りのことはやってみましたがだめでした。(かなり的はずれなことをしているかもしれません)
どうすればいいかわかる方がいらっしゃればお教えください。
316:デフォルトの名無しさん
12/04/15 01:25:16.19
それでいいよ
317:デフォルトの名無しさん
12/04/15 01:30:23.82
>>315です。説明不足な点があったので補足しておきます。
self.setButtonsは自作のメソッドで、
def setButtons(self,num):
self.buttons=[]
layout=QVBoxLayout()
for i in range(num):
self.buttons.append(QPushButton(parent=self))
layout.addWidget(self.buttons[i])
self.buttonPanel=QWidget(parent=self)
self.buttonPanel.setLayout(layout)
と言う感じにspinboxの値が変わるごとにbuttonPanelを作り直しています。
別インスタンスになっているから変更が反映されないのかとおもい、TestWidget全体のlayoutを再びセットしなおそうとしたら今度は別のところがうまく行かなくて...と言う感じでこの方法は断念しました。
318:デフォルトの名無しさん
12/04/15 01:32:12.61
それでいいよ
319:デフォルトの名無しさん
12/04/15 09:15:55.10
>>317
qtに限った話じゃないが、一気に作ろうとせず、ちょっとずつ挙動を
確認しながら作ってみたら?
どっかでイベントが呼び出されていないとか、間違った変数を使っているとかさ。
あと、見た目じゃなく qDebug() などでwidetの構成を出力してみたりとか。
本当は追加されているのだけど、paintイベントが走らず見えていないだけかもよ。
まずは問題箇所を切り分けないと。
320:デフォルトの名無しさん
12/04/15 10:41:35.00
>>317
PySideだけどこんな感じで出来た
URLリンク(pastebin.com)
321:デフォルトの名無しさん
12/04/15 12:51:06.84
馬鹿には無理
322:デフォルトの名無しさん
12/04/15 13:58:48.98
他の部分のウィジェットにアクセスしたくなる度に渡す引数増やすのが大変そうなので
結局ui引き回しで実装することにしました。
アドバイスくださった方々ありがとうございました!
323:デフォルトの名無しさん
12/04/15 14:45:22.27
>>319
>まずは問題箇所を切り分けないと
おっしゃる通りです。しかしそうしようにもまだ何がどう動いているのかもわかっていない(したがって何が問題の原因となり得るのか適切に判断できない)状態なので、ちゃんと本などで勉強します。
>>320
できました!!ありがとうございます。
buttonPanelのlayoutをTestWidgetに持たせて追加・削除を行う方法は、試してみたといいったもののあまり真面目にやっていませんでした(その頃には疲れ果てていて...)。
ボタンの削除をしたときにウィンドウのサイズが縮小しませんでしたが、setButtonsが呼び出される度にself.resize()で大きさを直したやったらまだ少し挙動不審ではあるもののいけそうなので頑張ってみます。
ありがとうございました。
324:デフォルトの名無しさん
12/04/15 14:52:53.68
QSignalMapperでスロットに2つ引数を渡したいのですが
どう書けばよいでしょうか??
325:デフォルトの名無しさん
12/04/15 17:25:29.87
>>322
馬鹿の考え休むに似たりってやつか…
326:デフォルトの名無しさん
12/04/16 21:30:16.10
せやから、AccessとQtは同じくらいおもしろい言うとるヤンか!
327:デフォルトの名無しさん
12/04/16 21:57:23.61
なんのはなしやねん
328:デフォルトの名無しさん
12/04/17 16:46:43.11
Qt 4.8.1のビルドに挑戦してます。
Windows7 64bit + VC2010Pro 64bit + ActivePerl 5.14.2 (32bit)の
環境です。しかし、ビルドがエラーで終了してしまいます。
configの指定次第でビルドが成功するのでしょうか。
ちなみに別のマシンのMingw32でも4.8.1のビルドは失敗してしまいます。
329:デフォルトの名無しさん
12/04/17 16:55:33.56
エラーメッセージ貼れ
330:デフォルトの名無しさん
12/04/18 01:49:52.57
エラーメッセージに原因が書かれてる
そこを直せばコンパイルできる
331:デフォルトの名無しさん
12/04/18 02:05:07.91
文字コードについて質問です
ウェブからとってきたデータがEUC-JPなので、
QTextCodec* euc=QTextCodec::codecForName("EUC-JP");
QTextDecoder *dec = euc->makeDecoder();
としてデコーダー通して変換しても、どうもQtがEUC-JPに対応していないようです
リファレンスにはEUC-JPもあるのですが・・・
どうすれば変換できるでしょうか。
環境は
windows7, QtCreator2.4.0, Qt4.7.4
です
332:デフォルトの名無しさん
12/04/18 02:49:49.82
QString str = enc->toUnicode(char* EUC-JPの文字列)
でいけたはず
333:デフォルトの名無しさん
12/04/20 01:51:55.64
qt5 alphaをVS2010でビルドするとqtsvgでエラーでるんだが、誰かビルド成功したひといる?configureかperl buildが悪さしてるっぽいんだけど。
因みにqtbaseはビルドできて実行もできる。
しかも最新ソースをgitクローンしようとしたら途中で失敗する。
334:デフォルトの名無しさん
12/04/20 17:04:00.67
>>333
問題なくビルドできたのはLinuxだけでした。
335:333
12/04/20 22:14:44.58
>>334
その後、qtsvgでエラーの原因分かりました。
単純にconfigure時のsyncqtスクリプトで環境変数QTDIRを参照していて、
旧バージョンのパスC:\Qt4.x.xを参照していたのが原因でした。
でも今度はQtWebkitでicu何チャラがないみたいなエラーがでてしまった…。
336:デフォルトの名無しさん
12/04/22 02:41:47.25
遅くなり申し訳ありません
>>332
どうも、
QTextCodec* euc=QTextCodec::codecForName("EUC-JP");
自体が失敗しているようです。
QTextCodec* euc=QTextCodec::codecForName("EUC-JP");
euc : <unavailable synchrounous data>
となっています。
対応していないのかな・・・
337:デフォルトの名無しさん
12/04/22 10:32:28.78
EUCはオワコン
338:デフォルトの名無しさん
12/04/22 13:59:30.98
プラグインが追加されていなかったみたいです。
とりあえずヘッダーに
#include<QPlugin>
Q_IMPORT_PLUGIN(qjpcodecs)
として、.proファイルに
QTPLUGIN += qjpcodecs
としたけど、それでも通らない。
cannot find lqjpcodecsd
のエラーが出される・・・
339:デフォルトの名無しさん
12/04/23 05:00:04.36
paintEvent以外でwidgetに描画出来ないのが不便すぎる
Qt以外だと出来たような気がするけどこんなもんなのか
340:デフォルトの名無しさん
12/04/23 05:30:35.79
>>339
その代わりにフリッカを防ぐという利点がある。
341:デフォルトの名無しさん
12/04/23 05:36:20.53
それって利点なの?
フリッカを防ぎたいときは単にpaintEventで描画すればいいだけで
paintEvent以外での描画を禁止する意味あるの?
342:デフォルトの名無しさん
12/04/23 07:23:53.54
>>341
>フリッカを防ぎたいときは単にpaintEventで描画すればいいだけで
それだけでは、ウィンドウ全体でのフリッカは防げない。
343:デフォルトの名無しさん
12/04/23 07:32:23.88
PAINTイベント以外で描画しても
フリッカで困ったこと一度もないけどな
344:デフォルトの名無しさん
12/04/23 09:42:22.70
>>339
できますよ
ちなみにフリッカとは関係ない
paintEventで描画してもへたくそだとフリッカでる
345:デフォルトの名無しさん
12/04/23 16:27:43.06
>>328です。
QTDIRのせいかと思い、QTDIR=D:\Qt\4.8.1 その他のパス通しなおして
再チャレンジしました。しかしfatal errorで止まります。エラーと直前のwarningは
以下です。おてあげです。
d:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\yvals.h(21) : war
ning C4005: '_HAS_TR1' : マクロが再定義されました。
コマンド ラインの引数 : '_HAS_TR1' の前の定義を確認してください
NMAKE : fatal error U1077: '"d:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\amd64\cl.EXE"' : リターン コード '0x2'
Stop.
NMAKE : fatal error U1077: '"d:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\amd64\nmake.exe"' : リターン コード '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : リターン コード '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : リターン コード '0x2'
Stop.
346:デフォルトの名無しさん
12/04/23 16:52:06.61
>345
VS2010はSP1かい?
もしアップデートしてないなら試してみてはどうかな
347:デフォルトの名無しさん
12/04/23 18:34:04.07
>>346
そういえば、EXPRESS版からProにしたときにちゃんとSP1あてなおしたか
あやしくなってきました。後日、環境整えて再チャレンジします。
348:デフォルトの名無しさん
12/04/23 19:35:28.08
>>343
>PAINTイベント以外で描画しても
>フリッカで困ったこと一度もないけどな
嘘をつくな、できる訳がない。
>>344
>できますよ
こちらも嘘をつくな、できないよ。
349:デフォルトの名無しさん
12/04/23 19:44:54.47
>>344
>ちなみにフリッカとは関係ない
ウィンドウレベルでというのを理解してないな。
350:デフォルトの名無しさん
12/04/23 22:15:55.17
恥の上塗りですね
わかります
351:デフォルトの名無しさん
12/04/25 09:38:12.71
NOKIAがジャンク級になっちまったい。 いずれサムスンが買収かな?
サムスンQt... いやな響きだ。
352:デフォルトの名無しさん
12/04/25 19:46:07.38
オープンソースなんだからフォークすりゃいいじゃん
353:デフォルトの名無しさん
12/04/25 23:25:17.28
だれか・・・プラグインの追加方法を教えてください
>>338の方法では無理でした
354:デフォルトの名無しさん
12/04/26 00:13:47.37
細かく見てないけど
Qt4.8.1 VS2010版だと何もしなくてもQTextCodecでEUC-JPからUnicodeになったよ
355:デフォルトの名無しさん
12/04/26 00:35:35.98
パスが通ってないか拡張ファイルが目的の場所に生成されてない
356:デフォルトの名無しさん
12/04/26 01:08:25.76
スタイルシートでUIの色変えるの、なんかめちゃくちゃ大変なんだけど。
どのパーツのどの状態とか、わけわからん。
Qt使ったアプリが流行ってるっていうけど、ほんとにこんなのみんな使ってるの?
357:デフォルトの名無しさん
12/04/26 07:32:01.70
>>356
Qtのスタイルシートは、失敗作で、使ってはならない機能です。
もう改善もバグの修正もされません。
スタイルシートは、駄作だけれど、他によいところは沢山ありますよ。
358:デフォルトの名無しさん
12/04/26 07:53:12.63
CDSCSS
359:デフォルトの名無しさん
12/04/26 08:00:20.64
でもスタイルシート使わないと出来ないこともあるんでね?
360:デフォルトの名無しさん
12/04/26 10:53:03.77
Qtは失敗作だらけじゃん
それが証拠にQtが使われたプロジェクトなんて極々わずかw
361:デフォルトの名無しさん
12/04/26 11:48:26.79
だらけって...他は?
> それが証拠にQtが使われたプロジェクトなんて極々わずかw
産業機器とかの世界とか、知らないだろ?
必死にネガキャンするのは、何でかねぇw
362:デフォルトの名無しさん
12/04/26 12:01:38.96
☆ 午後からはQt vs WPFをお送り致します。お楽しみに! ☆
363:デフォルトの名無しさん
12/04/26 12:04:30.34
Qtを使ってて、一番普及しているアプリは、KDEだよ。
Windows 使ってて、モバイルぐらいしか興味がない人には、どうでもいいことなんでしょうけど。
それならターゲットに合わせて、素直にC#とか、Objective-Cとかやればいいのに。
creator でたから、急激にWindows ユーザーが、このスレに増えたけど、正直何を期待して
わざわざやるのか俺には理解できない。
やたら、もう終わりとか言ううざい人がいたりするけど、Linuxがどうでもいいのなら、Qtは最初から
終わってますよ。
364:デフォルトの名無しさん
12/04/26 12:06:02.43
>失敗作だらけ
なのに
>使われたプロジェクトなんて極々わずか
?
365:デフォルトの名無しさん
12/04/26 12:59:53.72
>> 359
カスタムスタイルかQProxyStyleがあれば十分、
スタイルシートはQProxyStyleと同じ考え方で作られている
366:デフォルトの名無しさん
12/04/26 16:38:23.28
>>363
> creator でたから、急激にWindows ユーザーが、このスレに増えたけど、正直何を期待して
> わざわざやるのか俺には理解できない。
俺(と言うかウチ)の場合は死に体のC++ Builderからの乗り換え。書きためた資産があるから、
簡単にC++から他の言語に移行できないし。
367:デフォルトの名無しさん
12/04/26 16:42:22.20
>>366
VC++じゃだめなん?
368:デフォルトの名無しさん
12/04/26 18:26:47.08
>>367
MFCなんか使う気がしない。
.NETだとC++/CLIになって、ANSI C++で書かれた資産が利用できない。
369:デフォルトの名無しさん
12/04/26 20:10:33.68
凄いなぁ。
BCBから乗り換えたかったけど、いろいろと違いすぎて30分で諦めた。
370:デフォルトの名無しさん
12/04/26 21:31:07.77
>>363
どう考えてもPhotoshopやGoogle Earth、Operaの方が普及してると思う
371:デフォルトの名無しさん
12/04/26 21:44:07.41
流石にOperaよりはKDEの方が
372:デフォルトの名無しさん
12/04/26 21:57:53.77
>>369
さすがに30分は早すぎるんじゃぁ...
乗り換えるんだからいろいろ違うのは覚悟の上。Qtはまだ違いが少ない方かも。
GTK+(のC++バインディング)やらwxWidgetsやらいろいろ試してみて、親しみ
やすさや開発環境の出来でQtになった。
でもBCBはC++だからまだいい方。Delphiの人はどうするんだろう...
373:デフォルトの名無しさん
12/04/26 22:50:25.32
エンバカデロ死に体なのか
374:デフォルトの名無しさん
12/04/26 23:25:44.85
>>373
一例を挙げると、一時は一日に10件や20件の書き込みがあったメーリングリストに
閑古鳥が鳴いて、数週間や酷いと数ヶ月に1件になった。完全に取り残されたと
思った。
他にもあるんだけど、無責任なことは書けないので控えとく。
そこへ持ってきて2009版で大きな仕様変更が行われたのに、ドキュメント(ヘルプ)が
嘘だらけの無茶苦茶でわけわからなかったのが乗換えを決断する決め手になった。