【RAD統合環境】 Qt 総合スレ 6 【Win/Mac/Linux】
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 を選んだ場合は商用利用が可能です(いくつか制限あり)。
・商用版(Commercial version)
こっちはNokia社か日本の代理店(SRA社)とライセンス契約(年間30万くらい?)を結んで使います
■Qt を使って作られたソフト例
KDE、Adobe Photoshop Elements、Google Earth、Skype、DAZ Studio など
■前スレ
【RAD統合環境】 Qt 総合スレ 5 【Win/Mac/Linux】
http://pc12.2ch.net/test/read.cgi/tech/1254366507/
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 を使用する」のチェックを外してみる
次スレ前にすべりこみで質問です シグナルをemitする時にnewしたデータを渡すのですが あとで拡張する際にスロット側でdeleteするのを忘れそうで嫌です あらかじめ、delete処理をするスロットを作ってconnectしておこう、と考えたのですが qtはスロットを実行する順序を決めてないそうなので困っています 実行順序を決めるような機能はないでしょうか、あるいはそんなテクニックはないでしょうか よろしくお願いします
9 :
デフォルトの名無しさん :2010/01/29(金) 20:43:23
>>5 コピー可能なデータを渡すようにするのが安全です。
QStringやQPixmapなどはimplicit sharedなので、データ部分は共有して、
intやdoubleと同じ感覚で引渡せるので効率的かつ安全です。
>>5 転載感謝です
>>7 これならreference countがあるので
シグナルをemitする関数が終了しても解放されず
スロット終了時に自動で解放されるというわけですね
>>9 implicit sharedというのがあるんですね
Qtが一部クラスに限ってQSharedPointer的機能を予め使っているというイメージでしょうか?
引数を渡すときにreference countを増やすには、参照渡しではなく値渡しでおこない
値渡しで渡すと、コピーコンストラクタによってshallow copyが行われるため高速に実行することができ、
なおかつreference countが増えているのでemitする関数が終了しても実体は破棄されないという事ですか
QByteArrayもimplicit sharedらしいのでこれを使う事にしてみます
皆さんありがとうございました
qt4のドキュメント探していると、qt3のドキュメントが沢山出てくるわけですが qt3のドキュメントはどこまで信用していいのですかね? つまり、qt4でプログラミングをする時に、qt3のドキュメントをどこまで参照していいのか?と
>>1 >LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
> LGPL を選んだ場合は商用利用が可能です(いくつか制限あり)。
以前も話題になったけど、これは誤解を生む表現だから消した方が良いと思う。
GPL/LPGL と商用利用は直接的にリンクしている訳ではないからね。
「GPL を選んだ場合は商用利用が可能です(たくさん制限あり)」というだけで。
>>12 > 「GPL を選んだ場合は商用利用が可能です(たくさん制限あり)」というだけで。
はLGPLの誤りだよね。
で、どう誤解を生むの?
別にウソ書いてるわけじゃないからいいんじゃないの?
「LGPL を選んだ場合は商用利用も可能です(いくつか制限あり)」
にした方が良い程度の話だと思うが。
>>13 > 別にウソ書いてるわけじゃないからいいんじゃないの?
いやウソ書いてるよ。
16 :
デフォルトの名無しさん :2010/01/31(日) 15:21:28
>>16 わかりました
親切な解説ありがとうございます
>>13 >で、どう誤解を生むの?
GPL だと商用利用してはいけないという誤解。
>13がフルボッコすぎるwww
21 :
13 :2010/01/31(日) 16:32:39
スマソ。
>>12 の言ってる意味を勘違いしてた。
GPLでもLGPLでも、制限事項が違うだけで商用利用は両方とも可能だっつうこと
だったんだね。叩かないで〜w
Qtで使われてるLGPLだとどんな制限があるんだ? ・Qtライブラリを利用しても、自分の書いたソースのライセンスは自由に設定できる ・Qtライブラリそのものに手を加えた場合は(ライブラリ以外の改造箇所も含め)全てのソースをLGPLで配布しなければならない ・Qtライブラリのヘッダファイルをincludeしたり、Qtライブラリ中のクラスを継承するなどは、Qtライブラリの改造とはみなされない ・LGPLであるQtライブラリを利用したこと、Qtライブラリのソースを入手できることを明記し、LGPLを添付しなければならない ・ディスクなどのメディアに入れてソフトウェアを配布している場合は、希望者がいた場合には(無償、あるいは多くとも実費(メディア代など)+手数料程度の金額で)Qtライブラリのソースを配布しなければならない ・ネットでのソフトウェア配布の場合は、ネットでの入手方法を明記しておけばよい こんな感じ?
LPGA
>>12 「ひとことで言ってQtはいわゆる商用OKなの?」という点はQt入門者の多くが聞きたいだろうから、
削除するより注意書きを足す方がいいと思うな
もうちょっと正確性を期してこんな感じでどうだろう
・オープンソース版(Open-source version)
LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
LGPL を選んだ場合はソースコード非公開のままでの商用利用が可能です(いくつか制限あり)。
※正確には通常「LGPL+商用利用向きの例外条項」を選ぶことになります(Qtインストール先の「LGPL_EXCEPTION.txt」を参照)。
ちなみにGPLでも商用利用が不可能というわけではありません、念のため。
>>22 動的リンクの場合の話だよね。自分の理解だとこういう感じ
著作権の表示と、LGPLライセンスのコピーの配布
・ドキュメントにQtの著作権表示を入れておく。またLGPLライセンスのコピーを配布物/販売物に含めておく
・Qtをリンクしたプログラムが実行時になんらかの著作権表示をする時は、
Qtの著作権表示と上記LGPLライセンスのコピーの所在の表示もしなければならない
リバースエンジニアリングの許可
・正規ユーザーに対して、個人的な利用のための(Qtをリンクした)プログラムの改変とリバースエンジニアリング(解析)を禁じてはならない
※例えばユーザーが個人的なバックアップを行うためにコピープロテクト機能を外すことは、
プロテクト機能がQtをリンクした実行バイナリに含まれるなら禁止できません。当然ですが不正コピーは禁止できます
Qtのバイナリの再配布に伴うソースコードの配布
・Qtの動的リンク用バイナリ(DLL等)を一緒に配布/販売した場合は、以下のどちらかを行う
(1)Qtのソースコードを配布物/販売物に含めておく(※Qt4.6.1のVS2008版だと194MBですね)
(2)少なくとも3年間は有効な書面として以下の旨の申し出を添える
「希望者には(無償、あるいは多くとも実費(メディア代など)+手数料程度の金額で)改変したQtライブラリのソースコードを配布すること」
※参考までに、玄人指向の製品「玄箱」のGPLアプリのソースコード配布は1000円(税込)/振込手数料はユーザー負担みたいです
オマケ。Qt LGPL例外条項
・Qtのクラスを継承したりマクロやインライン関数等を利用することはQtのLGPLコードを含んだとはみなされない
商用利用と言っても、委託開発とパッケージ販売で違ってくると思うけどな。 不特定多数に「頒布」するのはGPL/LGPLの制限を受けるけど、 委託されてその顧客専用バージョンを開発するのはほとんど制限をうけないはず
「玄箱」のGPLアプリのソースコード配布 リバースエンジニアリングの許可 は、同じこといってるんだよね フリーウェアで出してもソースの公開義務みたいのは発生するんだろうか・・・(謎
>>26 制限を受けないというより、委託の場合は二者間+Nokiaだけの話なので
二者が納得していてNokiaが気にしない/気づかない限りはGPL/LGPLを破っても事実上問題がおきないってことかと
ただし顧客専用バージョンのQtソースを顧客が欲しがった時に
契約や企業間の力関係を傘にきて突っぱねるような明らかなGPL/LGPL違反があると
もし内部告発がおきてネット等を巻き込んだ場合に社会倫理的な問題になると思う
Nokiaは訴訟を起こさないかも知れないけど、問題を解決するために契約を強く勧めるかも知れない
リスク回避するならソースを渡す準備がある旨を伝えるのが無難かと
難しいこと考えず素直にライセンス料払えば 何も問題ないような・・・
30 :
デフォルトの名無しさん :2010/02/01(月) 18:35:56
>>27 >委託されてその顧客専用バージョンを開発するのはほとんど制限をうけないはず
顧客と組織が別なら不特定多数への配布と同じ扱いです。
顧客が内部利用だけで第三者に配布しないのであればソースを要求できるのは その顧客だけだから両者で同意がなされれば問題無いと言ってるんじゃないかな?
>内部利用だけで第三者 系列内で子会社孫会社、と解釈範囲が拡大するような 用途でも、内部利用だと言えそうだお(キリ 完全にインハウスでだけで使うツールなら問題なさそうだが サード的な別組織に配布る段階で lgpl 発生すると思うの…
×別組織に配布る段階で lgpl ○別組織の人間が使用する段階で lgpl というほうが正確か・・・
GPL(LGPLも含む)の規定では配布する側がソースを提示する義務を負う。 だからこの場合は顧客が子会社も含めてバイナリ配布して要求されれば 顧客がソースを渡さないといけない。 顧客がそれを理解していれば問題無い。
35 :
デフォルトの名無しさん :2010/02/02(火) 01:30:47
>>34 その言い回しはLGPLが必ずソースを要求するみたいに思われそう
LGPLを選択-ダイナミックリンク-未改変のQtのDLLを一緒に配布:Qtのインストーラーを渡す(
>>25 のケース)
LGPLを選択-ダイナミックリンク-改変したQtのDLLを一緒に配布:改変後のQtライブラリの完全なソースコードを渡す
LGPLを選択-スタティックリンク-未改変のQtのDLLを一緒に配布:プログラムをビルドできるオブジェクトコードまたはソースコード+Qtのインストーラーを渡す
LGPLを選択-スタティックリンク-改変したQtのDLLを一緒に配布:プログラムをビルドできるオブジェクトコードまたはソースコード+改変後のQtライブラリの完全なソースコードを渡す
だけどLとか関係無くGPLの名がついてたらアリの様に全てのソース出せと群がってくるんだぜ 反論したって無駄なんだぜ
そのためにライセンス規定文書を一緒に配布するんじゃないのか?
全ソースの冒頭に入れないと駄目なのかなあれ > ライセンス規定書 エントリポイントだけじゃ駄目ぽ?何かまちまちでよくわからんです・・・
ライセンスを書いたテキストファイルを置いておけばOK ソースの先頭に書くかどうかはコーディングスタイルの問題 1ファイルだけ取り出してもライセンスを間違えないというメリットがある
QObject::connect(button, SIGNAL( clieked() ), &app, SLOT(quit()) ); これは、buttonインスタンスのcliecked()メソッド(シグナル)が appインスタンスのquit()を呼び出しているってことでおk?
>>41 違う。
buttonのclicked()がappのquit()を呼び出しているのではなく
buttonのclicked()シグナルがemitされたら
appのquit()が(Qtに)呼び出されるように登録している。
>>42 それじゃ、もしもみたい内容だったならば単純にclieked()を実行して終わりってことなんですか?
clieked() {
if( false ) {
emit *
}
}
44 :
デフォルトの名無しさん :2010/02/02(火) 22:08:45
Qtのプログラムを作るときってどういう順番で作る? まずQtとは関係のないコアの部分を組み立てて、その後QtでGUI周りを作る?
GUI も本質的には Qt と無関係だから Qt Designer で .ui ファイル作って Load
どんなプログラムかにもよるのでケースバイケースだけど... 基本的にプログラムは「使ってもらう」ものなので,俺の場合はプログラムの顔である GUI側からQt Creatorで作り始めて,先にGUIの動作確認をした上で段々中味(ボタン をクリックしたときのスロットの中味とか)を埋めていくことが多い。中味を埋めるまでは 適当にメッセージボックスでも出るようにしておくとか,ただ何もしないだけにしておく こともある。 ハードウェアの制御が絡んでいるような場合には,先ずその制御部分のクラスを作って おいて,簡単なテストプログラム(GUIはデザインとか無視の超テキトー)を書いてテスト しておくことが多いかな。それから本物のGUIを作って最後にドッキング。
>>45 Qt使う場合はデスクトップアプリしか作らんけども、
データ周り>GUI>MVCでいうコントローラに当たる部分
っていう順で作ってる。
>>48 つまり M -> V -> C の順ということですね
ありがとうございます
Mac で Qt 使ってる人に質問なんですが Objective-C で Qt 使えるんですか?
Macユーザー関係ないような? 10年くらい前にObj-C Qtバインディングをやった人がいたみたいだけど今はもう無いらしいよ Python、Ruby、Perl、C#のバインディングはすぐ見つかるけど 更新が活発でQt4.6にもついて行ってるのはPyQt4だけかな
>>50 Qt(C++)からObjective-Cなら使えるけどそれじゃダメ?
そこまでするなら wxWidget 系に行くか java - swt, java - swing 系行くかのほうが ぜったい楽だと思うの
>>51 > Python、Ruby、Perl、C#のバインディングはすぐ見つかるけど
C#に関してkwsk
ggr C# Qt Bindings
>>57 ろくな日本語ソースがひっかからない(´・ω・`)
カレンダーコントロールというか DatePicker みたいなもので 標準的なものはありますか?
QCalendarWidget
62 :
デフォルトの名無しさん :2010/02/04(木) 06:38:56
>>58 英語のソースでよいというのが大勢になって来たからではないか。
サンプルソースだけで何とかなるからなぁ
64 :
デフォルトの名無しさん :2010/02/04(木) 15:31:35
Qtで3Dバリバリのネットゲーを作れますか? Windows向けにDirectXでやるか、マックやLinuxユーザーでも遊べるような環境を使うかで悩んでるんですが。 実行速度で言うと DirectX>Qt>Silverlight>AIR>JavaFX で、対応するプラットフォームだと、 JavaFX>Qt>AIR>Silverlight>[MSの壁]>DirectX みたいな理解でok?
ok 作れます 次のかたどうぞ
Qtって速いの?
でもC++がちょっとアレな子だからなぁ
>>68 それをいうな。
Qtみたいなすごいものが作れるんだぞ。
立派な言語じゃないか。
そもそも手段と目的がごっちゃになってて 比較対象がおかしいと思うの・・・ > GUI の選択 と 言語の速さ 別に GUI ライブラリいらないよ > 3Dゲー
ネトゲだとチャット機能実装あたりに 少なくとも文字入力に関するライブラリは無いと困る気はする
>>68 C++みたいな猛獣を繋ぐ鎖としてはGUI以外でもQtは良い線いってると思うけどな。
いざとなれば鎖を離せるのが猛獣使いQtの強みの一つでもある。ただ自己責任で。
>>72 先生!
私の同僚が勝手に鎖を解き放ちました!
Qt のマクロは C++ なのに Objective-C っぽく見せてくれる側面はあるね
>>76 たぶんシグナルスロット機構のことじゃね
あんま知らないがCocoaは(C#も)シグナルスロットに似たデリゲートというのをよく使うらしい
マクロってよりqmakeの機能な気がするけど
moc
クラス名をみてるとどうしてもメロリンQとハイキングウォーキングQ太郎の顔がチラつくんですが、どうしたらいいですか?
>>79 メロリンQとハイキングウォーキングQ太郎を見たら
Qtがちらつくようになるまで修行しろ
なんでQuickTimeと紛らわしい名前にしたんだろう 検索のたびにうざいんだが
>>82 -QuickTimeと入れれば多少マシになる。
>>83 知らなかったぜ。
そうか、引き算すればいいのか。
あんまりかわらん
>>82 -QuickTime -twitter
検索ではいつも2つ除外してます
87 :
デフォルトの名無しさん :2010/02/06(土) 00:38:38
Qt Creatorって使い方覚えれば結構勝手が良さそうだな ぼちぼちメニューも日本語化がすすんできたみたいだし
Win7、VS2008、Qt4.6の環境で、QProcess::startDetachedを使って アプリケーションを引数付きで呼び出そうとしているのですが 引数の中に「"」が含まれていると「\」がつけられて「\"」になってアプリケーションに渡されてしまいます。 QProcess::startDetached(ExePath, QStringList() << "--foo=\"bar\""); // --foo="bar"を渡したいが、--foo=\"bar\"がわたってしまう main関数のargvでは「\"」が「"」に変換された状態で取得できるようですが、 winmainのlpCmdLineやGetCommandLine APIでは「\"」のままなので そのまま処理をしていると思われるWindowsアプリケーションが引数を処理できません。 QProcess::startDetached(ExePath + "--foo=\"\"bar\"\""); でもやってみましたが今度は「"」が無くなるだけで \"\"\"bar\"\"\"にしてもやはり「\"」が渡されてしまいます。 「\"」への変換なく「"」のまま渡すにはどうすればいいのでしょうか。
だれが\を付けてるのかをはっきりさせた方が良い
>>87 うん。慣れてくると結構いいよ。今までC++ Builder使ってたけど、「遜色ない」と
までは行かないものの、そんなに不満はない。
最初は各種の設定を.proファイルに手書きしなきゃならないのが「何だかなぁ」と
思ったけど、慣れてくるとGUIのチェックボックスやラジオボタンでいろいろ選択
して設定したりするより楽だと思うようになった。
翻訳はぼちぼちどころじゃなくて、ほぼ完全。翻訳されてないのはほんの数単語。
ちょっと戸惑うのは、レイアウト類の扱い。Qt Designerでも同じだと思うんだけど、
手書きでコード書いた場合とちょっと違う。実は隠れウィジットの上にレイアウト
が乗ってるので、レイアウトのサイズをマウスで変えられる(ように見える)。
しかもこの隠れウィジットのプロパティは一切変えられらない(表示されない)。
なので、「入門Qt4プログラミング」に書いてあるレイアウトの使い方とちょっと
雰囲気が変わる。
エディタは「余計なお世話」をかなりしてくれるので、設定で折り畳み機能とか
OFFにして使ってる。でも外部エディタはあまり使わずに済んでるから、結構
使いやすいのかも。
デバッガの起動時に時間がやたら掛かるのが難点かな...(VC++でcdbの
場合の話)。MinGW+gdbでは最近やってないからどうだったか忘れた。
>>88 QProcessが怪しいと思うが
とりあえずsystem()使ってみたらどうだろう
CarbideでQt使ってる人いますか? CreatorみたいQtのリファレンスを見たいんですが(F1とかで) できないんでしょうか?
QDataStream に QString(QObject::trUtf8("ほげ")) を << で出力したものを保存後 そのファイルを開いて QDataStream から >> で QString s に読み込みました これを cout << s; で出力すると ?? と文字化けします 下のように書き換えて cout << s.toAscii.data(); 再コンパイル後改めて読み込みしてもやっぱりだめです QByteCode s と定義し直して cout << s.data(); ますます意味不明です どうすれば良いのか途方に暮れております Windows Vista で mingw 版 Qt を使用 ソースは UTF-8 で保存しています
qPrintable( const QString & str )
wxスレで質問してたひとかな?
>>95 ありがとうございました
またまた質問で申し訳ありませんが
QMap<HOGE, FUGA> のインスタンス m を JSON っぽく qPrintable してくれるような関数かマクロってありますか?
m.toStdString()
m.toString()
m.toAscii().data()
qPrintable(m)
どれも無いみたいで・・・ orz
探すより iterator 回して実装した方が早いような気もしますが
もし既に便利なものあるなら使いたいです
お好きにどうぞ
>>97 > 探すより iterator 回して実装した方が早いような気もしますが
天才ですか!?
探すより早いなら実装しろよ
>>97 じゃないけど
QString pMap2Str(QMap<QString, int> &map)
{
QStringList sl;
QMapIterator<QString, int> i(map);
while(i.hasNext()){
i.next();
sl.append(QObject::tr("'%1': '%2'").arg(qPrintable(i.key())).arg(i.value()));
}
return QString(QObject::tr("{%1}").arg(sl.join(", ")));
}
こんな感じ?
templateでQMapの型を可変にする方法は知らん
iPhone用のアプリはQtで書けるんでしょうか?
Qtでもっさりiphoneアプリ
Qt iPhone は移植終わってないけどな。
Qt on android って今どんな感じ?
その前にQt on Dalvikが必要にならんか、それは
>>89 ,91,92
レスありがとうございます。
system関数を使うことで目的の動作を行うことができました。
NokiaなのにAndroidとかiPhoneも対応されるのかい?
オプソだから対応する人がいれば対応されるだろう・・・
ライセンス料ぼったくりのQualcomは倒産しろ
>>112 auも巻き添えになってNokiaに買収されるといい。
>>114 ヲヲヲヲ!?w
これでSymbian、WMは公式で愛ポンと闇泥井戸と全部制覇か
これで本気出してC#からC++に移る勉強するw
>>115 > これで本気出してC#からC++に移る勉強するw
C#をマスターしている人間が、あらためてC++で学ぶようなことってあるか?
C#は窓でしか使えないじゃん
いやそういう意味じゃなくて、C#でオブジェクト指向言語を習得した人が あらためてC++でオブジェクト指向言語を勉強し直す必要がありますか、って意味ね
じゃあ、C#できる人は全員C++マスターだね!!
>>118 どうみてもC#の方が簡単(つか楽)なんですけど・・・
じゃあその簡単とやらのC#をデフォルト言語に採用してよ>Qt
んな〜こったない
Qtに関していえば、QObjectの秀逸なポインタ管理のおかげで、 QObjectの中でQObject使う場合は自分でdeleteする必要ないんで、 ちょっとしたもの作るだけならガーベッジコレクションしてくれる メモリ解放不要な言語とそう大きく変わらないんじゃないかなぁ。 QtはC++の機能を最大限に使いつつ、C++の面倒なところをユーザに押し付けないライブラリだと思ってる。
ってことはあれじゃね、GUIアプリを組むとき以外もQtって使えるってことじゃね?
うんそうだよ それに気付いてからBoost捨てた
暗黙の共有というしくみがあるのは分かったのですが QString str1 = "hoge"; QString str2 = str1; のあと str2[1] = 'a'; を実行すると Copy on Write が発動して str2 が "hage" になっても str1 は "hoge" のままというのとは逆に あえて str1 が "hage" になって欲しいときはどうすれば良いのでしょうか?
参照にすればいいんじゃね?
>>94 QApplication app(argc, argv);
のあとに
QTextCodec::setCodecForCStrings(QTextCode::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
を書き足す
>>127 qdbusはQt使ったコンソールアプリだな。
コンソールアプリケーション作るときはQApplicationじゃなくQCoreApplication使うらしい。
>>131 訂正
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
>>130 やってみます
ありがとうございました!!
std::coutに相当する機能を教えてください
stdout 用に作られているインスタンスはないので下記のようにして作る。 QTextStream cout(stdout, QIODevice::WriteOnly);
137 :
135 :2010/02/08(月) 20:52:19
qDebug()を使ってみたのですが何も出力されません なにかあらかじめ設定しないといけないモードとかあるのでしょうか?
ttp://www.kde.gr.jp/~ichi/qt/qmake-manual-4.html Windows を使っていて、コマンドラインからこのアプリケーションを実行したときに
qDebug() の出力を見ることができるようにしたい場合、
アプリケーションをコンソールの設定でビルドする必要があります。
Windows で Make ファイルをこの設定にするには、CONFIG に console を追加します。
Windows で実行されていて、かつ CONFIG にすでに debug がある場合にのみ
CONFIG を追加したい場合があるかもしれません。
このような場合、2 つのスコープをネストさせて使います。
まず 1 つのスコープを作成し、その中にもう 1 つスコープを作成します。
そして 2 つのスコープの中に設定を書きます。例えば :
win32 {
debug {
CONFIG += console
}
}
>>139 できました
ありがとうございます
なぜかよく分かりませんが std::cout も使えるようになりました
本当にありがとうございました
前スレ 959 デフォルトの名無しさん [sage] 2010/01/26(火) 15:22:56 ID: Be: ソースファイルのエンコードが"で囲んだ文字列リテラルに影響するため、 Qtに文字列を渡すには、一度文字コードを変換する処理を挟まなければならない。 例えばutf-8のソースファイル内で文字列リテラルにマルチバイト文字が含まれている場合、 そのままでは文字化けしてしまうので、QString::fromUtf8()などの変換メソッドを通す必要がある。 以下のサンプル(ソースはutf-8)を実行すると、Utf8の変換メソッドを通した文字列以外は文字化けする。 変換メソッドを通すのが面倒な場合は、コメント部分を有効にすれば良い。 直接書いた他の文字列が文字化けすることがなくなる。 //QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8")); //QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); //QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); const char* cptr = "ffあ"; QString qs = "ffあ"; QString qs_fromUtf8 = QString::fromUtf8("ffあ"); qDebug() << cptr; qDebug() << qs; qDebug() << qs_fromUtf8; qDebug() << tr("ffあ"); qDebug() << trUtf8("ffあ"); と試した限りでは以上のように理解したけどどうでしょ。 // Qt Creator 作成の新規ファイルの文字コードがSystemから変えられないのはどうにかならんかな // プロジェクト設定のデフォルトの文字コードはなんの意味があんねん
こちら Qt 4.5.1 mingw 版 ソースは UTF-8 で保存 Windows Vista のコマンドプロンプトで make & 実行 QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); しておいて QString msg(QObject::tr("テスト")); // ソースは UTF-8 QString msg は UCS2 ? std::cout << qPrintable(msg) << std::endl; // SJIS で出力された qDebug() << qPrintable(msg); // SJIS で出力された qDebug("%s", qPrintable(msg)); // ??に化けている(デコードが変?) もしかして qDebug の中で変なことやってる?
上の続き qDebug() << msg; // "二重引用符で囲まれてSJISで出力された" string s = msg.toStdString(); // setCodecForCStrings() で文字化け回避 std::cout << s << std::endl; // SJIS で出力された qDebug() << s.c_str(); // SJIS で出力された qDebug("%s", s.c_str()); // ??に化けている(デコードが変?)
動きました ありがとうございました
どっかのサイトでqDebugは日本語使えないって書いてあったのを見た気がするが都市伝説だったのか
Qt CreatorってVisual Studioみたいに入力補完とかしてくれる? たとえばQtのクラス名を補完してくれたり、あるいは自作のクラス、 それに付随するフィールドや関数を補完してくれたりする?
する
お前は2chよりどっかのわけのわからんサイトを信用するのか
Python に eric4 っていう IDE があるんだけど これって Qt4 の作者と同じ人の作ったもの?
>>148 thxノシ
つ〜かそれだったらさ、C++のプログラム組むのにわざわざ金出してVS買うよりも
フリーのQt Creatorを使った方がよくね?
>>146 このスレでも前スレのテンプレまではqDebugで日本語ムリってなってたぞ
>>152 ほんとだ
記憶違いかと思ってたけど安心した
結局
>>144 で fmt は Latin1 固定ってなってるから
qDebug("日本語 %s %s ほげ", QObject::tr("ふが").toUtf8().constData(), QObject::tr("はげ").toUtf8().constData());
はだめで
qDebug("%s %s %s %s", QObject::tr("日本語").toUtf8().constData(), QObject::tr("ふが").toUtf8().constData(), QObject::tr("はげ").toUtf8().constData(), QObject::tr("ほげ").toUtf8().constData());
なら OK ってことだぬ
>>147 Qt Creatorの補完機能は結構優れものだと思う。
Visual C++の奴よりもよくできてるよな。 補完が動かなかったらコードミスを疑うようになるレベル
158 :
155 :2010/02/09(火) 11:05:18
使ってないからわからない。使ってる人ヨロシク。
>>157 eclipse で使う場合は eclipse が元々持っている補完機能を使うことになる。
SIGNAL や SLOT マクロの中を補完できないので Qt で書く場合には
個人的には Creator の方が楽。
Qtと関係なくC++を勉強する人にもQt Creatorは実はおぬぬめじゃね?
まじか。 Qt Creatorすげぇ。
QtCreator上のデバッグって なんかウインドウ上部に大きさ変えられないデバッガ出力があるんだが 下にもコンソールあるし邪魔くさくね? あれ消せないんだろか
>>160 そうかい?
基本的なC++から勉強したいからCDTでやってるが
いきなりマクロだらけのOtからだとキツイw
Qtはどんどん新機能が付いて更新が楽しいわ
これはすごいと思った
>>163 キツくないよ
楽だろ
そりゃマクロのせいで元々のC/C++の機能かQtの機能かの区別がわからないひとは
あとで知識の再整理が必要になるだけで
今後もQtしか使わないかもしれない訳で困ることじゃない
>>166 それかw
すごいとは思うがゲーム以外の何で役に立つのか分からん。
単純に技術としてすごいと思った
そろそろカウボーイビバップみたいなネットブラウズさせてくれ
>>166 すげぇ
ところで、株価データ
2003-04-23,11:23:11,43,33,44,22
みたいなデータを読み取りたいんだけど、
QTextStreamのデリミタを『,』に変えられない?
それかscanf的なものはない?
QString::split() でわけるとか QRegExp を使うとか。
コンソールアプリで日本語出力しようとして困ったので調べてみた。 結果から言うとUTF-8のソースファイルはでも日本語出力可能。 ---------------------------------------------- //QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); QTextCodec *codec = QTextCodec::codecForLocale(); qDebug() << codec->name(); qDebug() << "1:あああああ"; printf(codec->makeEncoder()->fromUnicode("2:いいいいい\n")); printf(QString("3:ううううう\n").toLocal8Bit()); printf("4:えええええ\n"); QTextStream out(stdout); out << QString("5:おおおおお") << endl; out << QTranslator::tr("6:かかかかか") << endl; out << "7:ききききき" << endl; ---------------------------------------------- printf()は直での文字リテラル指定はだめ。 QString()やtr()で文字列を囲むなりして、Qtの変換を通さないとダメ。
tr()使えよ
QTextStream out(stdout); out.setCodec("UTF-8");
テキストデータを一行ずつ保存する関数 WriteLine() があるけど これを使ってテキストデータを保存するとき、プラットフォームによって 生成されるテキストデータに違いって生じる? WindowsやUnixやMacで改行に違いがあるって聞いたけど Qtはそこのところどう対処しているんだろう?
やってみよう
やりたいけどLinuxしか持ってないんだよな
180 :
デフォルトの名無しさん :2010/02/11(木) 00:07:29
>>177 WriteLineってざっと探しても見つからないんだが、どこの関数?
それはともかく、改行コードって自分で文字列に埋め込むもんだと思うんだが。
Python とかだと \n の扱いを LF にするか CRLF にするか選べるよね CR は論外として
tr()使えよ
QIODevice::Text 付きでopenすると、"\n"の出力が Unix系では"\n"のまま Windowsでは"\r\n"に変換される。入力なら逆。 どちらの環境でも同じ改行形式にするなら QIODevce::Textを付けずに "\n","\r\n"を明示すればいい。
>>184 ありがとう。
やっぱ同じQtソースでも動かすプラットフォームによって生成されるテキストファイルに
違いが生じてきたりしちゃうんだね。
くょーと? 京都?
>FAQ:
>
> 1. After compiling and installing qyoto when I try to compile a program I get this error:
>** (/usr/lib/mono/1.0/mcs.exe:18770): WARNING **: The class System.Collections.Generic.List`1 could not be loaded, used in mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
>
>This is because qyoto uses .NET 2.0 features only found with the gmcs compiler. Please use gmcs instead of mcs.
http://ekarchive.elikirk.com/david/qyoto/index.php?option=com_content&task=view&id=25&Itemid=58 古いほうのページをみるとわかりやすいけど
gmcs でないと動かない
Ubuntu9.10で、Creator1.2.1使ってますが 同時にGEditeなど他のエディタを開いてコピペにて、Creatorに戻って 別のコピペをしても、前のコピーが残ったままでCreatorを一度終了するまで 正常にならナインだけど、 1.3.1では改善されてる? 誰かしらない?
>>185 いや同じにもできるし、プラットフォームに合せて変えることもできるということ
>>185 いやならバイナリで作るでしょ
コンソールに出力したときだってプラットフォームによってエンコード変わっちゃうんだし
むしろQtを使った場合 C++ と C# の違いがほとんど感じられない気がする
C#なら.netのクラスを使える。これは非常に大きな違い。 あとWindowsじゃないとまともに動かない所とか。 Monoってどこまで.Netに追いついてたっけ?
クロスプラットフォームのフレームワークを わざわざMS固有の言語で使うなんて馬鹿
>>193 LINQがあるじゃないか!!
・・・と思ったら2.0限定なのか
確かにQtでC++の面倒なところが隠蔽されるし
ライブラリも遜色ないんで、あんま変わんないかもね
>>194 gmcs限定ってところで、Windows云々は意味なしだね
> Monoってどこまで.Netに追いついてたっけ?
http://www.mono-project.com/CSharp_Compiler 俺も↑のサイトで見てついさっき知ったんだけど
monoってREPLが付属してるんだね
REPL目当てでWindowsに入れてもいいかもしれない
ネイティブコードを吐かせてこそ意味がある
iPhone向けMonoがネイティブを吐くんだよな ただ、MacOS必要なのとツールが優良なのがネック
WMターゲットで開発するときって結局VS付属のWM用コンパイラが必要なんだよね?
CeGCC が使える Qt for Windows CE がCeGCCでコンパイルできるかは知らないが
>>196 REPL目当てならipython+PyQtって手もある
Pythonxyが全部まとめて入ってておすすめ
C++で分割ソースをコンパイルするときは、まず各.cppファイルをコンパイルしてオブジェクトファイルを生成し、 できたオブジェクトファイルを最後にリンケージするという手順が必要なわけだけど、それをQtを使って プログラミングするとなるとその手順はどうなるの?
qmakeがMakefileを自動生成するから そこら辺はあまり気にしなくていい
はじめてQtを入れて触り始めています。 Qt creatorの完成度が高くて驚きました。 ただビルドに時間がすごく掛かるんですが何か間違っているんでしょうか? hello worldだけでビルドに数十秒もかかっています。 使っているのはWindowsのmingw32版です。
>>202 同じ
というか Qt だと moc とか uic とかの手順も増える
しかし
>>203 の言うとおりだから気にすんな
>>202 $ qmake -project
$ qmake
$ make
終わり
まぁしかし なんでもおまかせでうまくいくのは最初のうちだけなんだよな
>>206 ごめんなさい。Core 2 Duo P8800 + Windows 7です。
Qtの初回ビルドは時間かかるね 普段のビルド(ソースファイル2〜3個修正したとか、UIだけいじったとか)ならすぐ終わるんじゃない?
ちょっとお聞きしたいのですが qtやるならc++から勉強したほうがよいですか? それともqtプログラミングの本かって触りながらやってもいける感じでしょうか fortran畑なのですがguiプログラミングやる必要がでてきていろいろ探しているのですが すいませんがよろしくお願いします
書いてるコードの種類にも寄るような気はするが xtal をコンパイルboost呼び出しお茶を飲むような系統なら 時間はかかっても不思議でないし・・・
>hello worldだけでビルドに数十秒もかかっています。 ごめんよく読んでなかったわorz
>>211 QtCreatorインストールしてチュートリアルとかのソース見て
分かれば勉強する必要ないんじゃない?
ちなみにおいらは「ロベールのC++教室」でC++から勉強中
>>207 > $ qmake -project
> $ qmake
> $ make
> 終わり
頑張ればこれも一つにまとめられそうなのになぜか公式はそうしなかった
>>211 FortranからならQtを使うのにC++の勉強は絶対必要だと思うよ。
クラスの概念とか、ポインタとか参照とか...いろいろ知らないと難しい。
Qtの参考書だけでは済まない。
これはwxWidgetsだろうがC++ Builderだろうが同じこと。
実行速度とか余り関係なくて簡単に余り凝ってないGUIプログラムを作ってみる
のなら、Python+EasyGuiあたりから始めてみたら?
一年ぶりにうpでーとしたら、QPainterあたりの実装が変わって 気軽にドット打てなくなってたorz drawPoint()では1x1サイズのドットしか描けね。泣けた。 代わりにfillRect()使うことにしたがマンドクセ('A`)
いや、チュートリアルだけでも結構行ける とりあえずやってみれば? 言語でわかんないところが出てきたら その都度ググればいいだけのこと
>>219 甘いんじゃない?
ググってばかりでなかなか先に進まず、そのうちイヤになってくる可能性大。
QStringとかは重要なクラスなので、暗黙的に#includeしてくれるっぽいですね 他にどんなクラスが、暗黙的な#includeをされているんですか?
QtCoreのなかのモジュール。QStringもそう。
>>214 ,215,217
ありがとうございます。とりあえずインストールして触ってみます
土日に紹介していただいた本も立ち読みしてみます
c++ってメジャーっぽいので覚えておいて損もなさそうなので、
これを機会に勉強してみようとも思います
ありがとうございました
内部で速度が要求される部分 C++ ガワの部分は python , ruby などで みたいのほうがメンテは楽だと思うぞ 適材適所使い分けりゃいいのよ… C++ +α
>>216 proファイルはあとから手書きで書き換えるから
qmake -project と qmake がくっついてると困るわ
229 :
222 :2010/02/11(木) 23:48:23
>>223 Qt creatorでプロジェクトを作る時に、どれをインポートするかって質問されるじゃん
あれでチェックすると暗黙的に#includeしてくれるの
それとも、Qt Coreだけなの?
もちろんカリカリに組んだらC++よりCが速くなる可能性はあるが メモリ潤沢という前提ならC++の方が速いものができることが多いな
>>C++よりCが速くなる 例えばどんなコードで?
>>232 >pythonにしたおかげでOpenGL部分はわりとさくさくだが、SJISとUTF-8の混在が面倒くさいことに。
慣れてないとこうなる例
>>216 俺は別ファイルに追記する分を書いて、シェルスクリプトでproファイルとくっつけてmakeまでやらせてる。
>>235 >使用言語:C++(DXライブラリ)
よしDXライブラリだ!
ホビーユースでも C++ は利用され(ry
CよりC++の方が遅いというほうこそ理解できん。 どちらだってポインタ使えるわけだし。
>>237 クラス作るとCと比較したときに色々と見えない処理が入るからじゃ?
ライブラリのリンクは C の方が速いと思われ プロセスの起動も C の方が速いと思われ
アホは無理してレスしなくていいと思われ
241 :
sage :2010/02/12(金) 01:09:37
QActionにicon入れるとメモリリーク起こすんだけど。
C++は最悪C言語の95%程度のロスに抑えるように設計されている ってドエライ人が言ってた
>>237 ある処理を、C++の機能を使って「エレガントに」実装した時の実行速度と、
Cでカリカリ実装した時の実行速度の、一般的な違いのことだと思うよ。
同じように書いたものには勿論そんな違いは無いし、一つ一つ見ていけばqsortとsortみたいな
逆になりうる例もあるし、とりあえずそんな厳密な優劣の話ってわけではない、はず。
>>220 ありがとうございます。
プリコンパイルヘッダー、gccでも使えるんですね。
あとで試してみます。
vcのコンパイラだと何も設定しなくても速いな
Qt Creatorの拡張がしたいけど どうやればいいんだろう?
「入門Qt4プログラミング」に書いてある
∧∧ コイヤァァァァ!! (д´* ) (⊃⌒*⌒⊂) /__ノωヽ__)
__j、 ___ _人_ _ __く>ー} i⌒'⌒jム、 ´ `丶  ̄ `Y´ ≦(⌒o くcぅ ~ r'r‐(_,.ィ ./::/::.::.::.::.::.::.::.\::.::.\ ういはるー ういはるー | >ィ(.人ノ7:.:.:.}个ー'r ゚ 、)ム /::/::.::.:/:|::.::.::.::.::.::ヽ::.::.:ヽ 十 工ア(ノ)′/....../...|.. ヽ`弋人く '::.:|i::.i::.j| |::.ヽ :|i:.::.::|::(V゙ハ V:/:.:./:斗{=ミ/}i_ハ__ハ小:.i:ムr‐f’. i::.::|i::.ト八|\j斗\::|::(ノ{):| ういはるー ういはるー //{:.:.:|!/、__ミ′ 厂`ト}.:i|:.:.},、》. |::.::|iY-=o=- .|:.::j|::.::| i }小 :::}7 (゚) .. (゚) T:.:..ハ:{. |:.:リハ -=o=- .|/)::│ _ 人 _ ノ/:.∧{^ リ:./:. :.′. ∨|::.:: __ .,_ イ::.::.| `Y´ |フ´ヘ.__i 'ー=三=-' '^}:/{:.ト{ | i人 | .::::/.| /::.::|::.::.:| l l 八 '_人{. |::∨ :.:.しw/ノイ::/::.i|::.::.:| ―― ――'フ.:\ .イ´ /⌒ ∪ | ⌒\:.:| . | ⌒/{ノ> --、<:从_ / 人 } | ノ゙\ \ ズチュ `ーァ . ̄ニ────ー-v′ ノ/ / / / 、 ''' . ;; ::: . ;;; く ⊆/ { | ;;; \ ) ) ) | { r、 ;;; ::: . ;; . . | ノ ,ノ 〉 { `ー────ァ―‐r‐ ,ヽ ) ズチュ ( ( ノ { { r′l / `ー= `ー=' (⌒ (⌒ )ノ )
Qtで作成したソフトにヘルプ機能を持たせようとしてるんですが,ToolTipやWhatsThisでは機能不足 だし,かと言ってQtの本格的なヘルプシステムでやろうとするとQt Assistantをカスタマイズしたり 起動させたりしなければならず大袈裟なので,HTMLでヘルプを作っておいて,ブラウザに表示させる ことを考えています。 Windowsだけなら,WIN32 APIのShellExecute()を使って.htmlファイルの関連付け起動をさせれば 可能なのはわかっていますが,これと同じようなことをQtの世界の中でやる方法があったら教えて ください。要するに,Qtで"なんたら.html"を指定してブラウザを起動して表示させる方法があれば 知りたいのです。 ちなみにLinux等他のプラットフォームのことは殆ど知りませんが,Windows上で作ったQtの プログラムのソースをできるだけそのままで他のプラットフォームでも動かせるようにしておきたい ということなんです。 よろしくお願いします。
252 :
250 :2010/02/12(金) 16:49:33
>>252 QtWebKit を使って html を表示する方法もあるよ。
254 :
250 :2010/02/12(金) 17:46:47
>>253 > QtWebKit を使って html を表示する方法もあるよ。
早速テストプログラム作ってやってみました。簡単で結構速いですね。
これで出来そうです。
ありがとうございました。
QApplicationにコマンドライン引数を渡していますが、 デフォルトではどのような処理がなされているのでしょうか?
applicationDirPath()、applicationFilePath()、applicationName()の元に使ったり、 当然arguments()で取得できるQStringListに格納するのに使ってるんジャマイカ?
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());と tr()を使うのはどちらが賢明な判断なのでしょうか?
QTextCodec::setCodecForCStrings()はQStringが入力として受け付ける(const)char*の文字コード。 QTextCodec::setCodecForTr()はtrが(ry
261 :
26 :2010/02/12(金) 23:46:34
俺はQString::fromUtf8();
前出のandroid-lighthouse試した奴いる?
qtcreatorでコンソールプロジェクトを実行した時に プログラムを手動で終了させてるんですけど、 処理が終わったら終了できるようにできませんか?
>>265 処理が終わったら QCoreApplication::quit() を呼び出せばいい。
イベントループが不要ならそもそも QCoreApplication::exec() を呼ばなければいい。
>>264 入力の時だけじゃないだと・・・
他にいつこれ絡むの?
入ってくる文字コードこれだぞーって教えてるだけじゃないの?
え?
>>265-266 QCoreApplication app(argc, argv);
コンソールのみ使用するプログラム
app.quit();
return app.exec();
この順番でOK
>>268 >>270 Qt使い始めた頃に必死こいて得た知識を信じきった結果がこれだよ!
言われてからドキュメントTextCodec::setCodecForCStringsの項を見たら
convert to and fromとか書いてあるから泣きたくなった。
指摘さんくす
>>259 >>271 >>3 とかみると
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
だったり
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("sjis"));
だったりって決め打ちで書かれてるケースが多いんだよね(これは良くないと思う)
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
にして環境非依存にしておく方がスマートだと思う
どっちもソースを UTF-8 で保存しているとして、 ----------------(A) QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); // (1) 決め打ち QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); // ソースが utf-8 なのでここは決め打ち OK を書いて QString hoge("日本語"); // ソースのエンコードで埋め込まれた CString が (1) を基準に変換される qDebug("%s", qPrintable(hoge)); // 環境によって化ける ---------------- ----------------(B) QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); // 環境に適応 QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); // (2) ソースが utf-8 なのでここは決め打ち OK を書いて QString hoge(QObject::tr("日本語")); // ソースのエンコードで埋め込まれた tr が (2) を基準に変換される qDebug("%s", qPrintable(hoge)); // 環境が変わっても化けない ---------------- (A) ***でも結果的に動く*** けれども (B) の方が望ましいと解釈してるんだけどどう?
違うか qDebug() は例が悪かった 忘れてくれ orz とりあえず「ソースのエンコード」と「実行時のエンコード」の ポータビリティを両立させようとしたら (B) の方が望ましいのでは? と思った 入力を考えると QString hoge("日本語"); // (1) が使用されている QString hoge(QObject::tr("日本語")); // (2) が使用されている これはいいとして 出力を考えると qDebug("%s", hoge.toUtf8().constData()); // 問題なし std::cout << hoge.toLocal8Bit().constData(); // 問題なし std::cout << hoge.toAscii().constData(); // (1) が使用されている std::cout << hoge.toStdString(); // (1) が使用されている std::cout << qPrintable(hoge); // (1) が使用されている? かな
>>269 QCoreApplication::quitはQCore(ry::execを呼び出した後じゃないと
効果が無いんじゃないかな?
だからQTimer::singleShot(0, &app, SLOT( quit() ));を使って
タイマーイベントで駆動する小細工が必要になる
ってのを見たんだけど[1]
#include <QCoreApplication>
#include <QTimer>
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QTimer::singleShot(0, &app, SLOT( quit() )); // app.quit();
return app.exec();
}
[1]
Qt-interest Archive - QCoreApplication won't quit
http://lists.trolltech.com/qt-interest/2008-02/thread00916-0.html
Windows版のQt Creatorはキーの反応悪くて使いにくい。なんで皆文句言わないんだろう ってずっと思ってたんだけど、無変換キーを押すと次のキー入力が無視されることに気づいた 変換−無変換でIME切り替えてるから困るなあ
>>275 おお、寝てる間に小人さんが・・・
THX !!!
最後の結論はこっちになってますね
> #include <QtCore>
> #include "myclass.h"
>
> int main(int argc, char *argv[])
> {
> QCoreApplication qapp(argc, argv);
> MyClass *class = new MyClass(0);
> QObject::connect( class, SIGNAL( done() ), &qapp, SLOT( quit() )
);
> class->doSomething(); // Emits done, when finished
> return qapp.exec();
> }
You just need to add Qt::QueuedConnection as an additional argument to
the connect() call.
http://doc.trolltech.com/4.3/qt.html#ConnectionType-enum
>>277 ソースに日本語は使わずに国際化リソースで対応しよう
>>279 なるほ・・・ど?いやでも日本語でコメント書きたいよw
俺は外部エディタ登録して使ってる。 でもQt Creatorのエディタは日本語入力以外そんなに悪くないと思う。 折り畳み機能は邪魔なのでOFFにしてるけど。 最初、「わ、関数の中身が全部消えた」とか勘違いしたw カッコや""の自動補完も最初は余計なお世話だと感じたけど、 慣れるとそうでもないね。
あーごめん
>>277 はQtCreatorがダメみたいに書いちゃったが
無変換キーのせいでダメだと思ってただけで、他は問題ないんだ
まあ外部エディタでいいんだけど、自動補完がよくできてるからもったいないなと
>>278 それでも
void MyClass::doSometiong() { done(); }
って定義したら、やっぱり終了しないみたいだから
QCoreApplication::exec()より後で呼び出されることを保障する手段としては
タイマーイベントを使うのが一番簡単なんじゃないかと思う
execした直後に自動で呼び出されるsignalがあればそれを繋げばいいんだけどさ
リファレンス見る限りそんなものは無いようなんで困ったもんだなぁと
そもそもなんのためにexec()呼び出すん?
コマンドの実行本体の流れ自体はコンソールで充分なんだけど エラーのときだけメッセージボックス出したいとか で やってみたら QWindow だけ作って メッセージボックスにハンドル渡して app.exec() 呼ばなくてもちゃんと動いたわ w
>>283 >void MyClass::doSometiong() { done(); }
Q_OBJECT 書いてる?
>>286 書いてるよー
じゃないとmocに怒られるし
moc って qmake 実行し直しだよね
void MyClass::doSomething(){ emit done(); }
>>220 試してみたところWindowsのMingw環境でもプリコンパイルドヘッダーが使えました。
debugディレクトリ以下にstable.h.gchというディレクトリができていたので
ちゃんと機能しているようです。
コンパイル速度の変化は正確にはわからないですが、
もっとたくさんヘッダファイルを使う場合には差が出るのではと思います。
291 :
283 :2010/02/13(土) 16:01:02
292 :
220 :2010/02/13(土) 21:38:02
>>290 俺はVCだけど。プリコンパイルドヘッダー使ったら、コンパイルが劇的に速くなった。
QApplicationとQtGuiをプリコンパイルの対象にしたから、殆どすべてのヘッダーが
プリコンパイルされて巨大なファイルが出来上がったけどねw
それよりデバッガーの遅さが気になる。VCだからcdbなんだけど、デバッグ起動して
ブレークで止まってから、ローカル変数が表示されるまでかなり時間が掛かる
(「ダンパーを初期化しています」とか表示されてから10秒以上あるかな)。
あんまりほめられたことじゃないけど、カットアンドトライ的にソースをホイホイ
書き換えてはデバッガーで動かしてテストしてみるのはちょっと苦痛。
>>283 MyClass cls;
QObject::connect(&cls, SIGNAL(done()), &app, SLOT(quit()), Qt::QueuedConnection);
cls.doSomething();
return app.exec();
と Qt::QueuedConnection を付けて呼ぶと
>QCoreApplication::exec()より後で呼び出されることを保障する手段としては
が満たされるようですね
>>286 >>289 できました
emit は書いてなくても動くみたいです
ありがとうございました
294 :
デフォルトの名無しさん :2010/02/13(土) 21:54:49
>>282 > まあ外部エディタでいいんだけど、自動補完がよくできてるからもったいないなと
うん。だから場面によって使い分けてる。マークジャンプとか、アウトライン機能
(見出し機能)で関数一覧を表示させといて一発ジャンプとか、使い慣れたエディタの
方が良いこともあるから。
>>269 >>285 >>293 わざわざ MyClass 作らなくてもこれでも終われるね (connect の行がないと終わらない)
QApplication app(argc, argv);
QMainWindow *window = new QMainWindow();
window->setAttribute(Qt::WA_DeleteOnClose);
コンソールのみ使用するプログラム
QMessageBox::about(window, QObject::trUtf8("テスト"), QObject::trUtf8("!!"));
QObject::connect(window, SIGNAL(destroyed()), &app, SLOT(quit()));
window->close();
return app.exec();
いや、GUI作らない場合の話をしてるんだから、
QApplication app(argc, argv);
じゃなくて、
QCoreApplication app(argc, argv);
でないと反則。
っつーかそもそも、
>>284 さんの指摘にもあるが、
app.exec();
を呼ぶ動機が微妙。
ひょっとしてネットワークとかタイマーとか、
どっかでイベントループ回す必要がある、
ってことなら判らんでもないが。
シグナルとスロットで引数がある場合、どちらも同じ値が入ってくるのですか?
>>298 emitしたシグナルの引数が、スロットに渡される。
スロットの受け取る引数の数が少ないときは、後ろの引数は削られる。
スロットの受けとるのが多い場合は(どうなるか忘れたが)うまくいかない
signal valueChanged(int)とslot setValue(int)をconnectしたら、
例えばvalueChanged(3)がemitされたとき、setValue(3)が呼び出される。
signal valueChanged(int)とslot update()をconnectしたら、
例えばvalueChanged(3)がemitされたとき、signalの引数が1つに対してslotは引数を取らないので削られて、
update()が呼び出される。
Qt Creatorで「void Hoge::Hoge() F1」みたいなポップアップでてくるじゃん あれってどこで消すのよ?
ESCキー
Qt CreatorをFreeBSDにインストールしたいんだけどpackageで提供されていたっけ?
304 :
デフォルトの名無しさん :2010/02/14(日) 22:38:57
>>303 あるよ
devel/qtcreator
だったかな
>>304 thx
それ入れればたぶん依存でQt本体も勝手にインストールされるよね(´・ω・`)?
QNetworkAccessManagerが送信するリクエストヘッダフィールドの順番って変えられないんでしょうか? それとヘッダに強制的に追加される不要な項目を消すことはできますか? リクエストだけ直に書ければ助かるんですけど・・・
307 :
デフォルトの名無しさん :2010/02/15(月) 09:13:00
>>306 QNetworkRequestで出来る操作だけで不満ならQTcpSocket使ってはいかがか。
>>306 ヘッダーはユーザが追加した順番になるはず。
自動的に追加されるヘッダーは送出の直前で追加されるので削除は無理っぽい。
空かどうかをチェックして追加しているので自前のものに置き換えることは可能。
Qt 4.6.2
QtCreatorでFramework Onlyの方の全てのプラットフォームいけます?
Qt 4.6.1入れたばかりだぞ、ゴラァ
一ヶ月弱でバージョンアップかよw
4.6だったか4.6.1だったかをこの前入れたばかりですが・・・
入れ替えるのそんなにめんどくないからいいじゃん。 何なら鍼灸療法入れといたって医院だし。
4.6.1入れたばっかなのに4.6.2入れるのマンドクセ
メインウインドウはどうやって作っていますか? やっぱり、手書きか
designerで作ってる。
臨機応変に
Windows版のQtCreatorってどうやってバージョンアップしてる? 一度クリーンアンインストールしてから再度インストールしなおす?
すいませんQtの質問ではないと思いますが ダイアログ1のデータをダイアログ2で使いたいんですが、うまく行きません。 class Dialog : public QDialog{ Q_OBJECT public: Dialog2(QWidget *parent = 0); Dialog2(QWidget *parent, Dialog1 *dlg1); として Mainwindowで Dialog2 *m_dlg2 = new Dialog2(0, &m_dlg1); とすれば、動くんですが、m_dlg2をメンバー変数にしようと思いMainwindow.hで Dialog1 m_dlg1; Dialog2 m_dlg2(QWidget *parent=0, Dialog1* &m_dlg1); としてみたんですが default argument missing for parameter 2 of 'Dialog2 Mainwindow::m_dlg2(QWidget*, Dialog1*&)' とのエラーになってしまいます。 どうすれば、できるでしょうか
test.proにQT += webkitが書いていないと、コンパイラに怒られるんですが 何してんですか?これ
>Dialog2 m_dlg2(QWidget *parent=0, Dialog1* &m_dlg1); >としてみたんですが >default argument missing for parameter 2 of 'Dialog2 Mainwindow::m_dlg2(QWidget*, Dialog1*&)' >とのエラーになってしまいます。 Dialog2 m_dlg2(QWidget *parent=0, Dialog1*m_dlg1=0);
>>322 普通に旧版アンインストールしてから新しいのインストールすれば問題ないよ。
設定は自分のプロファイルフォルダの下(C:\Documents and Settings\(ユーザー名)
\Application Data\Nokia)に保存されてるから、消される心配しなくて大丈夫。
>>324 ソースの方で webkit 使ってるんだろ
というか何が変わったん4.6.2...
>>297 そうなんだ
「入門Qt4プログラミング」の FTP / HTTP だと
exec() でイベントループ回さないといけないと書いてあった
332 :
324 :2010/02/16(火) 22:30:18
>>327 ,329
ひとまず、qmakeの勉強をしてみることにします
qt creatorでMainWindowを作っているわけなですが、 メニュバーは自分でシコシコ手書きするしかないんですか?
334 :
デフォルトの名無しさん :2010/02/16(火) 22:45:44
>>333 ウィンドウの左上に「ここに入力」って書かれてるところをクリックして、&File とでも
入力してごらんよ。
コンテキストメニュー(ポップアップメニュー)は手書きするしかないけど。
↑ごめん。ダブルクリックだった。
>>326 ありがとう。
それならバージョンアップも楽だね('A` )b
337 :
333 :2010/02/16(火) 22:55:30
>>334 最後にエンター押さなきゃ行けないんですね、
Visual Studioだとエンターを押さなくてもよかった(俺の記憶では)ので気がつかなかった
ありがとう
338 :
323 :2010/02/16(火) 22:57:56
>>325 ありがとうございました。
Dialog2 m_dlg2(QWidget *parent=0, Dialog1*pdlg1=&m_dlg1);
としたら、今度は
SO C++ forbids taking the address of a bound member function to form a pointer to member function
と怒られました。
ISO C++では、インスタンスのメンバ関数のアドレスを、メンバ関数へのポインタを作るために取得することは禁じらています。
結局、この方法はペケなんですかね
>>338 Dialog1 *m_dlg1;
Dialog2 *m_dlg2;
とポインタでクラスメンバを宣言して、
コンストラクタの初期部で
m_dlg1(new Dialog1), m_dlg2(new Dialg2(0, m_dlg1))
とでもすれば。
親を 0 にするならデストラクタで delete を呼ぶ必要があるけど。
340 :
デフォルトの名無しさん :2010/02/17(水) 00:50:34
>ダイアログ1のデータをダイアログ2で使いたいんですが、うまく行きません。 シグナルるでスロットにデータを渡す
Mingwをmsysでも使うからupdateはマンドクセ 1. 旧Qtアンインストール 2. 新Qtインストール 3. システムの詳細なプロパティで変数pathにQtを加える。 4. c:/msys/1.0/etc/fstabにmingw32の場所を教える。 makeするのマンドクセ
makeしなくてもmsysとQtで別々にMinGWがある状態でやってればいいんじゃ? 共存できないのかな
できる
qt4.6.2はバグフィックス集みたいだから 余計な苦労したくなければ入れておく方がよさげだね
QtCreatorってVCみたいなドッキングウィンドウにならないのかなぁ・・・
なるよ
qtってSIGNALとSLOTがあるから例外を投げてこないのかな〜
とあるソフトではQApplicationを継承したクラスに、 public + staticなメンバ変数を宣言していました お前らは、QApplicationをどんな感じで使ってますか?
「入門Qt4プログラミング」誤字脱字多すぎね? ソースにまでバグがあるw
>>346 Designerの方はなるんだね
プラグイン追加すればいいのかな?
でも自動的に開いたり閉じたりはしないよね?
QCoreApplication でコンソールアプリ書けるのは判ったけど Windows 用の DLL って Qt ではどうやって作るの?
コンパイラの成果物がDLLなのかEXEなのかと Qt使ってるかどうかは関係ないよ。
354 :
デフォルトの名無しさん :2010/02/19(金) 06:51:59
>>352 qmake の .pro で、TEMPLATE = lib
>>353-354 ありがとうございます
Win32API とかだと DLLMain を書かないといけなかったりするのは
Qt だとどう書くのかなと思ったのです
その辺りも含めてやってくれる。 同じソースから、*NIXならlibXXX.soが、WindowsならXXX.dllが作られる。
ダイアログベースでWindowsのイベントを自分で処理している レガシーなアプリケーションの改修を任されたのですが、 新規に追加するダイアログだけ Qt を使うことは可能ですか?
QHttp 使って 2ch に書き込みしたいんだけど cookie とか session 用のメソッドが全然見つからない このあたりのを自分で作らないとだめなのかな
QNetworkCookie
FreeBSDにパッケージからQtCreatorをインストール。 無事起動までこぎつけたけどなぜかコンパイルの段階になって 「Qtの本体が無いよ」と言われてコンパイルできず。 あるぇ〜? 言われてみれば qmake とコマンドラインで打ち込んでも認識されないな・・・ パスがきちんと通ってないのかな?
ここはお前の日記帳じゃ(rt
>259 thx!!
Mac Portsからqt4インストールして出来たqtdemoを起動すると いつの間にやらまっしろなウィンドウしか表示されなくなってしまったんだけど、他に同じ症状の人いないかな? ビルド&起動環境は64bitカーネル、64bit版のqt 発生するバージョンはここ最近の5バージョンぐらい?
>>364 10.6 で qt4-mac @4.6.2 の qtdemo-mac (コマンドライン) と
/Applications/MacPorts/Qt/qtdemo.app を起動してみたけど,どっちも問題ないです.
ビルドはデフォルトのまま 64bit でしてるけど, MacBook なのでカーネルは32bit.
>>359 QNetwork を見ると QHttp とほとんど同じメソッドっぽいんですが
QNetwork の方が高機能で QHttp は obsolete ってことですか?
367 :
デフォルトの名無しさん :2010/02/20(土) 11:47:45
FreeBSDにパッケージからQt4をインストールしたんだけど > qmake -project まではおkだけど、次の > qmake の段階になると「QMAKESPECが定義されてませんよ」と言われてエラーが返される。 たんにパッケージからインストールしただけじゃダメなの? 他にどんな設定をする必要がある?
当然QMAKESPECについてググってみたんだよな?
ググったけど通販のページしか出てこない
>>369 ログインするユーザー毎にQMAKESPECを設定しないといけないのかorz・・・
QMAKESPECに freebsd-g++ を指定したら > qmake が通るようになった。
でも同じシステム上だったら freebsd-g++ しか指定しないのは分かり切ったことなんだから
Qt本体の方で freebsd-g++ と指定してくれてもいいのにね(´・ω・`)
ところで
> qmake -project
> qmake
とまで通るようになったけど次の
> make
でエラーが返される。なんでも「QApplicationなんてファイルやフォルダはありませんよ」とか
「QLabelなんてファイルやフォルダなんてありませんよ」とか・・・
なんかがおかしいだろorz・・・
以前Troll-techからQtのソースを取ってきてFreeBSD上でシコシココンパイルしてからインストール
したときはこんな初歩的なトラブルでつまずいたりすることはなかった。
packageからインストールしたことで何か問題が起きているとしか思えん。
濃厚なゆとり臭がする
>366 thx!!
obsolete なクラス(というかヘッダー)使ってたら qmake 時か make 時に warning 吐いてくれてもよさそうなきがする
>>372 インストールすべきものは全てインストールしたんだがな(´・ω・`)・・・
>>371 FreeBSD の ports は充分テストされないでリリースされるのが常識
エラーから想像するにincludeパスが通ってないとかかな
本家からWindows用のSDKをダウソしてきてXPマシンにインストールしたんだが ルートフォルダにinstall.iniだのinstall.res.1031.dllだのeula.1041.txtだのファイルを てんこ盛り作ってくれやがった。 これらのファイルってインストールが終わったら削除してしまって構わないよな? いずれにせよちょっとお行儀悪すぎないか?
>379 そんなのは判り切ってるんです packageから入れたのに自動でincludeパスの設定がされなかったことを問題にしてるんですよ!!
>>380 うちはそんなもの作られなかった
ひょっとしてインストール先を
C:\Qt じゃなくて
C:\ にしたんじゃないの?
>>382 いやインストール先をいじった覚えは無いんだが
>>384 の要点
These files are unnecessary and can be safely deleted from the system.
これらのファイルは、不要であり、システムから安全に削除できます。
Its a known bug and is planned to be fixed in VS2008 SP1.
それは知られているバグです。そして、VS2008 SP1で修理されるために、計画されています。
>>381 FreeBSD に関する問題点の報告に時間を割いていただき、 どうもありがとうございます。
>>379 includeはきちんとやってるよ。
#include <QtGui/QApplication>
ってな感じで。もちろん
#include <QApplication>
も試してみたがこれもダメだった。
>>386 エラーから想像するにincludeパスが通ってないとかかな
Detailed Description The QLocalSocket class provides a local socket. On Windows this is a named pipe and on Unix this is a local domain socket. If an error occurs, socketError() returns the type of error, and errorString() can be called to get a human readable description of what happened. Although QLocalSocket is designed for use with an event loop, it's possible to use it without one. In that case, you must use waitForConnected(), waitForReadyRead(), waitForBytesWritten(), and waitForDisconnected() which blocks until the operation is complete or the timeout expires. Note that this feature is not supported on versions of Windows earlier than Windows XP. See also QLocalServer.
>>387 同じソースをQtCreatorを通してビルド&実行すると問題なく通る。
コンソールからコマンド直打ちじゃmakeの段階でエラーが返ってくる。
どゆこと(・ω・)?
> qmake -project
> qmake
> make
で問題ないはずだよな?
今起きたことをありのまま言うぜ・・・ QtCreatorでプロジェクトファイルを読み込んでビルドしたら問題なく通った。 その後コマンドプロンプトで > make コマンドを打ったらこれも問題なく通った。 だが再度コマンドプロンプトで > qmake -project > qmake > make と打ち直してみたら最後の > make の段階で再びコンパイルエラーが出るようになった。 何を言ってるのか分からないかも知れないが俺もどういう事態に巻き込まれたのかよく分からない。 何か尋常じゃないことが起きていることだけは確かだ。。。
qmake -projectで作り直したproファイルでQtCreatorからコンパイルできるか? できなかったら、proファイルに不備がある。 できたとしたら、qmakeのオプションが怪しい
397 :
デフォルトの名無しさん :2010/02/20(土) 23:24:46
Qt CreatorでGUIのウインドウをつくるときって 一緒につくられるヘッダファイルやソースファイルに変更が反映されていくの? それとも何かでコード出力しなきゃダメなの?
>>396 > qmake -projectで作り直したproファイルでQtCreatorからコンパイルできるか?
うん、QtCreatorからそのproファイルを読み込んで「ビルド」を実行するとコンパイルできてしまう。
>>380 それだ!!
うちのも何か eula.1041.txt とか10個くらい
作成されてた理由がわかったd 特に害もないから気にせず放置してたけどw
>>398 Qt Creatorは各種の環境変数を内部で設定して、それを子プロセスに引き継いだ状態で
qmakeを起動するから、結局はコマンドラインでqmakeするときの環境変数の設定が
足りないんじゃないか?
Qt Crteatorの左端に縦に並んだアイコンの[プロジェクト]のページに、
[ビルド時の環境変数]という項目があるから、そこで[詳細を表示]ボタンを
押して確認してみたら?
俺はWindowsでやってるから外してるかもしれないが、基本は同じだと
思うので...
っつーか本気で教えてもらおうという気が感じられないんだが ふつう自分の環境変数とかここに貼るだろ
ちょ、ちょっと待ってね FreeBSDへのインストールが間違っているのかと思って QtCreatorからQt4ライブラリと一式アンインストールしてきた。 再度インストールしなおそうと思うんだけどパッケージからインストールすべきか、 本家からソースコードをとってきて地道にコンパイルしてインストールすべきか迷う。。。
本家からソースコードをとってきて地道にコンパイルしてインストールすべき
デバイス WindowsMobile6.1 ビルド wincewm60-msvc2005 QtCore4.dll QtGui4.dll msvcp80.dll msvcr80.dll exampleのanalogclock.exe をデバイスのローカルフォルダにコピー 上記のことをやってみたんですが analogclock.exeが起動するまでに7秒ほどかかります。 (デバイスのスペックによっても変わるでしょうが) これはQtCore4.dllとQtGui4.dllを読み込むのに時間がかかっているということでしょうか? 短縮させる方法は無いでしょうか?
WMを窓から投げ捨てる
>>407 やっぱり無理ですか?
自分の知識不足だろうと思ったんですが・・
.netの起動より遅いんですよねorz
staticにリンクしたらどうだ?
自分もWindows上でQt + MinGWという環境で開発しているけど それを外部で実行する際に必要なDLL一式って何を取りそろえばいいんだっけ? 一カ所にまとまっていたりしない?
QCoreApplicationならQtCore4.dll、QApplicationなら加えてQtGui4.dll qmakeでQT変数に加えたdll(networkならQtNetwork4.dll)が必要。 後、実行時に動的に読まれるdllもあるから、直接の依存関係が無くても plugins 以下も必要なdllがある。
>>411-412 ありがとノシ
いずれQtの側でも作成したプログラムごとに必要なDLL一式をエクスポートしてくれる機能が実装されるといいね。
> QtCore4.dll
> QtGui4.dll
このdllファイルって
\Qt\2010.02\bin
\Qt\2010.02\qt\bin
の二カ所に同名で格納されてるけどどっちを使ったらいいと思う?
サイズは微妙に違う(後者の方が大きい・・・)
414 :
411 :2010/02/21(日) 14:17:13
俺はQtのSDKの方じゃなくて「フレームワークのみ」の方からダウンロードして使ってるので
ディレクトリ構成が違うのでわからないけど,PATHの通ってる方でいいじゃないか?
PATHを通さずに使ってるのなら,
>>401 と同様のところの[実行時の環境変数]を見れば
いいと思う。
>>414 > PATHを通さずに使ってるのなら,
>>401 と同様のところの[実行時の環境変数]を見れば
> いいと思う。
\Qt\2010.02\qt\bin
こっちを使っているみたいノシ
>>409 7→4秒程度になりました。
(analogclock.exe msvcp80.dll msvcr80.dll)
このへんが限界なんでしょうかね?
//これでやっと.net並みorz
>>413 前者はSDKのツール用のDLL。Qt Creator とか。
後者はフレームワーク用のDLL。
作ったアプリでリンクされるのは後者なので後者を使う方が無難。
Win版QtCreatorのソースってSDKに含まれてるんでしょうか? \Qt\2010.02\qt\srcの中にそれっぽいフォルダが見つからなかったもので。
Qt on Android って雲行きが怪しいんだなぁ
421 :
418 :2010/02/21(日) 21:14:58
>>419 あっ、なるほど!見落としてました。
ありがとうございました。
もはやQtはMeeGo一択でしょ AndroidはGoogleがオラオラすぎで ポカーンって感じ LiMoとMeeGoに収束するんじゃないかと思う
もっかQtを勉強中。 サンプルを眺めてみるとシグナルとコネクタを結ぶconnect関数を定義する場所は どれもだいたいシグナルを発するクラスのコンストラクタの中で宣言しているみたい。 これってそういう決まりだと思って素直に受け入れるべきもの? それともこれは一つの流儀であって別にコンストラクタの中で宣言しなくてもいいもの?
>>423 connect() を呼び出す場所のことか。
コンストラクタで呼ぶのはそのクラスの寿命の間に接続関係に変化がない場合。
別にそれ以外の場所で connect() や disconnect() を使ってシグナルの接続関係を変えても問題ない。
サンプル程度の短いものだとあまりそんな処理が出てきてないだけだと思う。
>>424 そうなんだ。重要なのはapp.exec()を実行するまでにどこかしらの場所でconnect()関数が
最低でも一度は呼び出されるようなプログラムを書けと言うことなのね。
app.exec()の後でconnectしてもそれまでにsignal来ないなら大丈夫
m_fileMenu = new QMenu(menuBar()); menuBar()->addMenu(m_fileMenu); QMainWindowを継承したクラスで、こんなコードがあります なんで、QMenuに引数にthisじゃなくて、menuBar()なの?
親(引数parent)を指定してるんじゃないかな addMenu()でも勝手に親子関係が設定される (結局parentに代入される)ので m_fileMenu = new QMenu(); menuBar()->addMenu(m_fileMenu); でも動くと思う
どういう親子関係なのか聞きたいんじゃないかと予想してみる ウインドウ→メニューバー→メニュー→メニュー項目
m_file ってんだから「(&F)ファイル」だろうな
>>427 >QMainWindowを継承したクラスで
thisを渡すとMainWindowが親になっちゃうから
>>427 >>431 結局コンストラクタで何を引数にしていても
menuBar()->addMenu(m_fileMenu);
で上書きされると思うんだが
QMenuのヘルプを読む限り、QMenuのコンストラクタに渡すparentは他のQObject
からの派生クラスと同じように、自動deleteのためだけのようだよ。
だから
>>427 の例ではにコンストラクタの引数は別にthisでもいいんじゃないの?
>>433 メニューバー交換したらリークしませんか?
メニューとメニューバーの親子関係と、QObjectの自動破棄メカニズムは 別のものだから関係ないような気がするけど...
436 :
デフォルトの名無しさん :2010/02/22(月) 21:54:48
質問させてくださいm(__)m PyQtを勉強しております。 QtDesignerで作成したあるwidget(QVBoxLayoutの中にQLabelやQButtonが配置してあるような物) を、そのかたまりのまま動的に配置したいと思っているのですが、 どんな流れで実現させるのが一番便利でしょうか? 想像ではDesignerで出てきたUi_Frameクラスをそのままメインウィンドウで self.wid = Ui_Frame(self) tLayout = QtGui.QVBoxLayout() tLayout.addItem(self.wid) と、できれば嬉しかったのですが、、、どうも TypeError: QBoxLayout.addItem(QLayoutItem): argument 1 has unexpected type 'Ui_Frame' というエラーになってしまいます。 いくつ配置するか想定できないので、欲しい数分Designerで配置するのは不可能です。 初心者まるだしですいません、よろしくお願いします。
self.wid = QtGui.QWidget() PyQt4.uic.loadUi('hoge_frame.ui', self.wid) tLayout = QtGui.QVBoxLayout() tLayout.addItem(self.wid)
438 :
デフォルトの名無しさん :2010/02/22(月) 22:46:58
>437 大変、ありがとうございます。 ただもうひとつ聞かせてください。 DesignerでどのFormを選ばないといけない、などあるのでしょうか? Widgetで始めるとaddItemでエラーが出てしまい、 TypeError: QBoxLayout.addItem(QLayoutItem): argument 1 has unexpected type 'QWidget' QFrameで始めるとLoadUiでエラーが出てしまいます。 TypeError: ('Wrong base class of toplevel widget', (<class 'PyQt4.QtGui.QWidget'>, 'QFrame'))
>>439 上書きインストールってできたっけ?
それとも一度アンインストールする必要あり?
>>438 >TypeError: QBoxLayout.addItem(QLayoutItem): argument 1 has unexpected type 'Ui_Frame'
>TypeError: QBoxLayout.addItem(QLayoutItem): argument 1 has unexpected type 'QWidget'
>TypeError: ('Wrong base class of toplevel widget', (<class 'PyQt4.QtGui.QWidget'>, 'QFrame'))
QBoxLayout.addItem(QLayoutItem)
の引数の型と一致していないんじゃない?
QNetworkAccessManager::finished(QNetworkReply *reply) でダウンロード後の処理をしようと思うのですが、 QNetworkReply::finished() の方とどっちでするのが良いでしょうか? 前者は複数セッション同時にダウンロードしてても大丈夫でしょうか?
やりたいようにやればいいんでね?
QPixmapをloadしたいのですが、 実行ファイルを開発環境以外に移して実行すると、png以外開けません。 もちろん、開発環境下ではそれ以外も開けるのですが、 dllなど何が必要で、どう設定すれば良いのかわかりません。 教えていただけると助かります。
445 :
444 :2010/02/23(火) 23:28:46
申し訳ありません、書き忘れました。 開発環境は、Windows XP で Qt Creater(MinGW) を用いています。 つまり、ダウンロードできるパッケージをそのままインストールした感じです。
447 :
444 :2010/02/23(火) 23:54:33
>>446 ありがとうございます。
そのツールを使って確認しましたが、それらしいdllはなく、
表示されたdllを全て詰め込みましたが駄目でした。
jpgやgifなどは、デフォルトでは使えず、プラグインを使用してるという記事も目にしましたが、
実際にどこを参照しているのかがわかりません。
C:\Qt\2010.02\qt\plugins\imageformats
449 :
444 :2010/02/24(水) 00:08:48
>>448 やはりそこなのですね、ありがとうございます。
そこにあるqjpeg4.dllやqgif4.dllを詰め込んでみましたが、これでは駄目でした。
どこかで明示しないといけないのでしょうか?
451 :
444 :2010/02/24(水) 00:31:59
>>450 できました!
結果的には、おっしゃるように、アプリケーションと同じ場所に imageformats を作れば良かったようです。
それまでは、dllを直に置いていました。
ありがとうございました!
>>367 QHttp で書いていたのを QNetworkAccessManager で書き直しましたところうまくいきました。ありがとうございました。
#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkCookieJar>
#include <QNetworkReply>
#include <iostream>
class QUrl;
class Qt2chwr : public QObject {
Q_OBJECT
public:
Qt2chwr(QObject *parent = 0);
void postmsg(const QUrl &url, const QByteArray &dat);
signals:
void done();
private slots:
void fin(QNetworkReply *reply);
void err(QNetworkReply *reply, const QList<QSslError> &errors) {}
private:
QNetworkAccessManager *nam;
QByteArray data;
};
#include "qt2chwr.h"
int main(int ac, char **av){
QCoreApplication app(ac, av);
Qt2chwr w;
QObject::connect(&w, SIGNAL(done()), &app, SLOT(quit()));
QString dat(QObject::trUtf8("bbs=unix&key=1236650121&FROM=&mail=sage&MESSAGE=さげ&time=1236650121&submit=書き込み&tepo=don"));
QTextCodec *jp = QTextCodec::codecForName("sjis");
w.postmsg(QUrl("
http://pc12.2ch.net/test/bbs.cgi "), jp->fromUnicode(dat));
return app.exec();
}
Qt2chwr::Qt2chwr(QObject *parent) : QObject(parent){ nam = new QNetworkAccessManager(this); nam->setCookieJar(new QNetworkCookieJar()); connect(nam, SIGNAL(finished(QNetworkReply *)), this, SLOT(fin(QNetworkReply *))); connect(nam, SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError> &)), this, SLOT(err(QNetworkReply *, const QList<QSslError> &))); } void Qt2chwr::postmsg(const QUrl &url, const QByteArray &dat){ QNetworkRequest request(url); request.setRawHeader("User-Agent", "Qt4"); request.setRawHeader("Referer", url.toString().toAscii()); nam->post(request, data = dat); } void Qt2chwr::fin(QNetworkReply *reply){ if(reply->error() != QNetworkReply::NoError){ std::cerr << "Error: " << qPrintable(reply->errorString()) << std::endl; }else{ QRegExp re(QString("<!-- 2ch_X:cookie -->")); if(re.indexIn(reply->readAll()) >= 0){ postmsg(reply->url(), data); return; } } emit done(); }
qt-4.4.3を使っているんですが。 tooltipを表示する速度を変更することはできますか?
455 :
デフォルトの名無しさん :2010/02/24(水) 12:18:49
>441 ありがとうございます。おっしゃる通りでした! QLayoutItemの型に合わせるのにてこずりました。。
456 :
デフォルトの名無しさん :2010/02/24(水) 20:27:31
ボタンなどではなく、QLabelやフォームからclickedのシグナルを検知することはできますでしょうか? QTデザイナーでシグナル&スロット編集で見れるものしかとれないのでしょうか。。
FreeBSDでQtをソースからgmakeしてコンパイルしているんだけど毎回同じところでエラーが出て中断される
swap_pager: out of swap space
swap_pager_getswapspace(11): failed
Fet 24 04:15:26 localhost kernel: pid 21197 (ld), uid 1001, was killed: out of swap space
g++: Internal error: killed: 9 (program ld)
Please submit a full bug report.
See <URL:
http://gcc.gnu.org/bugs.html > for instructions.
gmake[1]: *** [../../lib/libQtGui.so.4.6.2: Error 1
gmake[1]: Leaving directory '/tmp/qt-everywhere-opensource-src-4.6.2/src/gui'
gmake: *** [sub-gui-make_default-ordered: Error 2
なんだろね(´・ω・`)?
>>456 そもそも QLabel や QLineEdit などには clicked() シグナルがないので無理。
mouserPressEvent(), mouseReleaseEvent() を継承して自分で clicked() シグナルを出すか、
編集がいらない場合はボタンをラベル的に扱うか。
>>457 普通にエラーメッセージ通りなのでは?
スワップできないとかあるから、
HDD掃除かパーティーションきり直しか。
gccのバグだったらごめんぬ。
>>459 swapは/に統合してあるからHDDの容量が限界を迎えるまで余裕があるはずなんだけど(´・ω・`)・・・
>>459 失礼、swapは独立した領域に256MB確保していた。
でも256MBでも足りなかったのか・・・
最近のソフトの肥大化は恐ろしいな(´・ω・`)
というわけで急遽512MBの緊急SWAPを追加してコンパイル再開中
はじめまして。
OSS版のQtをVisualStudio2008 Expressで使用しています。
テキストエディタを右クリックしたときのメニューや、
ダイアログのキャンセルボタン等が英語で表示されているので
http://www.sra.co.jp/qt/relation/index.html の情報とかを使って日本語で表示するようにしようとしたのですが、うまくいきません。
もしご存知の方がいましたらやり方を教えていただけないでしょうか。
よろしくおねがいします。
>>461 swap_pager: out of swap space
もしかして失敗して中断したら
make clean
してから
make all
とかやってる?
それだと毎回同じところで止まるけど
上の中断なら失敗したところからすぐさま
make all
だけで続きから始まるし swap もリセットされて上手くいくよ?
>>463 > make all
ね、ありがと。ためしてみる(´・ω・`)ノシ
ところでまた新たに別のエラーが出てコンパイルが止まってた。
/qt-everywhere-opensource-src-4.6.2/bin/qmake -spec /mkspecs/freebsd-g++ -unix -o Makefile WebCore.pro
Cannot find file: WebCore.pro .
*** Error code 2
Stop in /qt-everywhere-opensource-src-4.6.2/src/3rdparty/webkit/WebCore .
*** Error code 1
Stop in /qt-everywhere-opensource-src-4.6.2.
もうねorz・・・
(´・ω・`)ノシ
>>458 どうせ1個とか2個しか使わない上に単純な処理なんだったら、そのQLabelを作るクラスにeventFilter定義する方法もあるよね。
そしたらQLabelのサブクラス作らなくてすむけど、QLabelからシグナル出すって目的は果たせない。
eventFilterもってるクラスでスロット直接呼び出すか、そのクラスのシグナルを発生するかだな。
Qt Creatorでアクションエディタに登録したアイコンをツールバーにドラッグ&ドロップするだけで 簡単にツールバーがデザインできるのは便利だど思うんだけど、ツールバーにアイコン以外 (例えばドロップダウンリスト)を配置したい場合はQt Creatorでは無理な話ですか?
(´・ω・`)
(´・ω・`)
QStringList args = app.arguments(); でコマンドラインオプションを取得するとき オプションの中に「%」が含まれていると args[1] にうまくデータが入りません 「%0D」だと「1267081114D」という文字列になってしまいます 「%%0D」とか「\%0D」とかを試しても駄目でした なにが間違っているのでしょうか? WindowsVistaで使って居ます
あれれ? Qt creator 1.3.1に上げたらhelpがうまく使えなくなった。 検索キーワード入力して、項目の候補が出てくるんだけど、 それクリックしても中身が出てこない。 使い方変わったのかな?
ヘルプの[コンテンツ]を選択したときに、各種のマニュアルのリストが出てくれば 大丈夫だと思うんだけど... 出てこなければ、[ツール]メニューの[オプション]⇒{ヘルプ}⇒[ドキュメント]に ちゃんと各種のヘルプファイル(.qch)が登録されてるかどうか確認してみて。 登録されてなければ、登録しなおせば大丈夫なはず。
>>473 [ツール]メニューの[オプション]⇒{ヘルプ}⇒[ドキュメント]には
各ヘルプファイルが表示されていましたが(既に存在しない古いモノもありました??)
一度全部消してもう一度全て追加し直した所、表示されるようになりました。
どうもありがとうございました。助かりました。
>>474 WindowsならAppData以下のフォルダに設定ファイル残ってるからね
>>467 ワードパッドのフォント選択みたいなことができないかってこと?
今Creatorさわってみたけど多分無理
Qtのオブジェクトってポインタで受け渡しするものが圧倒的に多いわけだけど たとえば connect(sender, SIGNAL(signal), receiver, SLOT(slot)); の"sender"や"receiver"はポインタである必要がある。 Qtの内部がどうなっているのか知らないから何とも言えないけど なんでわざわざポインタで渡すの? 普通にクラスオブジェクトを渡してもいいじゃない。
クラスオブジェクトを渡したらコピーコンストラクタが動くから(ry ポインタじゃなくて参照って話ならわからんでもないが
>>478 参照渡しでもいいよね。
でもC++ベースの言語であるQtでなぜにあえてポインタ渡し?
g.c.
で?
確かになんでだろう? まあNULLを渡したい時との、整合性とかじゃね?
単にWidgetはポインタとして保持する場面が多いから いちいち*とか付けないでそのまま渡せるようにしただけじゃないのか
マジレスすると、単にC++ではポインタ渡しが基本だからだと思うが・・・ thisの型は参照ではなくポインタだし、new演算子もポインタを返すし、他の言語ならあるはずのnull参照も存在しない C++の参照渡しは、スタック上のオブジェクトや右辺値をまるで値渡しみたいに渡せて便利!っていう程度のもの だからnewしたポインタに逆参照かけて参照渡しするような、むしろ面倒になるケースで使っても意味がない あと値渡しは基本型に対して使うのが一般的。コンパイラ依存だけどレジスタ渡しになってお得だから オブジェクトを値渡しするとすんごいコピーしちゃう。VM系言語で言うと毎回ディープコピーして渡す勢い ということで、ポインタ渡し/参照渡し/値渡しの三択なら、誰が書いてもポインタ渡しを選ぶことになるかと でもなんでスマートポインタ渡しにしないんだよって話なら俄然わかるよ
>>485 スマポ渡しにすると、普通は困らないだろうが、
速度を極限まで追求したいときには困るからとか?
過去との互換性かなそれとも。
ガベコレで回収されたときに辻褄が合うようにするためだと思ってた
スマートポインタはスマートポインタ同士の互換性がないから。 すべての人がすべての用途に使うスマートポインタがC++にあれば良いけど、 無いから一番汎用的なポインタは生ポインタ
QMainWindow *w = new QMainWindow(); connect(&*w, SIGNAL(...
ありがとうございました
QListViewの行にそれぞれ別の文字色を割り当てるにはどうのように
>>492 書き途中で投稿してしまいました。
QListViewの行にそれぞれ別の文字色を割り当てるにはどうのように
すればできますか?
お前ら、ようやく入門Qt4プログラミングを買いましたよ 学生の俺に4k円はデカい
1つのソース中でOSに依存したコードがある場合、 #ifdef XXX // for Windows #else // other( mac or other unix) #endif とかやりたいのですが、Qtの場合 XXXの部分で使える OS毎に#define された定義って何かあるのでしょうか?
>>494 英語が読めれば全く同じ内容の文書がネットでタダで入手出来るんだが・・・
英語が読めないんならいいだろ
500 :
494 :2010/02/26(金) 20:14:33
>>497 QListWidgetならできるのにQListViewではできないんですか?
英語が読めるだけじゃ辛いよ
>>494 英語が読めたとしても、
日本語の書籍がたった4000円で買えるなら、
俺は払うぜ。
4000円だろ?俺も学生だけど、日本に生まれ育っていると
やっぱり日本語の方が絶対読みやすい。
>>501 サンプルあさくってみ。
やっている奴があったはず。
>>504 ありがとうございます。
サンプルについてもう少しヒントをください。
>>493 QStandardItem::setBackground()
508 :
507 :2010/02/26(金) 21:57:16
文字色だった orz setForeground()
>>507 できました。
本当にありがとうございます。
なんでこんなにブックマークされてんのか いまいちよくわからんな
Bearer Managementが4.7から入るんだね コレ早く正式版出ないかな
class CustomClass : public QObject
{
Q_OBJECT
signals:
void valueChanged(int);
public slots:
void display(int);
};
> コンパイル時には,signalsはprotectedに,slotsは空にそれぞれ置換えられます。
http://gihyo.jp/dev/feature/01/qt/0002?page=2 signals: はそれでいいとして、public slots: は slots: → public: に置き換えるようにすれば
slots:
void display(int);
と記述を簡易化できない?
>>512 protected slots:
private slots:
ってのがあるんじゃね。
あと、可読性が悪くなるじゃん。
514 :
513 :2010/02/27(土) 13:08:14
つまり publicって一言も記述していないのに 以下パブリックになっちゃったら可読性が微妙ってことじゃない? あとは過去との互換性。
Qt Designer は Qt Creator があれば必要ないように思うんだけど Qt Designer にしかできないことってあるの?
QtCreatorを使わない人が使う。
>>515 Qt Creator は Qt Designer のラッパ的なものでしょ?
お前は何を言っているんだ
QtCteator1.2.1 MainWindowフォーム上にQWidgetを貼って、これを格上げしたいんですが 格上げするクラスとして ファイル>新規作成で、Qtデザインフォームクラスを選ぶとuiファイルも作成されて しまいますし、 cppにQPainter painter(this)を書くと variable 'QPainter painter' has initializer but incomplete typeとなってしまいます。 C++クラスを選び、基底クラスにQWidgetを選ぶと、QWidgetを継承したhとcppが 作成されますが、コンストラクタの引数にQWidget *parent=0が無いのでこちらで書き足さないと ダメみたいですが、 格上げ用のクラスファイルの作り方はどれが正解でしょうか?
>>520 後者。引数は特に付け足さなくてもいい。
522 :
520 :2010/02/27(土) 22:23:34
>>521 ありがとございます。
でも、引数なしにすると
no matching function for call
のエラーになってしまいます。
CustomClass::CustomClass() : parentClass(){
524 :
522 :2010/02/28(日) 12:00:58
引数なしだと、やはり no matching function for call to'Drawing::Drawing(QWidget*&)' となり void setupUi8QMainWindow *MainWindow) { . . widget = new Drawing(centralWidget); のところが指摘されます。 なにか、やり方がまずい?
「格上げ」って、サブクラスを作る機能だというのはわかるんだけど、 そもそもどういう時に使うの?
526 :
デフォルトの名無しさん :2010/02/28(日) 12:41:56
質問失礼します。 PyQtを使っています。 QTDesignerで作成したuiファイルから取得したwindowを 別のWindowとして表示したいのですが menu = uic.loadUi('ui_test.ui', self) menu.show() などで行うと、一瞬別Windowが描画されて消えてしまいます。。 足りない処理や、別手法などがあればアドバイスお願いいたします。
527 :
526 :2010/02/28(日) 14:02:21
自己解決しました。 親のクラスのインスタンスにしたら描画の問題が解決しました。
>>525 MainwindowにQWidgetなどを貼って、図形などを描くための
painterEvent関数を追加するときとか
>>525 自分で作ったウィジェットをUIに埋め込みたいとき。
>>520 うーん、じゃあ面倒くさいけど付け足すしかないみたいだねぇ。
39
532 :
525 :2010/02/28(日) 18:10:32
今Qt本買うとしたら”入門Qt4プログラミング”でおk?
英語が読めれば全く同じ内容の文書がネットでタダで入手出来るんだが・・・
言語が違うものを同じ内容とするのはどうかと思う
複数のDock Widgetをタブ表示した時、タブ位置を変更するにはどうすればいいんだろう。
539 :
538 :2010/03/01(月) 10:01:01
あと、複数Dock Widgetをタブ表示した時、タブをドラッグして表示順序を変更したりすることはできる?
QMLの話題ってでてこないね WPFもイマイチ盛り上がってないみたいだし
>>537 C++-GUI-Programming-with-Qt-4-1st-ed.pdf
で検索
横からsunks
入門Qt4プログラミングを120ページくらいまで読んだけど、 ひたすらアルゴリズムを説明しているような 本当にオライリー本なのか?と疑うような
>>542 検索してみたけど、bittorrentや中国・韓国のサイトしかないような。
(1つだけ.frのもあるが。)
・・・これって合法な代物なの?
えらそうに英語版PDFがあるっていうから、
てっきり合法なんだと思ってるんだけど。
Windows版のQt Creatorのアプリケーション出力で結果がちゃんと出力されないんだけど俺の環境だけ? #include <iostream> using namespace std; int main() { cout << "test" << endl; } これでやってみても xxx.exe を起動中... xxx.exe はコード 0 で終了しました で終わっちゃう Linux版だとちゃんと表示されるんだけどな・・・
550 :
548 :2010/03/03(水) 02:17:24
>>549 ありがとう
でも、それってコマンドプロンプト起動してそこに実行結果表示するやつだよね?
そうじゃなくてQt Creatorのアプリケーション出力に出力したいんだよ
>>547 本は白黒なのにPDFの方はカラーだよね
それに(日本語の)本の方は誤字脱字だらけで
ソースもバグだらけだけど
PDFの方は問題ないんだよねw
>>548 WindowsのGUIアプリにはprintfとかcoutの出力先が基本的に存在しない
デバッガのコンソールに出力したい場合はAPIのOutputDebugString()というのを使う
Qt使ってる場合はqDebug()でおk
qDebug()文字化けするお
>>555 オライリー「入門 Qt4プログラミング」の付録A 日本語関連FAQ 参照
557 :
デフォルトの名無しさん :2010/03/03(水) 11:52:42
MainwinodwにQWidetを貼って、これを格上げして ui->widget->メンバー関数 で使ってたものを 外のQListWidgetやQpushButtonなどと水平レイアウトでくくりと QWidget has not menber name メンバー関数になってしまいます。 なぜでしょうか
間違っているってどこが?
Windows XP(コンパイラはVC 2008)でQt Creatorで作ったアプリのデバッグしてるんだけど, デバッガの動きが極端に遅い。デバッグヘルパOFFにしてみたけど大差なし。 ステップオーバーに数十秒も掛かったりするんだけど,こんなもんなの? まぁ,マシンは数年前のLet's Noteなんでパフォーマンスが望めないのはわかってるけど, いくらなんでも遅すぎ。 デバッグウィンドウに赤文字で意味不明のワーニングが出たりしてるけど,そのせいなのかな。 MinGW gccでgdb使った場合も遅いんでしょうか?
そういや、Qt4 Createrは最低どれくらいのマシンスペックが必要なんだろう ざっと探したが見あたらない…
メインウィンドの右半分にテキストエディタを配置して、これを メインウィンドの伸縮に合わせて延びちじみさせたいんですが テキストエディタのプロパティ設定では出来ないんでしょうか。
左に何を置くか次第だが sizePolicy や minimumSize をきちんと設定すれば出来ると思う。
>>565 毎回、そのsizePolicyとかminimumSizeで悩む。
で、毎度毎度試行錯誤して決めてる。
ちゃんと理解してないからだと思うんだけど、、
どこかに良い資料とかないですかねえ。。
568 :
561 :2010/03/04(木) 20:30:25
>>561 自己レスです。自作のDLLの更新とインポートライブラリやヘッダの更新が合ってなくて、
関数のエントリポイントがずれたりしていたのが原因だったようです。
さすがにステップ実行に数十秒もかかるようなことはなくなりましたが、やはり最初の
ブレークポイントで止まるまでは相当時間が掛かりますね。
569 :
563 :2010/03/04(木) 22:15:42
sizePolicyをいろいろいじってみてたんですが、よく分かりません MainWindowにresizeEventを書いて、ここで ui->TextEdit->setMaximumSize で出来そうな気がしますが setMaximumWidth(sizeHint().width()); としたら、TextEditのminimumSizeに なってしまいました。 sizeHintは最適なサイズを返す関数だと思うんですが、
>>563 たとえば Designer で QWidget に QListView と QTextEdit を QHBoxLayout を使って配置する場合、
QTextEdit の sizePolicy を Expanding に
QListView の sizePolicy(Horizontal) を Preferred や Fixed にすると
プレビューでリサイズした場合に QListView は固定サイズで QTextEdit だけ
大きくなっていくけど、これは違う?
( Preferred の場合は sizeHint で指定したサイズまでは QListView もリサイズするけど )
572 :
569 :2010/03/05(金) 20:01:42
>>571 OS:Ubuntu Qt:4.5.2 Creator:1.2.1
どこが違うのか、うまく行きません
QListViewをFixedの QTextEditをExpandingに設定し 両方を選択
右クリックからレイアウト>水平に配置
この段階で、ウィンドウの大きさに関係なく、QListViewとQTextEditがウィンドウの
中央あたりで正方形に近い形で横に二つ並んで状態になる。
手動で大きさを調整しても勝手に変わってしまう
オブジェクトインスペクタではQHBoxLayoutの下にQListView QTextEditがある
この状態になるとQListViewもQTextEditもサイズ変更できなくなる
で、実行してウィンドウを伸縮しても、変化しない
と言う状態です。
Linux版のせい?
573 :
デフォルトの名無しさん :2010/03/05(金) 20:38:43
>>572 >QListViewをFixedの QTextEditをExpandingに設定し 両方を選択
>右クリックからレイアウト>水平に配置
「両方を選択」しないで「外のQWidgetを選択」してレイアウトを指定。
575 :
572 :2010/03/05(金) 22:17:02
>>573 ,574
できました。ありがとうございました
QtのGUIをWindowsのXAMLみたいにXMLで記述することってできますか?
designerが掃き出す*.uiってXMLなんだが
578 :
576 :2010/03/06(土) 00:58:16
あっ、すみません、言葉足らずでした。 プログラム実行時にXMLで記述された内容に従ってGUI表示ってできますか? つまりXMLを編集してプログラム実行時に表示内容を変更できないかと。
579 :
576 :2010/03/06(土) 01:09:09
良く考えたらシグナルとスロットのconnectとか考えたらXMLじゃなくてQt Scriptで記述しないとダメかもですね。。。
できます
581 :
576 :2010/03/06(土) 11:59:30
>>580 できますか!
どこかに参考になるサンプルコードなどあれば教えていただけないですか?
>>580 現実的じゃない
全ての分岐を書くくらいならQtScript用のコード生成したほうが楽
583 :
sage :2010/03/06(土) 15:09:41
カスタムWidgetなどにショートカットをつける事はできますか? QPushButtonにはsetShortcutで簡単にセットできるのですが、 自作のWidgetにショートカットでクリックイベントを渡す事ができません。 keyPressEventなどで地道に全部書くしかないんでしょうか・・
584 :
575 :2010/03/06(土) 15:18:11
たびたび、すいません。 左右ペイン風のフォームを作り、右にTextEditをExpnading、左にLineEdit、PushButtonなど を垂直レイアウトした場合うまく動作するんですが 左にListWidgetを加え場合、左レイアウトの幅がListWidgetのデフォルト幅の256 になってしまい、思うようなレイアウトになりません。
>>581 QUiLoader
Qt Designer の .ui ファイルで出来ることは限られているから
どのくらいやりたいことと合うのかは知らんが。
まだ開発中だし、XMLでもないが今後なら QML が入ってくるから
やれることも広がってくる。
>>583 QAction に setShortcut して、その triggered() シグナルを
自作の Widget のスロットに connect() すれば出来ると思う。
変換 無変換 カタカナひらがな このキーはeventでなんの反応も無いのは仕様? 反応させる方法ある?
なんとなくわかった IMEが横取りしないようにしなきゃだめなのか
こっちには機知概来てなくて良かった
Qt使ってファイルのタイムスタンプの更新ってどうやるの? まさか、できない?
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
593 :
デフォルトの名無しさん :2010/03/07(日) 22:15:09
595 :
583 :2010/03/08(月) 16:27:24
QActionでショートカットを作成しました。が、 同じKeyを二つの関数にconnectすると QAction::eventFilter: Ambiguous shortcut overload: x とかになってしまうのですが、 動作させる方法はありますでしょうか?
>>595 同じ Widget に同じキーシーケンスの action があると問題があるみたいだな。
QWidget::addAction() でショートカットを Widget と結びつけてる?
それぞれのアクションが別の Widget にあればフォーカスに応じて
適切に使用される action が切り替わるようだけど。
decimal型を使いたいのですがQtにはありませんか? 自作しないとだめ?
普通にgmpでも使えば?
* Qt LGPL 版で開発をした後に、Qt 商用版に移ることはできません。 これの意味が分からんのだけど、一旦開発したソフトをLGPLとして公開して しまったらもう商用版に移行できないってことなの?
>>599 確か代理店にもらったライセンスの説明資料に,プロトタイプをLGPL版で開発した後に、
本番ソフトを商用版で開発するのもダメって書いてあったよ。
公開/非公開は関係ないらしい(バレるかどうかは別として)。
極端だが、LGPL/GPL 版を使って多人数で開発しておいて、 最後の最後で商用版を1ライセンスだけ買ってリリースするようなことはするなってことなんだろう。 商用ライセンスでリリースするならきちんとライセンス料金を払って開発しろと。
うぉ、即レスサンクス。 そーなのかー。なんか変な制限だなぁ。 最初LGPLで作ってうまくいったら商用版ていう流れは普通に考えられる ケースだと思うんだけど。特に個人レベルの場合は。
>>602 商用目的なら最初から商用版使えってことだから
別に変な制限じゃないと思うけど。
LGPL版はお試し版じゃないんだから。
開発目的が商用なのかそうじゃないのかを事前に
判断できないケースはそうそうないでしょ。
試したいなら評価用ライセンスもあるからな。 納得いくかどうかは別として理解は出来る。 LGPL 版使って商用アプリを出すことも出来るから わざわざ商用ライセンスを買うこともないと思うが。
605 :
デフォルトの名無しさん :2010/03/09(火) 15:49:11
質問です: Qt Creatorを使って".ui"ファイルをポトペタ修正していますが、 menuToolsに"Setup"と文字列設定すると実行時にそのメニューが消えてしまいます。 "Setup"でなくて、先頭にスペースを入れて" Setup"としたり、 末尾を切って"Setu"とかすると、メニューが表示されます。 さらにQt CreatorをMac OSで使ってる場合のみで、Windowsでは発生しないみたいです。 原因を知りたいですし、その次には、どうやって対処したら良いのでしょう?
QtWebkitとかって 商用版でもLGPLになるのか
608 :
605 :2010/03/09(火) 16:36:46
>>607 OKでした。席外して帰ってきたらさっそくご回答有難うございましたorz
連続質問スマソ: Qt Creatorを使って".ui"修正でmenuToolsを追加しましたが、 Qt Creatorでのイベントハンドラの追加方法が分かりません。 Qtのシグナルとスロットは勉強しましたし、 ソースコードでメニューをnewしてイベントと関数を結び付けるソースコードも勉強しましたが、 いざ、Qt Creatorでどうすれば良いのか。。。 ダブルクリックでイベントハンドラが開くのでなく、 シグナル&スロットのペインで、Go to slotメニューを実行して、 Go to slotダイアログを開くってことであってますか? その先ダイアログの中身が良く分からないですけど。 このあたり、なんでウェブサイトやヘルプに一連のチュートリアルが無いのでしょう? ソースコードでのチュートリアルは一杯見つかりますが、っていうかそっちばっか検索にひっかかってメンドウ。
>>609 「Go to slot」でOK。
* Go to slot を選んでダイアログを表示する。
* ハンドラを呼び出すときのシグナルを選択する。
QPushButton なら clicked() だろうし、アクション(QAction) なら triggered() が普通。
* オブジェクトがシグナルを発生した場合に呼び出されるスロットが作成されるので処理を書く。
上記の流れだと connect() が呼び出されてはないが、 Ui クラスの中で connectSlotsByName() が
呼び出されているため、自分で別途 connect() する必要はない。
611 :
609 :2010/03/09(火) 17:25:16
d。出来ましたorz menuToolsだと、clicked()が無いので、戸惑いました。 仕方なくとりあえず、triggered()がデフォだったので、それでイベントハンドラ作成されて、メッセージボックス表示させてみましたw
612 :
デフォルトの名無しさん :2010/03/09(火) 19:31:51
>>606 元々LGPLで一部BSDライセンス。PhononとCLuceneもLGPL。
OpenSSLを有効にしていて、OpenSSLライブラリを配布しようとすると
ライセンスと輸出入制約がある。
>>612 4.6 からは JavaScriptCore ベースに変わった影響で QtScript モジュールも LGPL になってる。
ver4.6.1を使っています。 quitボタンが表示される簡単なプログラムを組んだあと > qmake-qt4 -project と実行すると QFileInfo::absolutePath: Constructed with empty filename というwarningが表示されます。プロジェクトファイル自体は問題なく生成されそのあとqmake-qt4; make; で無事 実行ファイルも生成できたのですが、このwarningが意味しているのはどういうことでしょうか? 基本的なプログラムにも関わらずwarningが表示されるのはどうも気になります。 ↓参考までにquitプログラムの内容です。 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit())); button->show(); return app.exec(); }
>>615 え〜と・・・、何が足りなかったんでしょう・・・
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
>throw std::excepton(); は出来ましたけど、 >throw std::excepton("error!"); はコンパイル通りませんb 普通にthrowでエラー文字列投げて、 アプリケーションのエラーハンドラで一括キャッチしたいのですが、 Qt Creatorではどうthrow/catchを書けば良いですか?
throw std::exception("error!");
std::exception は abstruct class だから instance 化できない
621 :
618 :2010/03/10(水) 18:04:45
もうひとつ分からないのは、 >throw std::runtime_error が無い????? QtってWindozの場合、実質コンパイラはgccですよね? 無い筈ないよー。
622 :
618 :2010/03/10(水) 18:10:16
少し思い出したけど、数値や文字を投げる場合は、 >throw 1; >throw "moji"; でしたね。 C++ Builderみたく、 >thow Exception("aaa"); としたい(ま、標準じゃないエラークラスのとこはいまいちですが)のですが、 Qtな方々は、 ふつー何をthrowして、一括catchはどうやるのが一般的でしょう?
623 :
618 :2010/03/10(水) 18:17:10
連投スマソ 621の >throw std::runtime_error("moji"); の問題は、 >#include <stdexcept> で解決しました。
C++の勉強して出直して来い
Qt4.6.2( Win版 )で、 QLineEdit上の日本語入力がめちゃくちゃ重いです。( QTextEdit上では普通に入力できます ) QtDemoでもなります。 Item Views -> Simple Widget Mapperのデモが分かりやすいです。 他の方もこうなりますか?
Qtで画像ファイルを読み込んでウィンドウに表示することって可能ですか? いくらprintfしても文字しか表示されません。
#include <qt.h> main{ printf("gazou.bmp"); } としてもエラーになります。
Win版QtはIMEがらみがなんか不安定だよね QtCreatorでもよくおかしくなるし、QTextEditでもいきなり落ちたりするから怖い
IMが鬼門なのはQtは昔からだよなぁ。Linuxでもな。
なんだ、使い物にならないのか
せやで!
非常に細かいことなのですが、Visual Studioでプロジェクトを作成するときに Qt4 Projectsから作ると環境変数のQTDIRが自動設定されるようなのですが、 これがいったいどこに設定されるのか分かる人いますか? プロジェクトのプロパティとか見てもコマンドラインで展開されているのは 確認できるんですが、設定箇所を見つけることができません。
入力だけに限らず変換が遅いみたい QImeEvent関連の処理が甘いんだろうか? Qtランタイムごとプロファイルとって見れば一発だけど、俺msvc用のプロファイラもって無いんだよな…
635 :
634 :2010/03/11(木) 05:39:40
>>634 は
>>625 についてです
6.5.4なら問題無かった
次のバージョンでは直ってることを祈ろう
6.5.4って?
Visual Studio
>>637 VS6(でコンパイルしたQt)だとIME遅くならないけど,2008だと遅くなるってこと?
話がよく見えない。
横から qt-win-opensource-4.6.2-mingw.exe で同じようにLineEditだけ遅いのを確認
漏れも良くわからん
C++ Builder/VCLだと、 アプリケーションクラスにOnExceptionっていうthrowされたものを一括で受けるイベントハンドラがありますが、 Qtには無いですか? >Qtで独自実装しようにも、 >int main(int argc, char *argv[]) >{ > QApplication a(argc, argv); > My_Win w; > w.show(); > return a.exec(); >} だと、一括catchできませんね。 「My_Win w;」の中に一括イベントハンドラがあるかないか。
> > > > > > > >どゆこと?
644 :
634 :2010/03/11(木) 19:17:29
OWLを思い出した
会社の課題で4月1日までに、Rubyで何かを作らないといけないんだけど Ruby + Qt4で作ったアプリを*.exeに固められる? まだ、Rubyの文法もわからん
exerb
649 :
デフォルトの名無しさん :2010/03/11(木) 22:41:44
この更新の勢いならweb環境も制覇してくれそう
春休み最強
653 :
642 :2010/03/12(金) 08:50:21
>>643 >a.exec();
を囲んで一括catchして、
そのエラー処理でもう一回「a.exec();」するってことは出来ないですよね?
>>653 母国語が通じるサイトで質問し直した方が良いよ。
>>642 Qtは例外をthrowしないんじゃなかったけ?
実行時に何かエラーがあると,assertでエラーメッセージのダイアログが出る。
それとも自分でthrowしたものを一括でcatchしたいと言う話?
656 :
642 :2010/03/12(金) 11:32:10
>それとも自分でthrowしたものを一括でcatchしたいと言う話? こちらです。
C++の勉強して出直して来い
>>653 > >a.exec();
>
> を囲んで一括catchして、
> そのエラー処理でもう一回「a.exec();」するってことは出来ないですよね?
何がしたいんだかわからん。何でcatch節の中でもう一回a.exec()するの?
俺はC++ Builder使いだけど,OnExceptionなんて使ったことないよ。
要するにどこでも catch されなかった例外をつかまえて処理するんでしょ。
ただの外部例外防止の意味だけのようにしか思えん。
どこでもcatchされない例外をthrowするようなコード書くほうが悪いと思うが。
普通に try 〜 throw 〜 catch で何か都合が悪いの?
おわらないようにしたいんじゃね?でーもんとかwww
春休みですね。
661 :
642 :2010/03/12(金) 13:11:35
>>659 おわらないようにしたいんじゃね?
その通りでつ。
C++ Builderだと、throw してcatchされなくてエラーメッセージボックスが出るだけですよ。
その動作を変えたい場合は、アプリケーションオブジェクトのイベントハンドラで先に例外catchできまつ。
662 :
642 :2010/03/12(金) 13:18:03
C++ Builderのmainはこんな感じでつ↓ WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { try { Application->Initialize(); Application->MainFormOnTaskBar = true; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; }
qt creatorってけっこう完成度高いな
2.0入れてみた オプションを弄ろうとしただけで落ちたwww
TP判とはいえあまりにも簡単に落ちすぎw
プロトタイプ宣言をソースにもっていくときって やっぱコピペですか?
667 :
デフォルトの名無しさん :2010/03/13(土) 12:41:11
>>35 それ間違ってるよ
その条件だと全てのソースを公開する必要がある
LGPLでソース非公開で良いのは、動的リンク且つDLLを同梱しない場合に限る
DLLを同梱しない場合 なんて制限書いてあったっけ?
Qt Creator 1.3.0をソースを本家から取得してコンパイルしています。 OSはFreeBSDで、既にportsでqt4やqmakeをインストールしてあります。 Qt Creatorの qmake-qt4 -project まではうまく通ったのですが、次のmakeの段階で /usr/local/bin/lrelease:No such file or directory *** Error code 1 というエラーコードを吐いて終了してしまうバグに見舞われています。 確かに /usr/local/bin/lrelease というファイルは存在せず、代わりに /usr/local/bin/lrelease-qt4 というファイルならありました。 そういえば qmake という基本的なファイルも無く、代わりに qmake-qt4 というファイルで プロジェクトファイルを生成していました。portsでインストールしたからでしょうか? こういうエラーで詰んだ場合はどうすればいいでしょうか?
symbolic link作ればいいだけなんとちゃう?
手動でシンボリックリンク作成ですかorz・・・ それにしてもportsからインストールするとなぜ実行ファイルは qmake lrelease でなく、 qmake-qt4 lrelease-qt4 なんでしょうか?
名前がぶつかるから
え( ´・ω・)?
お前がそう思うならそうなんだろう お前の中ではな
そうなのか。知らなかった。
なんでしょうか?
逝ってよし
679 :
デフォルトの名無しさん :2010/03/14(日) 17:56:34
>>678 C++用で充分にC++に対応できているメモリリークチェックツールで調べられます。
レスありがとうございます。 今まではVCに標準で付いていたcrtdbg.hを使うやり方だったのですが、 それだとうまくいかないようだったので。 他にもそういうツールがあるのですね。調べてみます。
681 :
デフォルトの名無しさん :2010/03/14(日) 21:03:22
WinXP 環境に、
http://qt.nokia.com/downloads-jp から Qt SDK: 包括的な開発環境 をダウンロードし、セットアップしました。
Qt Craetor を起動すると、マウスクリックが1回しか効きません。
Qt Creator 以外の部分をクリックすると、1回だけマウスクリックが効きます。
これって回避方法があるのでしょうか?
OS再インストール
/*! を使うとコメントをドキュメント化できるんでしょうか? うまくぐぐれなくてorz 使用方法等のリンクあれば貼ってもらえないでしょうか?
.proファイルに使える設定項目の一覧ページってどこかにないですか?
qtの過去バージョンってどこで落せるの? Qtライブラリのソースを求められたらどうすれば良いの?
>>689 サンクス、このアドレス載せておけば大丈夫って事かな
>>691 ありがとうございます
思ってたよりおおいな・・
rubyでqt4やっている人居ますか?
はい
434 デフォルトの名無しさん [sage] 2010/03/16(火) 17:50:56 ID: Be: connect(angle, SIGNAL('valueChanged(int)'), cannonField, SLOT('setAngle(int)')) なんで、rubyなのにこんなこと出きるんだよ〜
'で囲むのがださい
698 :
デフォルトの名無しさん :2010/03/16(火) 21:42:37
>>693 RubyのQtは、完成度低過ぎるので捨てました。
PythonはPyQt4.7ですごくなったよな self.foobtn.clicked.connect(foo_clicked) みたいに、signalに . でアクセスできる。
最近Qtみたいな統合環境をわざわざLLでやるメリットが感じられない。 .netのC#に対するVBみたいなものなのかな?
コンパイル時間かかるじゃん
702 :
693 :2010/03/16(火) 23:12:17
ひとまず、QMainWindowを継承してメニューを追加する所までは作る事ができました 専用のIDEの有無ってデカいなと思いました ところで、QMainWindowのセントラル・ウィジェットってどうやって作っていますか? やっぱりQWidgetを継承して作った方がいいですかね 質問ばっかりでスマソ
>>700 ちょっとしたのを簡単に書けて便利だよ。
特にGUI以外の部分がLLの方が圧倒的に楽に作れるときは。
けど、C++の関数ほぼそのままLLに持ち込んだだけのものがLLでも実用に耐えうるって、
相当使い勝手いいんだなぁと再認識させられる。
LLってなんぞ?
>>703 そうだね
mocのおかげでC++とは思えないほどのLLとの親和性がある
LLでプロトタイプを作って必要なところだけC++で置き換えとか構想出来る
>>708 そういう使い方したいんだけど、PyQtで書いたクラスをC++から呼び出したり、
逆にC++で書いたクラスをPyQtから呼び出したりって、どうやるのが簡単?
LL言語のGUIアプリの作りにくさを考えればQtを使いたくなるよ
Rubyのことか
PythonだとクロスプラットフォームでオープンソースなGUIツールキットは wxPython, PyQt, PyGTK 全部あって、全部よくメンテナンスされてるんだけど、 WindowsでのルックアンドフィールがWindowsネイティブに近い順に PyQt > wxPython >>> PyGTK なんだよな。 RubyだとよくメンテされているGUIツールキットのバインディングってRubyCocoaくらい?
RubyはGTKらしい
716 :
デフォルトの名無しさん :2010/03/17(水) 13:01:18
Qt Creator 2.0.0 Tech Preview: Windows (.exe, 53 MB) をセットアップしたら 中身が 1.3.81 だったぞ
>>716 たしかにw
ダウンロード間違えたかと思ってリンク見直したw
おれもやられたっておもったが、ヘルプ見るとVersion 1.3.81 (2.0.0 alpha)ってことみたいね。
720 :
デフォルトの名無しさん :2010/03/17(水) 16:14:06
Qt Creator のソースをダウンロードしたので、プラグインの一部を修正してビルドしようと 思うのですが、その方法がよくわかりません。 どこかにその方法を説明してあるところはありますでしょうか?
あきらめろ
722 :
720 :2010/03/17(水) 16:32:38
qt-creator-1.3.1-src にある qtcreator.pro を開いて、ビルドを行うと、 collect2: ld returned 1 exit status となって ビルドが止まってしまいます。 どうしたらいいのでしょうか? 環境は Windows XP, Qt Creatot 1.3.1 です。
以前,Qt Creatorをソースからビルドしたことがあって,今はもうソースファイルもダウロードした パッケージも消してしまった(ディスクの容量枯渇w)ので具体的にはわからないけど, ソースパッケージを解凍した中に,ビルド方法が書いてあるテキストファイルがない?
724 :
720 :2010/03/17(水) 16:49:09
readme に Compiling Qt Creator という部分があって、 ==================== You need Qt 4.6 to build Qt Creator. We recommend that you build Qt Creator not in the source directory, but in a separate directory. To do that, use the following commands: mkdir $BUILD_DIRECTORY cd $BUILD_DIRECTORY qmake $SOURCE_DIRECTORY/qtcreator.pro make (or mingw32-make or nmake, depending on your platform) と書いてあった。(続く)
725 :
720 :2010/03/17(水) 16:51:52
んで、c:/qt/2010.02.1/qt/bin にパスを通して、 qmake $SOURCE_DIRECTORY/qtcreator.pro を実行したら、$BUILD_DIRECTORY に Makefile ができた。 んで、mingw32-make を実行すると、エラーがいっぱい出た。 === mingw32-make[4]: *** [debug/moc_multitask.o] Error 1 mingw32-make[4]: Leaving directory `d:/Qt/qt-creator-1.3.1-src/build_dir/src/lib s/qtconcurrent' mingw32-make[3]: *** [debug] Error 2 mingw32-make[3]: Leaving directory `d:/Qt/qt-creator-1.3.1-src/build_dir/src/lib s/qtconcurrent' mingw32-make[2]: *** [sub-qtconcurrent-make_default-ordered] Error 2 mingw32-make[2]: Leaving directory `d:/Qt/qt-creator-1.3.1-src/build_dir/src/lib s' mingw32-make[1]: *** [sub-libs-make_default-ordered] Error 2 mingw32-make[1]: Leaving directory `d:/Qt/qt-creator-1.3.1-src/build_dir/src' mingw32-make: *** [sub-src-make_default-ordered] Error 2
エラー読んでる? その箇所張られてもどうしようもないんだけど
エラーメッセージはどこにあるんだろう? === g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT - DBUILD_QTCONCURRENT -DIDE_LIBRARY_BASENAME=\"lib\" -DWITH_TESTS -DQT_NO_CAST_TO_ ASCII -DQT_DLL -DQT_TESTLIB_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT - I'c:/Qt/2010.02.1/qt/include/QtCore' -I'c:/Qt/2010.02.1/qt/include/QtGui' -I'c:/ Qt/2010.02.1/qt/include/QtTest' -I'c:/Qt/2010.02.1/qt/include' -I'../../../../sr c/libs' -I'd:/Qt/qt-creator-1.3.1-src/tools' -I'c:/Qt/2010.02.1/qt/include/Activ eQt' -I'debug' -I'../../../../src/libs/qtconcurrent' -I'.' -I'c:/Qt/2010.02.1/qt /mkspecs/default' -o debug/moc_multitask.o debug/moc_multitask.cpp g++: CreateProcess: No such file or directory === これ?
C:\Qt\2010.02.1\mingw\bin にパスを通したら、コンパイルが始まりました。 どうもお騒がせしました。m(_ _)m &アドバイスありがとうございました。
もしかして,環境変数INCLUDEとかLIBに何か設定してない? VC++も使ってると設定されてると思うんだけど。 Qt CreatorじゃなくてQtをビルドした時なんだけど,これらの環境変数が設定されていると 勝手にVC用のmakefileを作ってくれて,MinGWでコンパイルするとエラーになるトラブルに 出会った。 コマンドプロンプトで一時的に, set INCLUDE= set LIB= として環境変数をクリアした状態でやったらうまく行ったよ。 同じかどうかわからないけど参考まで。 あともちろんMinGW関係の環境変数はちゃんと設定されてるよね? CPLUS_INCLUDE_PATH とか,LIBRARY_PATH とかいくつかあるけど大丈夫?
>>729 アドバイスありがとう。
VS2008 インストールしている環境なので、環境変数INCLUDEとかLIBとか設定されている。
また、MinGW関係の環境変数は設定していない。
しかし、上記の対策を何も行わなかったにも関わらず、mingw32-make release を実行すると、
bin の下に qtcreator.exe が、lib/qtcreator/pluging/Nokia の下にプラグインDLL、pluginspec ファイルができた。
んで、qtcreator.exe を起動できて、プラグインの修正が反映されていることを確認した。
どうやらビルドはうまくいったみたいだ。
731 :
デフォルトの名無しさん :2010/03/17(水) 21:34:43
PythonバインディングでPySideを使ってる人はいないのかな? 俺はWindowsがサポートされてから試してみようかなと思ってる
int main(int argc, char*argv[]) { QDateTime dt(QDate(2010,3,15),QTime(0,0)); qDebug() << dt.time().setHMS(3,0,0); qDebug() << dt; return 0; } true QDateTime("月 3 15 00:00:00 2010") となるんですがどこに問題があるんでしょうか?
新しく出たqt4.6.2.1 macでビルド失敗 同一症状の人いる?
dt.time().
QObject::startTimer: QTimer can only be used with threads started with QThread 何これ? QTimerはQThreadと一緒に使うことができない、って訳でいいのかな
節子それちゃう
738 :
デフォルトの名無しさん :2010/03/18(木) 11:04:57
おいおい
80/20の法則、あるいは70/30の法則ってのがある プログラム全体の実行速度の70%〜80%を20%〜30%の部分が占めている という有名な法則だ 要するに全部書き上げてからプロファイラなどで速度のボトルネックになっている 部分を20%〜30%程度書き換えるだけで十分速くなるという事だな
試しに、働いている2割のプログラムと、怠けている8割のプログラムを分けてみます。 するとまじめに働いていた集団の8割が怠け始めるそうです。 反対に、怠け者のプログラムの集団では、2割が働き始めるそうです。
742 :
736 :2010/03/18(木) 11:14:11
>>737 >QTimerはQThreadと一緒に使うことができない
QTimerはQThreadと一緒に(唯一)使うことができる かも
これだけじゃ、どうしょうも無いだけど
743 :
736 :2010/03/18(木) 11:18:25
もしかして、イベントループを開始します って書き忘れていたからかも
>>736 Qt 4.6.2のヘルプ見たけど,そのような記述は見つからない。
どこに書いてあったの?
745 :
744 :2010/03/18(木) 11:28:21
ああ,ゴメン。ビルドあるいは実行時のエラーのことか。
746 :
736 :2010/03/18(木) 11:37:44
絶対、app.exec();をしないとダメなんだね
だから、CLIのプログラムなのにquit()を呼び出さないとダメなのか
ちょっと、面倒くさいね
>>744 やっぱり、イベントループを書き忘れていたから出たエラーでした
すいません、わざわざレスしてもらったのに
コンストラクタで例外を投げたくなる処理を書きたくなる時あるじゃん Qtで書いた時は、どんな感じで実装している?
>>734 解決したので自己レス
zlibを1.2.4_0にアップデートしたせいでした。
zlibバージョンを1.2.3_4に戻したらビルドできるようになった。
QNetworkRequestでhttpをしているのですが、 他のURLの飛ばされた時の処理も自分で書かないとダメなんですか?
はい
751 :
749 :2010/03/19(金) 15:10:31
Qt Creator でインクルードパスはどうやって追加しますか?
proファイルに INCLUDEPATH = /path/to/include
dクス 画面からは追加出来ないんですか?
>>754 > 画面からは追加出来ないんですか?
Qt Creatorでの設定は.proファイルを編集するのが基本。
最初は物足りなく感じるけど,慣れてくるとGUIでチェックボックスやらラジオボタンやら
が沢山並んでいる中で設定するよりスッキリしててこれはこれでアリだなと思うようになった。
ファイル内にコメントも書けるしね。
なるほど、.proファイルもソース扱いでつね。 INCLUDEPATHと書いたら、インテリセンスも動いて色が変わったぽいw
757 :
デフォルトの名無しさん :2010/03/19(金) 21:36:39
>>736 >QObject::startTimer: QTimer can only be used with threads started with QThread
>何これ?
言っている通り。どう使えばよいかと教えてくれている。
>QTimerはQThreadと一緒に使うことができない、って訳でいいのかな
使える。QTimerのリファレンスに書いてある。
ありがとうございました
どういたしました
Dialog without Buttonでダイアログを作り、OKとキャンセルのボタンを貼り それぞれのボタンのon_button1_clicked()をvoid からintに変更しスロット内で return QDialg::Accept; と QDialog::Reject;を書いたんですが 常に0しか返されません。 QDialogの方で何か処理されてるようですが、 どうすれば良いでしょうか?
日本語でどうぞ
日本語を学んでください
ドキュメント読むには英語学んだほうがいいとおもうけど・・
>>763 その前に母国語を学んだ方がいいだろjk
FreeBSD8.0-Releaseでpackageから ・qt4-4.5.2 ・qtcreator-1.2.1 ・qmake-3.3.8_1 の3つをインストールしました。 環境変数 QMAKESPE には freebsd-g++ を設定しました。 コンソールからのコンパイルは問題なくできるようになったのですが 問題はQtCreatorからのコンパイルでしてビルドしようとすると「コンパイル出力」ウィンドウに 有効なQtバージョンが設定されていません。ツール/オプションで1つ設定してください。 プロジェクト test をビルド中にエラーが発生しました ビルドステップ 'QMake' を実行中 ビルドを中止しました。 というエラーが発生してしまいます。 実際にツール/オプションの「Qtバージョン」を確認してみると確かに 自動検出したQt <見つかりません> と表示されていてQtの検出に失敗しているようです。 コンソールからのコンパイルは問題なくできているのでおそらくQt自体のインストールには 成功していると思うのですが、QtCreatorでビルドできない理由は何でしょうか?
またFreeBSDかよ
>コンソールからのコンパイルは問題なくできているのでおそらくQt自体のインストールには >成功していると思うのですが、QtCreatorでビルドできない理由は何でしょうか? 有効なQtバージョンが設定されていません。ツール/オプションで1つ設定してください。
Mac版Qt4.6.2/QtCreator1.3.1でバグっぽいのが。 QtCreator上でソースコード編集中に日本語入力すると余分に改行が入る。 手順的には 1.日本語入力( 下線状態 ) 2.returnで確定 3.その後カーソル移動するとなぜか改行 日本語入力中( 変換未確定中 )でもキーイベントが送られちゃってる気がする。 ちなみに、demoのテキストエディタでもなったから、Mac版Qt自体のバグっぽい。
>>767 > 有効なQtバージョンが設定されていません。ツール/オプションで1つ設定してください。
具体的にはどのフォルダを設定したらよろしいでしょうか?
デフォルトの「自動検出」でひっかからないのも不思議です・・・
770 :
デフォルトの名無しさん :2010/03/21(日) 20:53:54
>>768 試してみようとしたら、MacのQt 4.6.2のqtdemoでボタンをクリックしても先に進まない。
4.6.1も同じ。4.6.0はうまく行く。
そこで、直接4.6.2のqtdemos/texteditを動かして、手順通りにやってみたけれど再現できなかった。
QNetworkAccessManagerを同期で使うにはどうやるんですか?
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl("
http://xxxxx.com ")));
//この関数内でそのまま
QByteArray ba = reply->readAll();
//とかしたい
マルチスレッド自体がよくわかっていないのでまずはそこから勉強する必要があるのかも
しれないのですが、とりあえず上記のことは可能なのでしょうか?
可能ならヒントでいいのでお願いします。
一連の getとpost の連鎖処理になるのでSIGNALとSLOTで書いてたらキリがないし
何もわざわざ非同期にするほどの重い処理でもないので同期でやりたいのですが、
もし不可能なら、そういうのを書く場合の定石ってあるのでしょうか?
自動検出ってたしかPATHを見てるだけじゃないか?
政府と官僚を盲信しすぎだ たった一握りの人間が産業の興廃を決めるのは共産主義 政府が金銭的に支援すると企業が消費者のことではなくて 役人のご機嫌取りに走るから産業の成長を阻害するんだよ
>>771 whlie (!reply->isFinished())
QCoreApplication::processEvents();
Qtをキュートと呼ぶのに抵抗を感じるのはおれだけですか
まぁ、ね。 でも、検索のしにくさに比べたら、どうということはないなぁ。
cute だって最後の t は無声音 (kju:t) だぞ むしろそのまんま
779 :
デフォルトの名無しさん :2010/03/22(月) 02:08:42
>>776 cuteとcue teaのどっちでもいいんだよ。
Qt Creatorを使っている人、 解像度どれくらいのディスプレイ使ってる?
wqxga
wsxga+
最近.netからQtに引っ越したんですが・・・ コレはるかに.netより使いやすい・・・
ですね
787 :
デフォルトの名無しさん :2010/03/22(月) 10:44:08
それは間違いないな
まあQtスレだしな。
Qt - Wikipedia
ttp://ja.wikipedia.org/wiki/Qt > QtはGTK+やMFC等、他の標準的なグラフィックツールキットに比べて、
> もっとも後発であることもあり、以前から存在するライブラリーの
> よいところを集めたアーキテクチャーとなっている。
> そのため、商業アプリケーションでの採用例が多い他、オープンソース版も
> 用意されているおかげで、KDEという高品質なデスクトップ環境も開発された。
> OpenGLやSVG、XMLといった最新技術にも対応している他、
> 日本語を含む多バイト文字入力フレームワークへも対応している。
かなり昔、QtはQuickTimeのパチもんだと思ってた
>>788 .NET Frameworkの方が後発だけどなw
>>789 検索は -QuickTime しないとウザイよね
gtkの方が先に出てたんだっけ。
qtで作成した実行ファイルのサイズの大きさについて質問です。 仮にwindowsのexeとした場合、 cやc++などでwinapiを叩いてguiアプリ作った場合に比べて、どれくらいのサイズ比になりますでしょうか?
qt4ってqt3と全然違うじゃん qt4は0から作り直したのか?
QtRubyで#!ruby -Kuを指定しても文字化けするんですが エロい人教えてください
796 :
765 :2010/03/22(月) 13:53:14
あの・・・何かアドバイスは無いでしょうか・・・
>>792 DLLに分けたら同じくらい小さくなるよ
>>793 >>799 レスありがとうございます。
実際試してみないと具体的な数字はやっぱり出てこないですよね。
QtCore4.dllとexeを別にすればかなり最適なサイズになるようで一先ず安心しました。
>>798 QtGuiやQtCoreを別にして良いんだったら
exe自体は全然小さいよ
でも、QtGui4.dllがデカイw
>>796 FreeBSD以外のプラットフォームにする
>>796 Qt Creator の自動検出は PATH にある qmake (or qmake-qt4) が正常に動く場合。
QMAKESPEC は見てないので、QMAKESPEC が必要な環境では自動検出できないし、
マニュアルで指定してもだめ。
mkspecs のあるディレクトリで
ln -s freebsd-g++ default
すれば QMAKESPEC が必要なくなるのでうまくいくかもしれん。
freebsd の package の問題。
>>796 FreeBSD使った事ないんでよく解らんけど
パスが通ってないだけなんじゃないの?
コンソールで起動したときには
*rcにQtのインストールパスが書いてあるんで大丈夫とか
804 :
765 :2010/03/22(月) 16:22:28
>>802 > Qt Creator の自動検出は PATH にある qmake (or qmake-qt4) が正常に動く場合。
>>803 /usr/local/bin/qmake
をQtCreatorのオプションに直接登録してみましたがそれでも認識されませんでしたorz・・・
Qt一式を全てpackageからインストールしているのに問題が発生すると言うことは
やはりFreeBSDのパッケージの方に問題がありそうですね・・・
qt-labs.jpの中の人にインストール作業のFreeBSD編も作ってもらえよ
806 :
795 :2010/03/22(月) 16:54:41
ごめんシステムが勝手にEUC-jpに変更していたorz
QMainWindowでメニューを作るとき、'&File'てするとショートカットも作られるじゃん でも、日本語の場合はどうやってやればいいの?
808 :
デフォルトの名無しさん :2010/03/22(月) 17:13:17
810 :
807 :2010/03/22(月) 17:41:05
どうしてFreeBSDのpackagesに間違いが無いと勘違いするひとが後を絶たないのはなぜ
>>804 それって、qmakeまで入れるの?
/usr/local/bin/だけで大丈夫じゃないっけ?
QVariantって何するクラスなのか、いまいちわからない 教えてエロい人!!
ソースコーディング時点で型が決まらないデータを扱うときに使う
816 :
814 :2010/03/22(月) 21:00:14
>>815 >コーディング時点で型が決まらないデータ
これって、コンパイラに依存するデータ型ってことでおk?
文字列、整数、実数などいろいろな型の値を扱えるいわゆるバリアント型変数クラス。
818 :
814 :2010/03/22(月) 21:04:53
>>817 詳しい所まで、解説ありがとうございました
819 :
817 :2010/03/22(月) 21:06:17
レスがかぶった。 コーディング時点で型が決まらないと言うより、何でもブチ込んでおける便利な型と 考えていいんじゃないか? 例えば、Object::setProperty() の第2引数はQVariant&なので、QObjectに好きな型の 変数を名前をつけてプロパティとして関連付けておける。
820 :
765 :2010/03/22(月) 21:21:20
>>813 > それって、qmakeまで入れるの?
> /usr/local/bin/だけで大丈夫じゃないっけ?
失礼しました
/usr/local/bin/
です。上記のように入力しましたが結果的にQtの検出には依然として失敗し続けています。
う〜む・・・
FreeBSDのコミュニティに報告した方がいい案件なんでしょうか・・・
822 :
デフォルトの名無しさん :2010/03/23(火) 01:46:14
>>819 QVariantで扱える型を自分で追加できるのも便利です。
823 :
765 :2010/03/23(火) 02:17:46
>>821 >
>>802 の後半は試したか?
はい、試してみましたがあいにくうまくいきませんでした・・・
824 :
デフォルトの名無しさん :2010/03/23(火) 09:10:56
Qt には QVector など、STLのコンテナと同等のものがありますが、 それには何か明確な理由があるのでしょうか?
QtのオブジェクトはQtがガベコレしてくれるから
>>824 foreachを書ける、ストリームにシリアライズ可能とか?
実質的に文字コードを気にしなくてよくなるのはありがたいなぁ
Qt Creatorでメインプロジェクトの中に複数のサブプロジェクトを含めた構成にしたいんだけど どうやってCreatorで操作すればいいんだろうか。 例えば以下のような構成のプロジェクト構成にしたい。 Hoge <-メインプロジェクト +-- GUIアプリケーション(Hoge/HogeMain) <-サブプロジェクト1 +-- C++ライブラリ(Hoge/HogeLib) <-サブプロジェクト2 今Creatorから上記の3つのプロジェクトを作って、保存後にメインプロジェクトを開いてみたけど サブプロジェクトが含まれてなかった。。。
ありがとうございました
831 :
828 :2010/03/23(火) 12:51:56
>>829 なるほど!.proファイルを自分で編集しないとダメなのね。。。
ありがとう。
832 :
829 :2010/03/23(火) 15:18:10
ちょっと説明不足だったと思うので
>>828 の例で補足すると,
1.まずHogeディレクトリの下にサブディレクトリとして/HogeMainと/HogeLib,
ついでに/releaseと/degugも作っておく。
2.Hogeディレクトリの中に複数プロジェクトをまとめるためのHoge.proを作って,
そこに
>>829 のように記述する。ただ,普通はライブラリの方を先にビルドして欲しい
はずなので順番を変えて,
SUBDIRS = HogeLib \
HogeMain
とする。またここで指定した順番どおりにビルドするための指令として,
CONFING += ordered
も書いておく。
3./HogeLibにHogeLib.pro,/HogeMainにHogeMain.proを置く。これらは通常のプロジェクト
用の.proと同じ内容になるが,以下のようにして出力先を Hoge/debug と Hoge/release に
しておく。
CONFIG(debug) {
DESTDIR = ../debug/
} else {
DESTDIR = ../release/
}
こうしておけば,アプリとライブラリを一緒にデバッグできるようになります。
833 :
829 :2010/03/23(火) 15:19:24
>>832 ごめんタイポした。
× CONFING += ordered
○ CONFIG += ordered
834 :
828 :2010/03/23(火) 15:31:34
>ついでに/releaseと/degugも作っておく。 gが全角`o'
836 :
829 :2010/03/23(火) 17:08:14
debugがdegugになってるのにも気付いて欲しかったw
QFrameって何すんの?
Qtで、アプリケーションにフォーカスがないときに、キーボードイベントを とる事(グローバルフック?)って出来ますか? 今押されてるキーを表示するようなユーティリティを作ろうと思ってます。
840 :
デフォルトの名無しさん :2010/03/23(火) 21:08:27
普通はそういうのは作らんなぁ 端末にバインドしてない keylogger みたいなもんか
QtRubyってQThread無いの? 教えてエロい人!!
Rubyってネイティブスレッド使えたっけ?
ui->setupUi(this); QGraphicsBlurEffect* blur_effect = new QGraphicsBlurEffect(this); blur_effect->setBlurRadius(10); QPixmap *image = new QPixmap(tr(":/images/aaaa.jpg")); ui->label->setPixmap(*image); ui->label->setFixedSize(image->size()); ui->label->setGraphicsEffect(blur_effect); Windows版だと上手く動くのに、Mac版だとうまく動かない(エフェクトがかからない)んだけどなんでだろ 環境 Windows: Windows Vista Qt 4.6.2 Mac: Snow Leopard Qt 4.6.2
PythonじゃなくてRuby選んでる時点で、いろんなライブラリの対応が二級市民になる ことを覚悟してるんだろ?wxもgtkもさ。
>>760 スロットはvoid型しかできません。
そうしたいなら、signalを定義してスロットからそのシグナルを発生させてください。
signals:
void button1_clicked(int);
private slots:
void on_button1_clicked(){
...
// return QDialog::Accept;
emit button1_clicked(QDialog::Accept);
...
// return QDialog::Reject;
emit button1_clicked(QDialog::Reject;
...
}
847 :
デフォルトの名無しさん :2010/03/24(水) 08:32:35
>>846 > スロットはvoid型しかできません。
戻り値があっても構いません。
スロットは、メタオブジェクトにその情報が格納され、シグナルと接続でき、メタ情報からの
メソッド呼出しなどができる他は、普通のメソッドと同じです。シグナルによって呼ばれた場
合には、戻り値が使われないだけで、単にスロットをメソッドとして呼出して、戻り値を得る
ようにするのは、問題なくできます。
848 :
842 :2010/03/24(水) 08:39:08
>>845 知ってるよ
でも、自分では選択権が無いもんでね
横からですが ありがとうございました
CFLAGSに"-D_USE_32BIT_TIME_T"を追加したいのですが、 .proにはどのように書けば良いのでしょうか? 今はMakefileのCFLAGSに、直接手で追加しています…
851 :
デフォルトの名無しさん :2010/03/24(水) 12:31:49
>> 842 ありません。
>>850 普通に DEFINES += 使えばいいんじゃね?
あとは QMAKE_CFLAGS_DEBUG とか QMAKE_CFLAGS_RELEASE とか。
Assistantで 「qmake Variable Reference」探してみて。
854 :
デフォルトの名無しさん :2010/03/24(水) 15:07:31
Qt Creator プラグインの開発を始めたので、近日中に公開しようと考えているのですが、 どこで公開するのがいいのでしょうか? おすすめの場所があったら教えてください。
855 :
850 :2010/03/24(水) 15:41:15
>>851 それじゃ、スレッド使った処理は書けないの?
860 :
デフォルトの名無しさん :2010/03/24(水) 23:34:57
861 :
839 :2010/03/25(木) 13:21:36
>>840-841 ありがとうございます。環境依存になってしまうって事ですね。
今回はWindowsを対象にしてるので、WinAPIで考えてみることにします。
ありがとうございます
PyQtでself.trを使うとUTF-8のとき文字化けします espおながいします
864 :
デフォルトの名無しさん :2010/03/26(金) 19:23:17
>>863 QTextCodec.setCodecForTr(QTextCodec.codecForName('UTF-8'))とすると文字化けせずに表示されました。
Designerで、一旦グループボックス内に、ラジオボタンなどを配置すると 後から高さや幅を変更できません どうにかならない?
868 :
デフォルトの名無しさん :2010/03/28(日) 11:13:12
QNetworkAccessManager *manager; でpostするときにpostするデータを QUrl params; params.addQueryItem("id", id); params.addQueryItem("password", pw); QByteArray paramdata(params.toString().toAscii()); manager->post(request, paramdata); してるんですが、このさいparamdataには"?id=hoge&password=hage"と 先頭に?が入るようで、これがpost()の際に邪魔になるようです。 ?を毎度paramdataから取り除くの面倒なんですが 最初から?がダブらないようにするにはどうやるんでしょうか?
QString params = QString("id=%1&password=%2").arg(id, pw); QByteArray paramdata(params.toAscii()); じゃダメなの?
いや、全然ダメじゃないんだけどせっかくaddQueryItem()とかいうのがあるんで これ使ってできるはずなんじゃないかな?と
MinGW版でphonon使うとogg再生できないんですけど みなさんもそうですか?
ogg以前にMinGW版でPhonon呼び出せなかった気がするんだが PhononはDirectShow9を要求するけどMinGWはそれをコンパイルできないから使えないって話をどこかで読んだ
file = new QFile(media.fileName(), this); file->open(QFile::ReadOnly); in.setDevice(file); //inはQDataStream型 char* buf = new char[4]; sampleBasePos+=in.readRawData(buf, 4); qWarning() << sampleBasePos; if(strcmp(buf, "RIFF")) { qWarning() << "Not RIFF"; qWarning() << buf; qWarning() << strlen(buf); return; } 以下Wavファイルのヘッダ読み込み処理 } という感じのメディアソースが変更されたら呼ばれるスロットを作っているのですが 実行してみると in.readRawData(buf, 4);で4バイト分ファイルから読もうとしているのに対して qWarningの出力には 4 Not RIFF RIFF( 9 となぜか"RIFF" + 文字化けした何かというように9バイト読み込まれています。 文字化けの内容は実行するごとに変化し、Warningに全くひっかからずに最後まで通ってしまうこともあります。 原因は一体何なのでしょうか?
'\0'で文字列を終わらせてないから。 読み込みは正しく4バイトだけ読み込まれてると思うぞ。
なるほどありがとうございます。 長文すいませんでした。
SIGNAL-SLOTでSLOT側の関数で SIGNALを発したオブジェクトが何であるかを取得できるでしょうか? 念頭においてるのはpushButtonのclicked()です。
QObject::sender() で取得できる。 QPushButton *button = qobject_cast<QPushButton*>(sender()); とかやればよい。
>>880 即レス大変感謝です
思うようにいきました
つか、C#の delegateでsenderとかよりシンプルでますます気に入りますたw
よこからありがとうございました
C++ とは思えないシンプルさです moc の追加仕様なんて気にしたら負けです 本当にありがとうございました
QtCreatorのエディタの色付けの「型」って classじゃなくてプレフィックスがQの文字列なんだね ためしにQTaroとかでも紫色になるし・・
>> 886 src/plugins/cppeditor/cpphighlighter.cpp void CppHighlighter::highlightWord(QStringRef word, int position, int length) { // try to highlight Qt 'identifiers' like QObject and Q_PROPERTY // but don't highlight words like 'Query' if (word.length() > 1 && word.at(0) == QLatin1Char('Q') && (word.at(1).isUpper() || word.at(1) == QLatin1Char('_') || word.at(1) == QLatin1Char('t'))) { setFormat(position, length, m_formats[CppTypeFormat]); } }
それだとQtaroもQJiroもQ_taroも紫色になるけど,Qjiroはならないねw
そうだね
PyQtで質問です QPushButton に connect で SIGNAL clicked() を 自分のクラスに作った SLOT で受けてるのですが self.sender().text() で取得したボタン表示文字列の 型が何か分かりません unicode(self.sender().text()) だと unicode で取得出来たのですが self.sender().text().decode('utf-8') みたいにすると str ではないと怒られます
自己解決しますた type(self.sender().text()) で PyQt4.QtCore.QString だと分かりました
892 :
デフォルトの名無しさん :2010/03/30(火) 21:29:45
>>887 その仕様なのにオプション設定のカラースキームで「型」とするのは紛らわしいよな
初心者な質問ですいません Qtでlibファイルをリンクするにはどうしたらよいのでしょうか?
>>894 気合いと根性とちょっとのgnu cの知識
qtは関係ない
896 :
894 :2010/03/31(水) 00:15:57
自分で調べて 外部ライブラリをリンクする方法は、2通り。 ・プロジェクト設定でリンクするlibファイルを設定する方法。 ・使う箇所だけで#pragma comment(lib, "xxxx.lib");と読み込ませる方法。 との記事を見つけたので プロジェクト設定をいじれるところがどこかあるのかなーと思ったのですが。 #pragma commentについてはminGW版ではignoreされたので・・
>>880 sender()なんてあったのか。
ボタンを全部同じスロットで受け取って、sender()->objectName()使って処理を振り分けることも可能なのね。
899 :
デフォルトの名無しさん :2010/03/31(水) 06:46:36
>>898 naming guidelineをしらないの?
899はKYな子
>>897 そうそう。例えばラジオボタンを沢山並べて,それらのclicked()シグナルにconnectするスロット関数を一つに
できるので便利だよ。
要はvcl
コンパイルの速度が気になってなかなか移行しきれない俺Delphian
>>905 といかC++はクソ難しい(さらに変態的になりそうな現状もある)からDelphiばっか使っていた方は
発狂すると思うぞ?
馬鹿除けトラップになってくれててありがたい
>>907 > 馬鹿除けトラップ
でもそのせいで俺らだっていちいち苦労するぞ
openssl1.0.0がリリースされてんだね
どなたかお知恵を。。 グリッドレイアウトでウィジェットを多数配置しているのですが、 そのうちのいくつかを無効化しようとしています。 .hide()で隠すことで対応したのですが、 グリッドの一行を全てhide()すると、その行がグリッドレイアウトで つめられてしまい、ウィジェットの位置が変わってしまいます。 位置が変わらないように、 グリッドの一行を空のままスペースをあけるような事はできますでしょうか? hide()以外でもなんでもかまいません。 よろしくお願いします。
HTMLパーサってないのですか?
>>911 無効化だけしたいならQWidget::setDisabledを呼べばいい
>>912 4.6から追加されたQWebElementがそれらしい機能なんじゃないかな
916 :
902 :2010/04/01(木) 06:33:38
>>914 うん。そっちも使ったことあるけど、なんか
>>880 みたいなコーディングの方を
書いちゃうんだよね。それとQButtonGroupで何か不具合に出会った記憶が...
時間がなかったので、あまり調べもせずに..
>>880 式の書き方に変えたので
覚えてないんだけど(完全無責任モード)。
QButtonGroup は使わない方が良いってことかな
918 :
902 :2010/04/01(木) 09:51:25
>>917 あまりに無責任なので,ちょっと手元で試してみたけど,普通に使う分には問題なかった。
不具合に出会ったときは setProperty() とか使ってゴニョゴニョ書いてたんだけど,
何をやったらどうおかしかったのか思い出せない...ので,気にしないで。
ただ,コーディング量は QButtonGroup 使っても共通スロット関数で sender() 使っても
大差ないのでお好きな方でどうぞってところかな。
>>915 なんだぁ、jomの話じゃん。今のQt Creatorではデフォルトでnmakeの代わりにjomが使われる
から,今のスピードに満足できていない人には情報として役に立たないよぉ。
920 :
911 :2010/04/01(木) 12:33:47
>>193 非表示にしたいため、setDisabledでは対応できませんでした。
gridに頼らずやるしかないのでしょうか。。。
>>919 そりゃDelphiやC#とかヘジルスバーグ言語と
C++のコンパイル速度を比較したらいかんよw
>>913 さっと見てみましたがQNetworkAccessとあわせて使うには
ちょっと大げさな感じになっちゃうみたいですね・・
>>920 スペーサーかダミーのWidgetに差し替えるか、GridLayoutのサブクラスを作って
位置が変わらないようにオーバーライドするとか・・・。よく調べれば何か方法はあるはず
>>919 真実と嘘の区別が付かないのが、チョウセンヒトモドキ
JavaScriptでしばしばこういうコード書いているけど、これをC++(QT)で書くとどういう感じになる? function getValue(Form,Target){ var value = document.getElementById(Form).value; // 変数Form名のIDのフォームの値をvalueに代入 value = window.prompt("文字を入力",value); // 入力フォームを表示。valueを入力プロンプトに渡す。(上の行と1本かできるの事は気にしないで) document.getElementById(Target).value = value; // 変数TargetのIDのフォームにvalueを代入 } これをQtで書くとどういう感じになるのかな? FormとTargetの値(参照元のフォーム名と代入先のフォーム名)が変化するんだけど。 あと、 form = document.getElementById(Form+'_name') みたいな表現ってできない?
>>925 意味不明。「真実」とか「嘘」という言葉の使い方が不適切だと思われ。
では国語の問題です。
問1:ここであなたの言う「真実」とは何を指しているでしょうか?
問2:ここであなたの言う「嘘」とは何を指しているでしょうか?
解答を知らない人が出題しちゃってる。
不適切で不明だから出題して試してるんだろ。
添削できない人間が何を試すんだか。
要するに馬鹿の癖にプライドが高いから「お訊ねする」ことができなくて まったく文脈のズレまくった試験官キャラやっちゃってるんでしょw
意味不明じゃ添削のしようもない。要するに日本語がおかしくて何が言いたいか わからんつーこと。書いた本人に適切な言葉で説明することを求めてる。
スレが伸びてるから覗いてみればwww
しかしjomで速くなる実感はあまりないな。コア数の多いCPUのマシンだと違うのかもしれないね。
>>925 はそれを「嘘」と言ってるのかな?
正直俺も何が言いたいのかよくわからん。
コンパイル速度が気になるならPyQtでも使えばいいと思うのだがPyQtで書いたクラスとC++で書いたクラスの相互利用って、簡単にはできないの?
>>926 QWebFrame::evaluateJavaScript() を使う方法もあるけど、
C++ を使いたいなら QWebElement を使う。
適当なサンプル
QWebElement form0 = ui->webView->page()->mainFrame()->documentElement().findFirst("input#form0");
if (!form0.isNull()) {
QString value = form0.attribute("value", "");
QString result = QInputDialog::getText(this, tr("Input Text"), tr("Value:"), QLineEdit::Normal, value);
if (!result.isNull()) {
QWebElement form1 = ui->webView->page()->mainFrame()->documentElement().findFirst("input#form1");
form1.setAttribute("value", result);
}
}
PythonとC++じゃ実行速度が違いすぎるでしょう。コンパイルの速さ云々以前の問題じゃないのかな。 プログラムの目的にもよると思うけど。
>>938 そこまで速度要求されないものだと、そんなに変わらんよ。
それに開発中だと、動作速度よりも、コンパイルしなおさずに使える方が嬉しいこともある。
Pythonで動くものを作って、できるだけQtライブラリを使う方針でコード書けばC++への移植もそう難しくない。
PyQtで、Qt Creatorみたいにペタポト開発できる環境ってあるの?
この話って
>>905 のDelphianが発端だから、そういのがないと厳しいと思う。
>>940 ポトペタでuiを作ったら、ui読み込んでGUI構築できる。
uiからpyファイルを生成するuicもある。
それは単なるGUIデザイナ。DelphiもQt CreatorもGUIデザイナとIDEが統合されて、 GUI設計からソースコード編集、ビルド、デバッグまでが一貫して行える本格的RADツール。 Delphi使いなら、当然ここまで要求したくなると思うよ。開発効率が全然違うもの。
SIP
Delphi使いがDQNだということはわかった
現実にQt Creatorがあるのに,なぜにDQN?
複数の機能が一つのツールにまとめられているのか複数のツールに分かれているのかが それほど重要とは思わないけど、EricみたいなIDEを使えばデザイナやデバッガや インタラクティブシェルやヘルプや静的チェックやユニットテストやバージョン管理なんかを 統合できるな。
>>947 ただまとめられてるだけじゃなくて、シームレスってところが重要なんだよ。
例えばQt Creatorでボタンを貼って、右クリックで[Go to slot]すると、
スロット関数のスケルトンが作られてて、中にコードを書いていくだけでいい
とか、デバッグ中にエディタ上で変数にカーソルを当てると、値がツールチップ
で表示されるとか。
こういうところがサクサク仕事が出来るかどうかに相当関わってくると思う。
Paythonは好きだけど,所詮はスクリプト言語。ログファイルから必要な項目だけを抽出するような 仕事をササっとやるとか,GUI付きでもアクセサリ的な小物ソフトを作るのに向いてる。 画像処理とかハードウェア制御を伴うような本格的な大物アプリは,やはりコンパイラ言語の 守備範囲だろう。こういうのをやる場合には,RADツールも本領を発揮するし。 目的に応じて使い分ければいい。
>>948 それは、C++とPythonの生産性の差を覆せる程の差とは思えないな。
uiをそのまま使う事もできるから、uicを呼び出すために明示的に右クリックから
コード生成をクリックする必要はあるけど、その後に右クリックからスロットに
対応する為のコード自動生成までは同じだし。
むしろ、 PyQt だとスロットとかいちいち宣言しなくても button.clicked.connect(somefunc) みたいに
普通の関数につなげられたり、自動生成以外のところで圧倒的にC++よりも柔軟で便利。
そして何より、C++はコンパイル遅いし。
>>949 Pythonはスクリプト言語じゃないよ。スクリプティングにも使えるけど、本物のプログラミング言語。
画像処理を伴う場合も、画像処理ライブラリがC言語で書かれているし、足りない部分は自分で
Cで書ける。でも、画像処理アプリでも実際に画像処理している部分は2割だったりする。
残りの8割はPythonで書いた方が効率的。
>>948 暮暮厨うぜ
>>950 > Pythonはスクリプト言語じゃないよ。
そりゃあんたの勝手な定義で無理がある。いろんなところでスクリプト言語に分類されてる。
つ
http://ja.wikipedia.org/wiki/Python > 画像処理を伴う場合も、画像処理ライブラリがC言語で書かれているし、足りない部分は自分で
> Cで書ける。でも、画像処理アプリでも実際に画像処理している部分は2割だったりする。
> 残りの8割はPythonで書いた方が効率的。
偏愛きもいよ。
足りない部分をCで書くくらいなら、最初から全部C++で書いた方がずっと効率的。
自分でCで書いた部分のデバッグはどうするの?
ハードウェア制御だってそう。市販のI/Oボードに付属のDLLはPythonから直接使え
ないだろ?
インタープリタ言語にはインタープリタ言語の得意分野がある。それを捻じ曲げて
まで、C++を嫌う理由が「いちいちコンパイルしなければならない」だけなの?
コンパイル遅いと言うけど,プリコンパイルドヘッダー使えば充分速いし,
仕事の息抜き時間になってちょうどいい。
カットアンドトライですぐコンパイルかけるようなプログラミングの仕方してると
気になるのかもね。
実行の遅さの方がずっと問題。人様に使っていただくプログラムならなおさら。
だいたいあんたC++や本格的なRADツールの体験はどれだけあるの?
いままで書いた最も大きなプログラムってどんなもの?
>>952 だいたいあんたC++や本格的なRADツールの体験はどれだけあるの?
いままで書いた最も大きなプログラムってどんなもの?
C++ Builderの経験10年ほど。Qt はここ1年くらい(Qt Creatorの登場以降)。
一番大きなプログラムは,数億\単位の装置をオペレーターが使う制御ソフトで,
単純I/Oだけじゃなくてモーションコントローラーや自社開発ボードのハードウェア
制御,画像処理,ZOOM IN/OUTを含んだ描画処理などを含む大掛かりなもの。
大体あんたずれてるよ。突っ込むんなら Python の経験はどれくらいあるのか
聞くんじゃないのか?
他人のカキコを借りてあえて言う。「またゆとりのオマエか」
>>951 もずれてる。
>>948 は実在するものの話をしてるのに「暮暮厨うぜ」だって。
またゆとりのオマエか。
あんたって誰のこと?
文脈から明らか。ゆとりは国語ができないんだね。
ゆとりなの?
958 :
デフォルトの名無しさん :2010/04/03(土) 09:54:14
なんか一匹短いコメントしか書かないズレまくりの虫が紛れ込んだおかげで、良スレが台無しだ。
959 :
デフォルトの名無しさん :2010/04/03(土) 10:10:46
>>920 >非表示にしたいため、setDisabledでは対応できませんでした。
QGraphicsOpacityEffect で透明にするとどうですか。
>>952 >ハードウェア制御だってそう。市販のI/Oボードに付属のDLLはPythonから直接使え
ないだろ?
無知って怖いな
>>952 >そりゃあんたの勝手な定義で無理がある。いろんなところでスクリプト言語に分類されてる。
そりゃあんたの勝手な解釈で無理がある。いろいろなところでスクリプティングにも適しているけれど、
大規模アプリケーションにも適している、本物のプログラミング言語とされている。
http://www.python.jp/doc/2.5/tut/node3.html http://en.wikipedia.org/wiki/Python_ (programming_language)
>Python is a general-purpose high-level programming language
DLLは、C#でdllを呼ぶのと同じくらいに簡単に呼べる。
実行時間は20:80の法則があるので、時間のかかっている部分だけ、より良いアルゴリズムや
データ構造を選んだり、画像処理みたいな部分はCで書けば良いだけ。
そんだけ経験あるんだったら、RADツールで削減できる手間なんて最初のちょろっと
だけだって気づかない?
RADの自動生成コードばかり使っていて、自分でコードの再構成をしないまま
肥大化すると、そのうちスコープの大きい変数が散らばったり、MVCが分離できていなくて
一部の機能をテストするためになぜかGUIを人間が操作しないといけないクソコードになるよ。
Cで書かれたライブラリを呼べるから本物のプログラミング言語だ(キリッとか high-level programming languageが本物のプログラミング言語なの?w その訳語が何か理解できてる?
963 :
デフォルトの名無しさん :2010/04/03(土) 12:44:14
>>961 > そりゃあんたの勝手な解釈で無理がある。いろいろなところでスクリプティングにも適しているけれど、
> 大規模アプリケーションにも適している、本物のプログラミング言語とされている。
>
http://www.python.jp/doc/2.5/tut/node3.html >
http://en.wikipedia.org/wiki/Python_ (programming_language)
前者は作った方の言い分だからねぇ。後者だってPythonだけについて書いたwikipediaのページだから、
作った関係者が書いた可能性大。俺が挙げたページは同じwikipediaでも「スクリプト言語」のページだから、
より公正だと思うが。
> DLLは、C#でdllを呼ぶのと同じくらいに簡単に呼べる。
Cの関数の形をしたいわゆるWINAPI(__stdcall)呼び出し規約のDLLだけでしょ? まぁ、市販ボードのDLLなら
大抵はそうだけど、社内ライブラリなんかクラスDLLにすることが多いから無理。
> 実行時間は20:80の法則があるので、時間のかかっている部分だけ、より良いアルゴリズムや
> データ構造を選んだり、画像処理みたいな部分はCで書けば良いだけ。
だから一部だけCで書くなんて非効率。しかもC++じゃなくてCじゃねぇ。上のDLLと同じ方法になるんだろうけど、
デバッグも面倒だよね。
> そんだけ経験あるんだったら、RADツールで削減できる手間なんて最初のちょろっと
> だけだって気づかない?
全く逆。RADツールのおかげで、顧客ごとのカスタマイズを手早くやってこれた。おかげでホクホクだ。
で、何使ったことあるの? どんなプログラム作ってるの? 聞くの二度目なんだが。
> RADの自動生成コードばかり使っていて、自分でコードの再構成をしないまま
> 肥大化すると、そのうちスコープの大きい変数が散らばったり、MVCが分離できていなくて
> 一部の機能をテストするためになぜかGUIを人間が操作しないといけないクソコードになるよ。
そんなのは仕事の出来ないヤツのやることだ。
>>952 そのページ見ても、Pythonがスクリプト言語だという記述は見られないけど?
「スクリプト言語」という単語には、スクリプティングに使われる言語という意味と、
スクリプティング用途の為に開発されたという意味の2種類がある。
そのページで「スクリプト言語としての特性から」というのは、明らかに前者。
英語のWikipediaのページにも、General purpose language と書いてある。
Pythonを「スクリプト言語だからスクリプト用途にだけ使っとけ」なんて言ってるのはおまえだけ。
もしPythonとCを混ぜるのがC++だけを使うより本当に非効率だとしたら、 C++で書かれたmonotoneみたいなツールよりも、Pythonと一部だけCで書かれた MercurialやBazaarの方が広く使われているのはなぜ? いい加減スレチだな、スマソ
スクリプト言語の対比として本物の言語と言ってたんだが、汎用言語って言い直すわ。
>>965 「所詮はスクリプト言語」と言っているよね?スクリプティング目的の言語だから、
それ以外では非効率という意味で言ってたんだよね?
だから .
>>964 みたいに反論したんだが。
Pythonは汎用言語で、大規模アプリケーション開発にも適しています。
↑これに反論はない?
大規模なプログラミングをするのにC++よりPythonの方が良いなあって 人がいたらダメなの? だけど世の中には人殺しもロリコンも居るんだ。 「Pythonは大規模なプログラミングに向かないと、お前もそう思え」と 押しつけるぐらいの変態は居るだろうな。
あぽんしたいからID付けようぜ
>>966 バージョン管理システムくらいなら、どっちもありなんじゃないの。
いい加減スレチ。
そもそも、C++のコンパイル速度が気になるDelphi使い (
>>905 ) に PyQt を勧められるかどうかっていう話だろ?
>>940 でポトペタが必要
>>941 でポトペタあるよ
>>948 でスロットからスケルトン作れるのかという話に、
>>950 でEricというIDEならできるという回答
なのに、なんで
>>949 はいきなり C++ vs Python の話を始めているんだ?
C++ のコンパイル速度が気になる Delphi 使いがQtを使うという前提はどこいった?
972 :
デフォルトの名無しさん :2010/04/03(土) 13:50:38
>>966 > もしPythonとCを混ぜるのがC++だけを使うより本当に非効率だとしたら、
自分でやってみて書いてる?そもそもC++が使えなくてCだけだってところで×なんだが。
>>967 > 「所詮はスクリプト言語」と言っているよね?スクリプティング目的の言語だから、
> それ以外では非効率という意味で言ってたんだよね?
規模が大きくなったり、Pythonだけで済まない部分が増えると非効率。
実行速度が重要な場合も向かないと思う。
実際、FFTだの特殊な画像フィルタを含むアプリを書いてるが、こんなのPythonだけじゃ
速度が問題になるし、Cと併用するなんて面倒なだけだ。
逆にPythonの方がC++より効率が良いのは、コンパイルがいらない他に何がある?
> Pythonは汎用言語で、大規模アプリケーション開発にも適しています。
> ↑これに反論はない?
ある。前述の通り。
>>968 > 大規模なプログラミングをするのにC++よりPythonの方が良いなあって
> 人がいたらダメなの?
PyQtじゃDelphi使いの要求には応えられないって話から始ってるんだが。
>>972 >自分でやってみて書いてる?そもそもC++が使えなくてCだけだってところで×なんだが。
あぁ、もちろん。
DLLの呼び出しはCだけだけど、拡張モジュールはC++だって使えるぞ。
というか、 PyQt ってそもそも Python の拡張モジュールで C++ の Qt を使っているんだぞ。
個人的には、 PyQt が使っている sip じゃなくて Cython を使う方が好きだけどな。
>Cと併用するなんて面倒なだけだ。
単に拡張モジュール作った経験が無いだけじゃないの?
>逆にPythonの方がC++より効率が良いのは、コンパイルがいらない他に何がある?
例外が使いやすい。何もしなくてもバックトレースが取れる。
参照カウンタ方式のGCが標準でつく。shared_ptrを返すか、参照を受け取るかを悩む必要がない。
コンテナに値を入れるときに、そのまま値を入れてコピーコストや例外安全を気にしたり、
どのスマートポインタを使うかを気にする必要がない。
動的言語だからインタラクティブシェルで動かしながら開発・デバッグができる。
標準ライブラリが豊富。
>PyQtじゃDelphi使いの要求には応えられないって話から始ってるんだが。
だれがそんな事言った?おまえが勝手に言っているだけで、そんな話題は最初から無かったんじゃない?
>>973 Python, C/C++ 両方でいろんなアプリケーションやライブラリ作ってるよ。
QtCreatorもPyQtも使ってるが、GUIの比率は少ないな。
おまえこそ、どれだけPythonの経験があってPythonはスクリプトにしか向かないって言ってる?
拡張モジュールの知識があんまりないってことは初心者だよな?
実際にPythonでたくさんのアプリケーションが作られていることも知らないんじゃない?
>>974 >> PyQtじゃDelphi使いの要求には応えられないって話から始ってるんだが。
> だれがそんな事言った?おまえが勝手に言っているだけで、そんな話題は最初から無かったんじゃない?
>>905 、
>>936 、
>>938 、
>>939 、
>>940 実際、Delphi使っちゃうと、開発環境はQt Creatorレベルじゃないと耐えられないと思う。
そうするとC++で書くことになるけど、コンパイル速度はプリコンパイルヘッダーやjomで
補うってことで良いんじゃないの?
もちろんPyQtでDelphiなみのRAD環境が構築できるのならおkだと思うけど。
>PyQtじゃDelphi使いの要求には応えられないって話から始ってるんだが。 どこから始まっていようが、流れ着いた話が 「大規模なプログラミングをするのにPythonは向いていないとお前も思え」 じゃあ変態さんだよ。
>>978 「お前も思え」なんて、直接じゃなくて意味上からもどこにも書いてない。
逆に C++ だけより Python の方が良いと思えと言われてるように感じるが。
>意味上からもどこにも書いてない。 書きまくってるじゃん。 >Python の方が良いと思えと言われてるように感じるが。 確かにそう言ってる変態さんもいるね。 大規模なプログラムにPythonが適していると思うのも、適していないと思うのも 所詮は「自分にとってはそういうものだ」に過ぎないのにね。
開発環境をしていたところで、いきなりPythonをスクリプティング用途にしか使えない
>>949 が
Pythonは本格的な大物アプリには向かないなんて的外れな主張をし出しただけ。
言語論争は他のスレでやれ。
>>980 そんなことを言い出したら、自分の意見を主張することは一切出来なくなってしまう。
>>981 もう一度
>>949 をよく読んで。スクリプティング用途にしか使えないなんて書いてないし、
「画像処理やハードウェア制御を伴うような」と前置きもしてある。Pythonが好きだとも書いている。
これは言語論争じゃない。DelphiからQtへの移行を考えてる人に何を勧めるかの話だ。
>>976 > Python, C/C++ 両方でいろんなアプリケーションやライブラリ作ってるよ。
> QtCreatorもPyQtも使ってるが、GUIの比率は少ないな。
それでわかった。GUIの比率が少なければそう思うかもね。
> おまえこそ、どれだけPythonの経験があってPythonはスクリプトにしか向かないって言ってる?
> 拡張モジュールの知識があんまりないってことは初心者だよな?
その通りだよ。
拡張モジュールにC++が使えるのはわかったけど、クラスDLLはコンパイラによって互換性がない。
VCとMinGW gccじゃインターフェースが異なる。この辺はどうやって吸収できるの?
> 実際にPythonでたくさんのアプリケーションが作られていることも知らないんじゃない?
さすがにこれは知ってるが。
早い話、この中にDelphiやC++ Builderを使ったことがある人がどれだけいる? 使ったことがあれば、最低でもQt Creator並のRAD環境が必要なのはわかるはず。 DelphiやC++ Builderはもっと便利だ。例えばFileを開くダイアログやポップアップメニュー はQt Creatorではポトペタできないので、手書きコードで書くしかないが、 DelphiやC++ Builderではその場に表示されない擬似的なGUI部品としてポトペタ してプロパティの設定とかが可能。 しかもDelphiなら、高速な処理が必要な部分も他の言語で書いたモジュール等に 頼ることなく記述できるし、当然本体と一緒にデバッグもできる。 それなのに「コンパイル速度」という理由だけでPyQtを勧めるのはいかがなものか と思う。高速処理が必要な部分は他の言語で書いたモジュールに頼らざるを得ない という弱点もある。 勧めるのなら、最低でもDelphi並みのRAD環境の構築方法も書くべきだ(存在するの ならだけど)。
>もう一度
>>949 をよく読んで。スクリプティング用途にしか使えないなんて書いてないし、
Pythonについて、
・所詮はスクリプト言語
・仕事をササっとやるとか
・小物ソフトを作るのに向いてる
なんて言ってるわけですが、これってあなたの主観に過ぎんのだわ。
大物にだって向いているよと考える人がいても良いわけだし、一般論みたいに
言うのはよろしくないですな。
あなたが「Pythonは大物には向いていない」と考えるのは自由ですが、
他人が「Pythonは大物には向いている」と考えることを否定する必要は何もありません。
Delphiからの乗り換えを踏まえるとしても、Delphiってのはポトペタだけが魅力なんですか?
「言語記述が好きだ」「C++は大嫌いだから」という人は想定外ですか?
それにQtもCreatorがなければダメってことはありませんよ。
ところで「Pythonが好きだとも」は何かの弁解になるんですか?
普通に考えて、GUI部分と、アプリケーションロジックと、画像処理みたいなルーチンは分離して設計するだろ? 画像処理のコードを修正したときに、GUIから操作しないとテストできないみたいなバカな設計はしないよな? 分離して設計するなら、一つの言語で書く必要がどこにある? C++ってのは、ヘッダファイルとソースファイルに分割して書かないといけなかったり、 オブジェクトを値のままコンテナに突っ込んだらスライシングやコピーコストやコピーコンストラクタの 例外安全性を気にしないといけなかったり、だからってshared_ptr<>をコンテナに突っ込むと 演算子オーバーロードがオジャンになるからアルゴリズムを使うために述語関数を用意しないと いけなくなったり、それを避けるために pImpl を使ったら継承が面倒になったりと、 アプリケーションのロジックを書くのに、C++ならではの余計な事を大量に考えながらコードを書かないと いけない言語だ。 Pythonの方がアプリケーションのロジックに集中して書けるし、あとから他の人が読んでも理解するのが速い。 RADで解決できるのなんてほんの表面の部分だけ。 あと、9割以上のアプリケーションでは、自分で拡張モジュールを書かなくても既存のライブラリで問題を解決できる。
C++だけで世の中がまわるとQt周辺が考えてるなら他言語とのインターフェースは存在せんだろう。 自分が受容できないからといってC++Builderを引き合いにしてキレるのはいかがなものか。
>社内ライブラリなんかクラスDLLにすることが多いから無理。 この人、LinuxとかMacでもこんなことするんか。 Windows専用だったらC++ Builder使ってればいいのに。
>>985 > Delphiからの乗り換えを踏まえるとしても、Delphiってのはポトペタだけが魅力なんですか?
ほとんどそうだと思うよ。言語的には潰しが利かない(他にごく一部の例外を除いて開発環境が
ない)から、Delphiを選択する一番の理由は優れたRAD環境にあると思う。
> それにQtもCreatorがなければダメってことはありませんよ。
あの便利さを知ってしまったらDelphi使いがQt CreatorなしでQtを受け入れるのは困難
なことだろうね。
使ってみなければ理解できないと思うよ。
>>986 > 普通に考えて、GUI部分と、アプリケーションロジックと、画像処理みたいなルーチンは分離して設計するだろ?
> 画像処理のコードを修正したときに、GUIから操作しないとテストできないみたいなバカな設計はしないよな?
> 分離して設計するなら、一つの言語で書く必要がどこにある?
組み合わせてみて初めてわかるバグとか問題点がよくあるのはわかるよね?
それとロジック部や個別機能のルーチンのテストも、Delphiだったらテストプログラムを
ササっと(ショボイGUIで構わないから)書けるから、一つの言語ですべてを完結させられる。
>>988 > Windows専用だったらC++ Builder使ってればいいのに。
Delphi/C++Builderは最近品質低下が激しいし、開発元が部門の分離やら買収やらで
弱体化してるから、他へ逃げようとしてる人は多いと思う。俺もその一人。
>>905 もそうだと
思う。
で、
>>974 が言っているようなPythonの利点と、
>>986 が言っているようなC++の欠点は、
RADの完成度に比べたらアプリケーションの生産性に大した影響がないの?
Delphi脳になるとRADが絶対化して完成度のRADが無い環境がイヤになる。 Python脳になるとコード書き換え、コンパイル、再実行なしにプログラムを実行したまま テスト、デバッグ、書き換えができない環境がイヤになる。 C++脳になると、ヘッダファイルを書いたりテンプレートを書いたりする作業が アプリケーション構築には本来不要な余計な作業だという認識が無くなる。
元カノはこんなことやあんなことをしてくれた。
あれを経験したらキミがしてくれることには満足できないね、ですか。
やれやれ。
>>989 みたいな
「Delphi/Builderではできたからxxでもこうできなくてはならない」
なんて価値観の押しつけってバカ丸出しだと思う。しかもエンバカ難民。
国を捨てて流れ着いた難民が、「元の国ではこんなサービスがあったんだから
この国でも我々は同じサービスを受ける権利がある」なんて主張したらどう思う?
帰れよ元の国に、って思うんじゃない?
エンバカ難民の傾向ってこういうのなのかなあ。
要は「RADでない開発環境は使えねえ。他人にも薦められないし他人に薦める奴も許せねえ」って感じ?
これがあっての上での
>>949 なのかなあ。だとしたらすごく分かりやすい。
俺、Delphiは昔使ってたよ。あれはあれ、これはこれだろ。
Qtの開発元のNokiaは、PyQtがあるのに、GPLだからという理由だけでわざわざ PySideの開発に乗り出した。 それくらい、Qtの開発元にとってもPythonは重要な言語。
u
m
e
.
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。