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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/14(火) 22:42:28
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 総合スレ 8 【Win/Mac/Linux】
http://hibari.2ch.net/test/read.cgi/tech/1280950209
0002デフォルトの名無しさん2010/12/14(火) 22:43:28
■リンク

・Qt Development Frameworks (Nokia社のQt公式サイト)
http://qt.nokia.com/title-jp

・SRA社(日本の代理店)の日本語で読める Qt 関連ドキュメント
http://www.sra.co.jp/qt/relation/index.html

・Qt Users Forum Japan
http://qtusersforum.s2.zmx.jp/forum/index.php


■ライセンス関連まとめ

各ライセンスでの自作アプリのソース公開/頒布

Qtのライセンス   アプリのライセンス     Qtの頒布/(変更部分のソース公開)
GPL           GPL(ソース公開必須)      必須
LGPL         任意(ソース公開不要)      必須
商用          任意(ソース公開不要)      不要

*: LGPLは動的リンク時

実際には他にも条件(リバースエンジニアリング関係とか)あるので、
きちんとライセンスの条文を読むこと。
0003デフォルトの名無しさん2010/12/14(火) 22:44:18
Windows ユーザー向け Tips
・プロジェクトのパスに日本語を入れちゃダメ
・日本語のソースコードは、MinGW版ならUTF-8、VC版ならSystem(Shift-JIS)
 プロジェクト作成後に「プロジェクト」タブの「エディタの設定」→「デフォルトの文字コード」を設定すると幸せになれる
・デバッグ出力などが文字化けする場合、プログラムの最初で文字コード変換設定をする
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); //ソースの文字コードを指定("utf-8"や"Shift-JIS")
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); //同上
qDebug() << "うまく表示できた?";
・MinGW版の配布時は mingwm10.dll も一緒に入れておく(public domain で配布上の制限はない)

■インストール方法:MinGW版Qt & Qt Creator

(1)「Qt SDK for Windows」をインストールすればOK
 http://qt.nokia.com/downloads/sdk-windows-cpp

■インストール方法:VisualC++版Qt & Qt Creator

MinGW版との違い:Phononが利用可能。VC版の方がいろいろ速いらしい

(1)「Microsoft Visual C++ 2008」(Express Edition 以上) をインストール
(2)「Microsoft Debugging Tools」をインストール(※Qt Creator上でデバッグする時に必要)
 http://www.microsoft.com/japan/whdc/devtools/debugging/installx86.mspx
(3)「Qt libraries for WIndows(VS 2008)」をインストール
 http://qt.nokia.com/downloads/windows-cpp-vs2008
(4)「Qt Creator Binary for Windows」をインストール
 http://qt.nokia.com/downloads/qt-creator-binary-for-windows
(5)環境変数PATHを設定(もともと入ってたパス;Qtインストールパス\bin)
(6)Qt Creator を起動して、「ツール」→「オプション」メニューで初期設定
 「Qt4」→「Qt Versions」を開いて自動検出された「PATH に含まれる Qt」をクリックし「MSVC バージョン」を 9.0 にする
 「デバッグヘルパ」が×印になっていれば「リビルド」ボタンをクリックしてリビルド(※)する
 (※)もし失敗したら「プロジェクト」→「ビルドして実行」→「nmake の代わりに jom を使用する」のチェックを外してみる
0004デフォルトの名無しさん2010/12/14(火) 22:46:23
■Qt Creator 日本語化プロジェクト

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


■Python バインディング

PyQt4(GPL。定番)
http://www.riverbankcomputing.co.uk/software/pyqt/intro

PySide(LGPL。Win版はまだ無いけど今後に期待)
http://www.pyside.org/


それでは、はりきってどうぞ!
0005デフォルトの名無しさん2010/12/14(火) 23:06:00
>>1
乙カレーション
0006デフォルトの名無しさん2010/12/14(火) 23:32:38
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); //ソースの文字コードを指定("utf-8"や"Shift-JIS")
0007デフォルトの名無しさん2010/12/14(火) 23:36:10
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
0008デフォルトの名無しさん2010/12/14(火) 23:37:54
>>2
誤解無いように言っとくとLGPLの静的リンクでもソース公開は必須では無いよ
0009デフォルトの名無しさん2010/12/15(水) 07:06:27
1Z
0010デフォルトの名無しさん2010/12/15(水) 11:50:14
>>8
静的リンクをstatic linkingとする(要するにexeの中に入れる)なら、
LGPLのライブラリの使用であっても
プログラム全体のソースコードの公開が必要になるよ。

DLLとlibファイルを介してexeに結合させること場合は必要ない、
というのがGPLに比べたときの劣化(Lesser)具合。

Qt自体を改変したときは、Qt部分のソースコードの公開が必要。
しかしプログラム本体には波及しない。
0011デフォルトの名無しさん2010/12/15(水) 14:48:29
>>1 乙
0012デフォルトの名無しさん2010/12/15(水) 16:02:05
>>10
現実的にはそうなるが
オブジェクトコードでもいいことになってるだろ一応
0013デフォルトの名無しさん2010/12/15(水) 16:24:30
前スレの991=994?の人、もしかしてQtにはC++コンパイラが含まれてないので別途必要
ってことがわかってないんじゃない?
0014デフォルトの名無しさん2010/12/15(水) 16:37:18
>>8
動的リンクの時は公開の必要ないとしか書いてないんだからあってるだろ
静的リンクのときは説明長くなるから最後の二行の通りでいいじゃん
0015デフォルトの名無しさん2010/12/15(水) 17:07:03
>MinGW使わないならVS2008は必要だけど,代わりにMS SDKも使えるということ。

つまりMinGW使わない場合でもMS SDKを使えばVS2008は必要ではないということだろ
0016デフォルトの名無しさん2010/12/15(水) 21:23:24
>>12
make時の *.o(windowsなら*.obj)だけを公開すればいいから十分現実的だと思うがね。
デメリットは実行ファイルのみに比べて、多少リバースエンジニアリングが楽になるくらい。
0017デフォルトの名無しさん2010/12/16(木) 17:20:59
vs2008で開発しています。

uiファイルベースでQMainWindowからGUIアプリを作ってるんですが、
メインウィンドウへのアイコンの指定方法がよくわかりません。

リソースファイル(*.rc)をいじって用意したアイコンを登録して、
プログラムのアイコンには設定できたのですが、
メインウィンドウのアイコンには設定されません。
0018デフォルトの名無しさん2010/12/16(木) 17:25:49
  QIcon ico = QIcon(APP_ICON);
  setWindowIcon(ico);
0019デフォルトの名無しさん2010/12/16(木) 19:09:51
>>18
まず、APP_ICONが定義されてない。

app.qrcに<file>app.ico</file>の行を追加してもロードに失敗してなぜだろうと思ってたんだけど、
<qresource prefix="/visualchanger">


「prefix="/visualchanger"」を省いたらいけたよ!

あとは*.uiファイルに書いてしまえると便利なんだけどなぁ。
ひとまず動くようになりました。
0020デフォルトの名無しさん2010/12/17(金) 11:47:10
QMenuを使ってボタンを押したら
ドロップダウンメニューが出るようにしたんだけど、
各メニュー項目にサブ項目の矢印が出る。
当然サブ項目なんて設定してない。

これって、こんなものなの?
0021デフォルトの名無しさん2010/12/17(金) 12:52:32
つ addAction()
0022デフォルトの名無しさん2010/12/17(金) 14:22:36
>>21
なるほど……。
各メニュー項目はQActionで、QMenuはその入れ物なのか。
ありがとうございます。
0023デフォルトの名無しさん2010/12/17(金) 15:19:24
たったあれだけのヒントで全てを理解する >>20 は、きっとすごいイケメン
0024デフォルトの名無しさん2010/12/17(金) 16:42:57
Qtプログラマがイケメンじゃないわけがない
0025デフォルトの名無しさん2010/12/17(金) 16:53:06
みなさんグラフとか使ってないすか?
QWTてのあるけど今一使い方が分からんす
0026デフォルトの名無しさん2010/12/17(金) 17:23:17
QDomDocument〜QDomElementがめっさ使いにくい。

XMLを読み書きするの、何か他のライブラリを使ったほうがいいのかな。
0027デフォルトの名無しさん2010/12/17(金) 17:31:53
俺もそう思ってTinyXMLとか調べてみたけど、どのライブラリでも大体似たような
感じだよ。
0028262010/12/17(金) 17:53:51
自己レス。

こういう関数を用意しておくと、foreachでループを回せるようになる。
(↑Qt特有? C++0x?)

QList<QDomElement> getElementsByTagName(QDomElement elem, QString tagName) {
  QList<QDomElement> result;
  QDomNodeList childLst = elem.elementsByTagName(tagName);
  for (int i = 0; i < childLst.length(); i++) {
    QDomNode n = childLst.at(i);
    if(n.isNull())
      continue;
    QDomElement child = n.toElement();
    result.append(child);
  }
  return result;
}

ループ:
  QDomNodeList layersetLst = root.elementsByTagName("LayerSet");
  QDomNode n = layersetLst.at(0);
  if(n.isNull())
    return 1;
  QDomElement layerset = n.toElement();
  foreach(QDomElement layer, getElementsByTagName(layerset, "Layer")) {
    printf("  Layer: %s\n", layer.attribute("name").toStdString().c_str());
    foreach(QDomElement item, getElementsByTagName(layer, "Item")) {
      printf("   Item: %s\n", item.attribute("name").toStdString().c_str());
    }
  }
0029デフォルトの名無しさん2010/12/17(金) 18:14:55
demo/embeddeddialogsのソースを見てるんですが、
下記URLのCustomProxy::itemChangeが何をしているのかがよくわからない。

想像するに、
Dialog内にあるcombobox押下時の、
popup部分のレンダリングを高速化しているという認識で良いのかしら?
コメントにしても結果が全く変わらないんだよね。

http://doc.qt.nokia.com/4.7-snapshot/demos-embeddeddialogs-customproxy-cpp.html
0030デフォルトの名無しさん2010/12/17(金) 22:08:26
>>25
基本は QwtPlotCurve に setData でデータ詰めて、QwtPlot Widget の
showCurve で表示。
QwtPlotCurve をカスタマイズすれば、いろいろなグラフが作れるので、
重宝してる。
0031デフォルトの名無しさん2010/12/18(土) 02:32:53
昨日からQtを始めたて、サンプルを手本に作ってるんだが・・・。
QtGuid4.dllは正しいwindowsイメージではありません。
と言われる。
C:Qt/qt/binからコピーしてきたdllを、debug内に突っ込んだだけなんだが。
Cored4は読み込んでくれる、どう回避したらいい?
0032デフォルトの名無しさん2010/12/18(土) 02:34:48
質問いいでしょうか?
コマンドプロンプトで使うつもりで作ったプロジェクトをstaticライブラリとして読み込み、
QtのDockWidgetに出力させたいのですが、coutやcerrの出力先をDockWidgetに向けるには
どうしたら良いでしょうか?

一応自分でもググったりしたのですが、わからず…。
どうかご助力お願い致します。
0033デフォルトの名無しさん2010/12/18(土) 02:45:05
>>31
debug用のdllはまた別にある
0034デフォルトの名無しさん2010/12/18(土) 03:03:53
>>33
さんくす
調べてみる
0035デフォルトの名無しさん2010/12/18(土) 03:14:09
ファイル名にdが入ってるやつと入っていないやつの2種類があるはず
0036デフォルトの名無しさん2010/12/18(土) 03:44:44
31だが
QtGui4のデバッグ用がQtGuid4ってことでいいんだよな?
で、そのQtGuid4が正しくないと言われるんだが
これはQtを再インストールするしかないか?
0037デフォルトの名無しさん2010/12/18(土) 05:12:14
コピーじゃなくてPATHを通せ
0038デフォルトの名無しさん2010/12/18(土) 09:48:24
>>32
Qtは標準入出力をハンドリングしてなさそうだから、OS固有の仕組み使うしか
ないんじゃないかなー。Windowsだったら ::GetStdHandle() 使うとか。
0039デフォルトの名無しさん2010/12/18(土) 11:56:30
>>36
debug用のruntimeは入れてあるよね?
0040デフォルトの名無しさん2010/12/18(土) 12:02:20
>>32
自前のstreambufを実装する
例
http://lists.trolltech.com/qt-interest/2005-06/thread00166-0.html
0041デフォルトの名無しさん2010/12/18(土) 12:36:20
>>38,40
ありがとうございます!

解決、あるいはわからないことがあればまた書き込むと思うので
厚かましいようではありますが、その時はどうかよろしくお願いします。
0042デフォルトの名無しさん2010/12/18(土) 12:58:00
>>31
ビルドされたexeを
Dependency Walkerに読ませて、
何のDLLを呼び出しているか調べてご覧。

Qt+vs2008だと何のDLLを利用するのかがわりと暗黙的に
行われるので、配布する前にチェックが必要。
幸い、静的にリンク解決してるのでDependency Walkerで調べられる。
0043デフォルトの名無しさん2010/12/18(土) 13:05:39
>>42
それだと、ファイル名はわかるけど、どのバージョンの(≒どこにある)DLLが必要なのかが
わからないのよ。

Qtは複数バージョンを入れることもままあるので、典型的なDLL地獄だねw
0044デフォルトの名無しさん2010/12/18(土) 18:28:08
DLL地獄なんて昔の話で、今の Windows には無いなんて聞いてたけどまだあるのか…
0045デフォルトの名無しさん2010/12/18(土) 18:53:31
>>43
exeがdllを探す順序がわかってないだけなんじゃないの?
0046デフォルトの名無しさん2010/12/18(土) 19:46:11
>>43
Dependency WalkerはカレントディレクトリにないDLLを
ロードする時にはそのPATHも教えてくれるよ。
0047デフォルトの名無しさん2010/12/18(土) 22:19:05
>>45-46
そうじゃなくて、>>31 の問題には Dependency Walker は役に立たない、ってことですわ。
実行ファイルがどのファイル名のDLLを要求してるのはわかるが、どのバージョンを
要求しているのか(例えば Mingw版なのかVS版なのか、4.7.0なのか4.7.1なのか)は
やってみなくちゃわからない、ってこと。

ちゅーか、おまいらは困ってないの?
0048デフォルトの名無しさん2010/12/18(土) 22:40:05
>>42-47
リリース版では問題なく起動できる。
デバック版のdllだけ不調。
Mingwで、4.7.0でやってる。
0049デフォルトの名無しさん2010/12/18(土) 22:49:17
debug buildを実行しようという人間が、自分がmakeした環境を知らないとか
有り得るのか?
release build なら(必要な関数が揃っているなら)多少のversion違いでも、
動作するし。
0050デフォルトの名無しさん2010/12/18(土) 23:05:25
debug buildは人に配布するものではないから
自分の環境で動けば十分なんじゃね?

MingWはC標準ライブラリがVS2008と全く互換性がないから、
ビルドした実行プログラム(exe/dll)を絶対に混ぜちゃダメ。

Qtはなまじクロスプラットフォームだからその辺の表現が曖昧になってるけど、
WindowsでQtアプリを開発するならどちらで開発するのかはっきりさせたほうがいいよ。
0051デフォルトの名無しさん2010/12/18(土) 23:08:22
(続き)
まっとうなWindowsアプリとしてバリバリ書いて、
一般に配布されてるクローズドソースなDLLも使っていく、ということなら
素直にvs2008版を使えばいい。

そうじゃなくてWindowsでも動くクロスプラットフォームなアプリを
なるべくUnix互換として作っていきたいなら文句なくMingWになるだろう。

Unix系のオープンソースライブラリを自前でビルドして、自由に組み合わせて使えばいい。
0052デフォルトの名無しさん2010/12/18(土) 23:20:18
>>47
何を困ってるのか全然わからん。>>49の言うとおり、自分でビルドしたんだから
MinGWなのかVSなのかはもちろん、4.7.0なのか4.7.1なのかも当然自分が知ってる
はずだろ?
0053デフォルトの名無しさん2010/12/18(土) 23:41:01
>>50
デバッグビルドされたアプリを配布目的以外で別の環境で動かしたい、ってのはあるぞえ。
Windowsであれば、2000/XP/Vista/7で動くかどうかの検証したい、とか。

>>52
Qt Creator 上でデバッグビルドして、デバッグする場合、どこにあるDLLを使っているのかが
わからない、ってこと。Dependency Walker は、すでに実行中のプログラム(=Qt Creatorが
実行しているデバッグアプリ)に対しては解析できないでしょ?

Qt Creator でのデバッグ時、どこのDLLを使っているのかがわかればいいだけの話です。

…と書いてQt Creator立ち上げたらわかった。
デバッグ時に ウィンドウ→表示→モジュール を選択してモジュールリストを出したら、
フルパスで読み込まれたDLLのリストが出た。これでOKじゃんw

>>48
てことで、数行上に書いた方法でパスを洗い出してDLLを置いてみそ。
0054デフォルトの名無しさん2010/12/19(日) 01:10:54
Qtいいなあ

C#、Java、WinAPI、MFCのどれよりもいいわ

おれ、これから、これをメインにするわ

0055デフォルトの名無しさん2010/12/19(日) 01:12:02
VB6を髣髴とさせるGUI構築ライブラリや。
0056デフォルトの名無しさん2010/12/19(日) 15:00:10
>>54
Qtで4日かかってサンプルアプリ作って、
.NETに対する優位性を布教しようと思ったら、
.NETと大してアプリの速度は変わらず、
開発にかかる時間は.NETのほうがずっと短いので
布教にならなかったでござるの巻。

もうちょっと大きな規模じゃないとダメか……。
0057デフォルトの名無しさん2010/12/19(日) 15:22:31
大きなアプリじゃ余計比較は難しいと思うが
0058デフォルトの名無しさん2010/12/19(日) 15:28:24
>>56
少なくとも初回起動速度は.NETよりずっと速いんじゃないか?

Qtが.NETに対して明らかに優位だと思うのは、レイアウトの柔軟さと
国際化(多言語)対応の容易さかな。
実行時にUIの言語を動的に切り替えるなんて、Qtじゃなければ簡単
にはできないと思う。


> 開発にかかる時間は.NETのほうがずっと短いので

そうか?Qtだって慣れると早く組めると思うけど。
もう少し修行してから布教した方が良いのではw
0059デフォルトの名無しさん2010/12/19(日) 15:42:07
>>58
>起動速度
そうなんだけど、これはアプリがある程度大きくならないと分からないよね。
>レイアウト、多国語対応
UIのデザインがXMLで組めて実行時に組み立ててくれる仕組みがあるのはいいね!
ただ普通に作る場合はuiファイルをmoc.exeが読み込んでh/cppのソースコードを自動生成するようだ。
言語の切り替えはテキストリソースをDLLにビルドして
起動時に切り替えられることは確認してるけど、実行時中に変更する方法は分からないなあ、確かに。

>開発時間
たしかに経験値の差はまだ(自分の中で)大きい。
作ったサンプルだと、.NET版は2〜3時間でできてしまった。
0060デフォルトの名無しさん2010/12/19(日) 15:45:42
.NET版というと・・・FORMSか。
WPFとの比較ではないよね?
0061デフォルトの名無しさん2010/12/19(日) 16:00:44
> 作ったサンプルだと、.NET版は2〜3時間でできてしまった。
いったい、どんなサンプルを作ったんだ?

このスレに常駐しているイケメンだったら1〜2時間で作っちゃうかもしれないぞ
0062542010/12/19(日) 16:12:01
>>56
小生はそういうことをいっているんじゃないんだよ。

プログラム作業がおもしろいよ。

C#って部品並べて、コーディングをちょろっとやるだけじゃん。

難しいのをドーパミンだしながら、1000行くらい打つのをやりたいんだよ。
0063542010/12/19(日) 16:14:01
ああ、プログラム初心者のころに、C言語でBWカーニ半のプログラム作法のサンプルをやったころのようなときめきを感じたい。

WebはPerl、GUIはQtだよ。
0064デフォルトの名無しさん2010/12/19(日) 16:33:51
>>61
レイヤーとして切り出された透過pngを、
短冊状に並べられた切り替えボタンで表示/非表示を切り替えて
必要な組み合わせを手早く合成するためのツール。

Qt側は得られた知見もそれなりにあるから、
見たい人がいるならソースコードを公開してもいいですよ。
0065デフォルトの名無しさん2010/12/19(日) 17:04:19
その内容で製作期間4日ってちょっと考えられない
Qtを使い始めて4日って意味かな?
0066デフォルトの名無しさん2010/12/19(日) 17:16:58
>>62
Qt も結構「部品並べて、コーディングをちょろっとやるだけ」の場合も多いんだが…
0067デフォルトの名無しさん2010/12/19(日) 17:28:55
>>59
>起動時に切り替えられることは確認してるけど、実行時中に変更する方法は分からないなあ、確かに。

それはお前があほだからだろ
0068デフォルトの名無しさん2010/12/19(日) 17:43:14
>>65
サンプル改造以外のスクラッチからはこれが初めて。
最初にUIのデザインを構築する段階で何度もつまずいた。
これだけで1日2日かかったな。
引っかかったところは前回のスレ通り。

他、スロットの定義とconnectのやり方とか
qSortのやり方とか
foreach構文の使い方とか(Qtになって初めてC++で使えるのを知った)
QPixmapでの画像処理のいろはとか
QStatubarのクセとか
Widgetを動的に作るときに適切にスタイルを与えたい時に何が必要かとか
QFileDialogの使い方とか
0069デフォルトの名無しさん2010/12/19(日) 18:13:15
お前にはまだ早いでFA
0070デフォルトの名無しさん2010/12/19(日) 19:10:37
>>68
4日もかかったのは、Qt の生産性うんぬんより
Qt に慣れてなかったからだと思う。

熟練度が同じ状態で生産性を比べないとだめ。

またはゼロから学習した場合の難易度を比べる
0071デフォルトの名無しさん2010/12/19(日) 20:59:53
>>56
主にWindowsで動かすことしか考えてないライブラリと比べて
マルチプラットフォームなライブラリがオーバーヘッドが同程度なら、それは割といいんじゃないか。

それよりも、>>64の意味がいまいちわからないのだが、組み合わせを探すアルゴリズムが遅いんじゃないの?
0072デフォルトの名無しさん2010/12/19(日) 21:16:54
>>71
そういうQtと.NETのGUIアプリが同程度といっているのではなくて、
作ったサンプルでは負荷が小さすぎて体感差が出なかっただけのことで。

64の話だけど、レイヤーの切り替えはマニュアル操作だよ。
切り替えると、合成済みの表示画像を
破棄してまた最初からレイヤーの合成処理をやり直す。
大体5-8レイヤーくらいあるんだけど、
1600x1200クラスになると.NETの方が遅いね。
1024x1024くらいならほとんど問題にならない。
で、対象となるデータはだいたいこんなサイズなので。
0073デフォルトの名無しさん2010/12/19(日) 22:21:51
以下の順番で構成しているとき
コンストラクタの親は何を入れればいい?

↑親
MainWindow
QTabWidge
QWidget
QHLayout
QLineEdit
↓子

QLineEditの親は  QHLayout 、 MainWindow 、 NULL ?
いちいち設定するの面倒なので今はNULL設定しているが、今のところ問題が起きてない。
親を設定するとどんな効果があるの?親設定しないとちゃんとメモリ解放されないのか
0074デフォルトの名無しさん2010/12/19(日) 22:54:29
>>73
layout->addWidget()を呼び出した段階で
登録したWidgetの親を設定してくれるようになってるよ。
だからコンストラクタ時には不要っちゃ不要だな。

具体的には
void QLayout::addChildWidget(QWidget *w)

0075デフォルトの名無しさん2010/12/19(日) 23:26:23
Qtはアプリケーションの色変え(スキン処理)は楽ちんだろ。stylesheet 書けば
できるんやから。その辺もアピールポイントとしてよろしく。
0076デフォルトの名無しさん2010/12/19(日) 23:33:12
>>74
MainWindow::setCentralWidgetも同様に自動で親設定してくれる?
set***やadd***系は自動登録って認識でおっかな
0077デフォルトの名無しさん2010/12/20(月) 00:14:08
>>76
ソース確認したら自動で親設定してたよ。QLayoutのparentWidget()をね。
0078デフォルトの名無しさん2010/12/20(月) 01:55:41
>>72
> 1600x1200クラスになると.NETの方が遅いね。
> 1024x1024くらいならほとんど問題にならない。
Qtの方が速いのか。そりゃすごい。
0079デフォルトの名無しさん2010/12/20(月) 03:19:49
>>78
ちょっと.NET Frameworkに突っ込んだ話になるけど、
pngをメモリに読み込んで合成処理してコントロールに渡すという処理の場合、

一旦マネージドメモリに移してから再度アンマネージドメモリに転送するという
ことをやってるのでどうしても余計な時間を掛かっちゃうんだよ。
でも.NETのコードが動いている部分が少ないのでこれでもまだマシな方。

例えば各ピクセル処理を.NETのコードで書いてたら
そのたびにペナルティーが発生してQt版と速度差が出るだろうな
0080デフォルトの名無しさん2010/12/20(月) 05:04:26
メモリのコピーにそんなに時間かかるかな?
0081デフォルトの名無しさん2010/12/20(月) 16:41:29
>foreach構文の使い方とか(Qtになって初めてC++で使えるのを知った)

なにこれ笑うところ?
それとも釣り?
0082デフォルトの名無しさん2010/12/20(月) 16:51:53
>>81
何を笑いたいのか知らんが、foreachはQt標準のマクロによる拡張構文だぞ。
http://doc.qt.nokia.com/latest/qtglobal.html#Q_FOREACH
0083デフォルトの名無しさん2010/12/20(月) 17:13:34
だから

> C++で使えるのを知った

ここが笑いどころなんでしょ
0084デフォルトの名無しさん2010/12/20(月) 18:46:12
俺も初めて見た時はC++の言語が知らん間に拡張されたのかと思った。
0085デフォルトの名無しさん2010/12/20(月) 19:03:21
VC++ の for each (int x in ArrayList) とか
C++0x の for (int &x: array) とか、あるにはあるけどね。
Qtの foreach は遥かに強力でエレガントだ。
# 内部では、かなり強引な方法で展開してるみたいだけど。
0086デフォルトの名無しさん2010/12/20(月) 19:54:27
C++0xとQt組み合わすことってできんの?
0087デフォルトの名無しさん2010/12/20(月) 20:25:41
BOOST_FOREACHみたいなもんか
0088デフォルトの名無しさん2010/12/20(月) 20:36:08
間にmoc入ってるし、Qtは素のC++とは言えないよな
0089デフォルトの名無しさん2010/12/20(月) 20:44:33
でも、g++ や VC++ などの 素の C++ コンパイラが使える
0090デフォルトの名無しさん2010/12/20(月) 21:07:02
>>14
LGPL_EXCEPTION.txtの制約に反するならば、動的リンクでも公開が必要。
0091デフォルトの名無しさん2010/12/20(月) 21:21:10
>>75
stylesheetはQtの汚点、なくした方がよい。これからstylesheetを使おうと思うなら止めた方がよい。

少し慣れて、ここも手を入れたいと思うようになると、できないことがぞろぞろ出てくる。
そういったできないことへの対応は、最近まったくされない。

QtのStyleのWhitepaperに書かれているように五千行以上でパフォーマンスが劣化する。
こんな程度では大きいアプリケーションにstylesheetを使えない。
0092デフォルトの名無しさん2010/12/20(月) 22:34:05
マクロでいいんだったらCでもforeachは使える
0093デフォルトの名無しさん2010/12/21(火) 00:31:59
>>92
Cだと配列の数が必要なので、面倒。
動的確保じゃなければsizeof使えばいいけど。
0094デフォルトの名無しさん2010/12/21(火) 09:36:09
connect関数と同名の他ライブラリ関数との競合で困っています。

Qt 4.6 for visual studioとperlライブラリ(perl510.lib )をVC++2008exp上で使ってます。
perlライブラリを使った関数をインクルードした状態でQtのconnect関数を使うと
(例) connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()))
error C2660: 'win32_connect' : function does not take 4 arguments
とエラーが出ます。ぐぐるとwin32_connectはQt関係ではなくperlのソケット関係の
名前のようです。
QObject::connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())) とすると
error C2039: 'win32_connect' : is not a member of 'QObject' とエラーを返されます。。。

ちなみにperlライブラリを使った関数のを除くと正常に作動します。。。。
どうすればQtのconncectとして認めさせることが出来るでしょうか?
0095デフォルトの名無しさん2010/12/21(火) 10:31:56
perlのconnectを使っていないならperl関係のincludeの後に
#undef connect
0096デフォルトの名無しさん2010/12/21(火) 10:49:45
>>94
perlを使うソースコードとQtを使うソースコードを分ければいいんじゃね?
0097942010/12/21(火) 10:56:23
>>95
ギャー!! 出来た! 動いた!
マジ感謝です。ひょっとしたらQtあんまり関係なかったかもだけど
即効で的確なアドバイスありがとうございました!!

はぁ、これでこのクリスマス休暇はゆったりとQtで自作アプリ作りに励める。。。
0098デフォルトの名無しさん2010/12/21(火) 16:31:26
neet裏山C
0099デフォルトの名無しさん2010/12/21(火) 20:09:51
>>91
ふーん、そういうものなんですか。
んじゃ、使いどころを考えればそれなりに使えるって事ですね、stylesheet。
こんな仕組み、自前での実装は大変でござるよニンニン。
0100デフォルトの名無しさん2010/12/21(火) 22:12:04
stylesheetは使うと後悔する。QWindowsStyleなどを継承するか、QProxyStyleを使うかするのがよい。
0101デフォルトの名無しさん2010/12/21(火) 22:49:57
コストラクタで引数に参照を渡すことがよくあると思います。
変数をコンストラクタに渡した後は削除しても問題ないのでしょうか?
そこら辺qtで統一されていますか

■ このスレッドは過去ログ倉庫に格納されています