【GUIツールキット】Qt 総合スレ 4【Win/Mac/Linux】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Qt(キュート)は C++ ベースの GUI ライブラリです。
フォーム、ボタンなどの各種ウィジェットからネットワーク、マルチスレッド、グラフィックス(OpenGL)や
各種コンテナ、XMLパーサー、組み込み JavaScript など、ライブラリの機能は多岐に渡ります。
また、「Qt Creator」という GUI ビルダ付きの専用 IDE が用意されています。

■対応プラットフォーム(デスクトップ用途の場合)

Windows 98, Me, NT4, XP, Server2003, Vista
Mac OS X 10.3, 10.4, 10.5
Linux

■ライセンス

・オープンソース版(Open-source version)
 LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
 LGPL を選んだ場合は商用利用が可能です(いくつか制限あり)。

・商用版(Commercial version)
 こっちはQt Softwareか日本の代理店(SRA社)とライセンス契約(年間30万くらい?)を結んで使います

■Qt を使って作られたソフト例

KDE、Adobe Photoshop Elements、Google Earth、Skype、DAZ Studio など

■前スレ

[KDE/Qt]Qtについての疑問を教えあうスレ 3
http://pc11.2ch.net/test/read.cgi/tech/1194158506/
2デフォルトの名無しさん:2009/04/18(土) 04:30:12
■リンク

・Qt Software (旧Trolltech社/現在はNokia社の一部門)
http://www.qtsoftware.com/

・Qt のダウンロードページ(オープンソース版は、LGPL/Free Downloads タブから)
http://www.qtsoftware.com/downloads

・Qt のダウンロード(FTP)
ftp://ftp.qtsoftware.com/qt/source/

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


■ライセンス関連まとめ

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

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

*: LGPLは動的リンク時

実際には他にも条件(リバースエンジニアリング関係とか)あるので、
きちんとライセンスの条文を読むこと。
3デフォルトの名無しさん:2009/04/18(土) 04:30:29
Windows ユーザー向け Tips

■どれをダウンロードするの?

・Download Qt SDK for Windows* (194 Mb)
  IDE&コンパイラ付きインストーラー(Qt Creator&MinGW)
  すぐに使える。オススメ

・Download Qt libraries 4.5 for Windows (136 Mb)
  MinGW(gcc)版インストーラーや、その他のコンパイラ(VisualC++など)用のソースコード
  VisualC++等でQtを使うには、これを落として Qt 自体をビルドする必要がある(2〜3時間かかる)

■Qt Creator&MinGW Windows版について

・プロジェクトのパスに半角スペース、日本語を入れちゃダメ
・日本語のソースコードは UTF-8 にする
 「Projects」タブの「Editor Setting」設定でエディタの Encoding を「UTF-8」にする
 デフォルトの System(ShiftJIS)は gcc と相性が悪い
・デバッグ出力はとりあえず英語にする
 qDebug() に日本語を出力するとデバッガコンソールが文字化けする(UTF-8、ShiftJISどっちもムリ)
・配布時は mingwm10.dll も忘れずに一緒に入れておく
 MinGW 環境でコンパイルするとこのDLLが必要になる。このファイルは public domain で配布上の制限はない
4デフォルトの名無しさん:2009/04/18(土) 09:19:30
>>1
5デフォルトの名無しさん:2009/04/18(土) 23:15:22
ねーねー、Qtアプリの多重起動禁止ってQtのAPI使ってできる??
QMutexじゃ無理なんだよね?
6デフォルトの名無しさん:2009/04/18(土) 23:37:26
>>1
うは、LGPLで使える様になったのか。NOKIAグッジョブb
今までGPL汚染が嫌で遠ざけていたけど、素晴らしいね。
そもそもGPLはライブラリのライセンスには不適格だから、
LGPL化は正常な方向への舵取りですね。
これでwxやGtk+に奪われた領土を少しは回復出来るかな?
7デフォルトの名無しさん:2009/04/19(日) 11:47:16
QSettingsで、キー内容にカンマ(,)をつけると値が取れなく
なるんですが、どうしてでしょう?マニュアルにもWebでもカンマに
ついて一言も書いてないです。
8デフォルトの名無しさん:2009/04/19(日) 18:35:40
>>7
カンマがセパレータとして認識されてるんじゃない?
9デフォルトの名無しさん:2009/04/20(月) 00:49:52
ははは
10デフォルトの名無しさん:2009/04/20(月) 03:18:49
>>8
うーん。セパレータと解釈されてそうですが、そういう設定ないんですよね。
QSize型を書き出すと@Size(100 100)とか出力される例がマニュアルにあって、それもカンマ
使わずにスペースで区切ってあるんですよね。どうもカンマを使えないのはNokiaも知ってるっぽい?です。
なんかこういう重要な事がマニュアルに書いてないのが
オープンソースあがりっぽい感じがして少しがっかりです。
11デフォルトの名無しさん:2009/04/20(月) 08:23:50

>>10
環境は何ですか。
私の環境LinuxのQt4.5では、キーにカンマ(,)をつけても、
書き込み読み込みともにうまくいきました。
ただし、ファイルの中を見ると、カンマ(,)の部分は%2Cとなっています。
ASCIIの16進コードに置き換えられているようです。
12デフォルトの名無しさん:2009/04/20(月) 11:15:20
>>11
おお。WIndowsXPのQt4.5です。
すみません、読み込みは散々調べましたが、書き込みをやってませんでした。
いまやってみたら、
settings.setValue("TEST/KEY","0,1"); // KEY="0,1"
とダブルクォーテーションに包まれて出力されました。
この場合読み込みもうまくいきました。
Linuxと挙動がちがいますね。そちらではダブルクォーテーションになってませんか?
13デフォルトの名無しさん:2009/04/20(月) 11:25:17
>>11
ああ、なるほど、キーにカンマをつけた場合の話しですね。
私はキーの値にカンマをつけた場合の話しです。
キーにカンマをつけてみたら、同じく
settings.setValue("TEST/KE,Y","0,1");//KE%2CY="0,1"
%2Cとなりました。挙動は一緒みたいですね。
14デフォルトの名無しさん:2009/04/20(月) 11:32:35
>>11
誤るの遅くなりましたが、キー内容という表現が悪かったです。すみませんでした。
15デフォルトの名無しさん:2009/04/20(月) 17:36:26
>>12
こちら(Linux)でも同じです。
settings.setValue("TEST/KE,Y","0,1");
とすると、ファイル内では、KE%2CY="0,1"となっています。

>>14
こちらこそ、勘違いしたみたいですね。やりたいことは、値として整数値の組をカンマで区切ったものを読み込ませたいということですね。
もしそうならば、下記のようにすればどうでしょう。

(ファイルの中)
TESTKEY=100,20,50

(サンプルコード)
#include <QDebug>
#include <QVariant>
#include <QList>

QVariant values = settings.value("TESTKEY", QVariant(QList<QVariant>()));
QList<QVariant> valueList = values.toList();
const int cSize = valueList.size();
int value;
for(int i = 0; i < cSize; ++i) {
value = valueList.at(i).toInt();
qDebug() << value;
}

(出力結果)
100
20
50

16デフォルトの名無しさん:2009/04/20(月) 19:15:02
>>5

商用ライセンスならこれでできます。

Single Application ― Qt – A cross-platform application and UI framework
http://www.qtsoftware.com/products/appdev/add-on-products/catalog/4/Utilities/qtsingleapplication/
17デフォルトの名無しさん:2009/04/20(月) 19:19:28
>>15
おお、すばらしいです。
やりたいことが出来ました。
ですがちょっと納得いかないので調べてみます。
大変ありがとうございました。
18デフォルトの名無しさん:2009/04/20(月) 21:15:53
>>15
やっぱりちょっと問題があるようです。
QVariantのtoList()は、"0,1"の場合、要素数2のリストを作ってくれますが、
"0"のようにカンマが無い場合、要素数が0になってしまうようです。
要素の数でなく、カンマの数で要素数が決まる?ようです。
少々がっかりです。

↓もがっかりな点です。
QStringのtoInt()関数 int toInt ( bool * ok = 0, int base = 10 ) const
QVariantのtoInt関数 int toInt ( bool * ok = 0 ) const
同じ関数名なのに機能が統一されてない(´・ω・`)

たぶん、ほかにもいろいろとこういったものがあるのでしょうね(´・ω・`)。
19デフォルトの名無しさん:2009/04/20(月) 21:42:39
遅れたけど>>1モツ
随分様変わりしたな




それはそうと、Qtを引っさげてIT業界へ転職しようと考えてる
応用情報午後で不合格ほぼ確定なオレにゃ甘い考えだろうか
20デフォルトの名無しさん:2009/04/20(月) 21:57:33
>>19
いいやそんなことないぞ。がんばれ
21デフォルトの名無しさん:2009/04/21(火) 00:17:00
Visual Studio2008でコンパイルしたQT4.5使ってます。
qt-vs-addin-1.0.0-rc1.exeもインストールし、
ほぼ問題なく使えているのですが、
ウォッチウィンドウなどの表示で、
QMapのデータがerrorと表示され、内容が見れず困っています。
autoexp.datの設定には、QMapの内容が書かれているらしいのですが、
どうもよく分かりません。一部は括弧が対応していないところも見つけたので
ひょっとするとこのファイルがおかしいのではないかと思っています。
どなたか解決できてる方いらっしゃいますか?
22デフォルトの名無しさん:2009/04/21(火) 01:09:36
>> 18

>QVariantのtoList()は、"0,1"の場合、要素数2のリストを作ってくれますが、
>"0"のようにカンマが無い場合、要素数が0になってしまうようです。
>要素の数でなく、カンマの数で要素数が決まる?ようです。

QVariant values = settings.value("TESTKEY", QVariant(QList<QVariant>()));
として、読み込んだ場合、値によって返ってくるvaluesの型が違ってくるように実装されているようです。

ファイルの値が
TESTKEY=10,20
のとき、valuesは、QVariant(QList<QString>())になっています。
このとき、リスとの各要素(QStringの中身)は、"10"と"20"になっています。

ファイルの値が
TESTKEY=10
のとき、valuesは、QVariant(QString())になっています。
このとき、QStringの中身は、"10"です。

ファイルの値が
TESTKEY=
となって値が設定されていない時、上と同じくvaluesは、QVariant(QString())になっています。
このとき、QStringの中身は、""です。

以上を踏まえて値をとるようにすればよいのではないでしょうか。
23デフォルトの名無しさん:2009/04/21(火) 01:10:51
22の続き

(サンプルコード)
#include <QDebug>
#include <QVariant>
#include <QList>

QVariant values = settings.value("TESTKEY", QVariant(QList<QVariant>()));

if(values.type() == QVariant::StringList) {
QList<QVariant> valueList= values.toList();
const int cSize = valueList.size();
for(int i = 0; i < cSize; ++i) {
qDebug() << valueList.at(i).toInt();
}

} else if(values.type() == QVariant::String) {
QString string = values.toString();
if(!string.isEmpty()) {
qDebug() << string.toInt();
}
} else {
qDebug() << "here is else block"; // ここにはこないはず。
}

24デフォルトの名無しさん:2009/04/21(火) 07:52:19
>>21
RC1 だから開発元に報告した方がよいのでは?

25デフォルトの名無しさん:2009/04/21(火) 15:36:06
>>22
丁寧に教えてくださって恐縮です。ありがとうございます。
QVariantは中に何が入っているか調べないと使えないのですね。
本当の意味のVariantじゃない気がする。。
TrollTeckはこの実装が完璧だという認識なのでしょうか。。


26デフォルトの名無しさん:2009/04/21(火) 15:50:23
>>24
へんてこ英語で一応報告してきました。
27デフォルトの名無しさん:2009/04/21(火) 16:31:19
>>25
>QVariantは中に何が入っているか調べないと使えないのですね。
通常は、受取側がQVariantの中に何が入っているか分かっていることがほとんどでしょうからこれでも結構使えると思います。
ただ、今回の例では、settings.value()は常にQVariant::StringListを返すように実装してあるのがいいような気がします。

>本当の意味のVariantじゃない気がする。
>TrollTeckはこの実装が完璧だという認識なのでしょうか
確かに、もっと便利にできるでしょう。
将来に期待しましょう。
28デフォルトの名無しさん:2009/04/21(火) 17:58:12
QVariantにはtoBool()があるのに
QStringにはない(;´д⊂)
29デフォルトの名無しさん:2009/04/21(火) 18:51:20
要素が一つだけの QVariantList を作って QSettings でセーブした後で
読み出すと QVariant::toList() でちゃんと取り出せる。
その場合は "LIST=1" みたいな形ではファイルに残っていないけど。
元と違う形式で読み出そうとしてるからうまくいかないって感じだな。
なんでこんな仕様なのかはよくわからないけど。

ex.
QVariantList list;
list << 1;
settings.setValue( "LIST", list );

iniファイル
LIST=@Variant(\0\0\0\t\0\0\0\x1\0\0\0\x2\0\0\0\x1)
30デフォルトの名無しさん:2009/04/21(火) 19:17:32
QTを使ったプログラムで、ユーザ定義のクラスを作る場合、
クラスは基本QObjectを継承するのがいいのでしょうか?

QObjectを継承して、Q_OBJECTマクロを使っとけば、
connectとかtr()とかでC++の機能を拡張できる事と同等なので、
やっぱり全てのユーザクラスをそう作るのが基本になるのですよね?
31デフォルトの名無しさん:2009/04/22(水) 13:11:03
C#なら

labelTitle.ForeColor = Color.Black;

で終わるところが、C++ + QTだと

QPalette pal = ui.labelTitle->palette();
pal.setColor(QPalette::Normal, QPalette::WindowText, QColor(Qt::black);
ui.labelTitle->setPalette(pal);

と書かないといけない(;´д⊂)
これって、QTの改良でなんとかならないのかな。
32デフォルトの名無しさん:2009/04/22(水) 15:19:34
int i のiを文字列にする場合、
C#では、
string str = i.ToString();
で出来るけど、QTだと
QString str = QString::number(i); //static関数
もしくは、
QString str; str.setNum(i);
になる。
これをみて、最初、QTにはどうして同じ機能が二つ用意されてるのだろうと思ったが、
前者はstatic関数で、後者はメンバ関数だった。
ああ、なるほど、たしかにどちらも必要だな、と思った。
が、しかし。
どうしてこういうことがおきるか。
C++がオブジェクト指向言語であるにもかかわらず、
その基本になってるintなどの変数がオブジェクトになってないせいではないか。
それを徹底したのがC#。
でも、intなんか4バイト程度で済むのにオブジェクトなんかにしたら容量食うし、遅くてしょうがない。
やはり、C++QTがベストなのだろうか。
なんだろうこのジレンマ。(´・ω・`)
33デフォルトの名無しさん:2009/04/22(水) 16:32:15
QSplitterの棒の位置ってデザイナで指定できる?
34デフォルトの名無しさん:2009/04/22(水) 17:39:27
QTableWidgetItemには、
setBackgroundColor()
はあるのに
setForegroundColor()
がない(´・ω・`)
QTは抜けがいっぱい。
35デフォルトの名無しさん:2009/04/22(水) 19:00:35
>>34
QTableWidgetItem には、setForeground() と setBackground() がある。
36デフォルトの名無しさん:2009/04/22(水) 19:03:13
>>28
QVariant には bool を入れられるから toBool() がある。
QString には toBool() 値に対応すべき文字列がきっちりと決められないから toBool() がない。

37デフォルトの名無しさん:2009/04/22(水) 22:21:16
>>26
autoexp.datのバグが登録されました。
http://www.qtsoftware.com/developer/task-tracker/index_html?id=251887&method=entry
なんだかうれしい。
38デフォルトの名無しさん:2009/04/22(水) 22:29:13
>>35
QTableWidgetItemのsetBackgroundColor()はObsoleteとなってました。
代わりがsetForeground() と setBackground() ですね。
39デフォルトの名無しさん:2009/04/22(水) 22:29:38
>>32
> intなんか4バイト程度で済むのにオブジェクトなんかにしたら容量食うし、遅くてしょうがない。
COOLを勉強して、ソープで童貞卒業してから出直せや
ttp://www.sage-p.com/process/cool.htm
40デフォルトの名無しさん:2009/04/22(水) 23:46:30
QTでは、関数の引数でQTのオブジェクトを渡す時は
constの参照渡し、で int とかboolの時は値渡ししてるんだね。
それが速いんだろうな
41デフォルトの名無しさん:2009/04/23(木) 00:30:59
至極当たり前のことじゃ…(´・ω・`)
42デフォルトの名無しさん:2009/04/23(木) 01:47:22
そっか(´・ω・`)
関数の戻り値で参照返しの時と、値返しの時があったんだけど、

QStringクラスの例
 QString & setNum ( int n, int base = 10 )
 QString toLower () const

これってどういう場合にどっちを使うのかな?(´・ω・`)
43デフォルトの名無しさん:2009/04/23(木) 10:24:35
QString::setNum() は自分自身を書き換える。
すでに存在しているインスタンスを書き換えて返すので参照で返せる。

QString::toLower() は新たに文字列を作成して返す。
すでに存在しているインスタンスは変更せずに、新たにインスタンスを作成するので
参照ではなく値で返す。
44デフォルトの名無しさん:2009/04/23(木) 11:30:35
自分自身の参照を返すのって、いわゆるメソッドチェーンか
Named Parameter Idiomを意識してるのかな

新しく作って返すのは依存性を考えなくて楽だけど、C++ではコピーのコストがかかるので(ry

ポインタを返すのはcreate○○みたいないかにもファクトリメソッドにして、後で解放処理をすることを使い手に強いるか
shared_ptrみたいなスマートポインタをつかって(ry
45デフォルトの名無しさん:2009/04/23(木) 11:39:02
QWidgetの色ってpallete変えれなかったんだけど、
どうやって変えるのかな(´・ω・`)
46デフォルトの名無しさん:2009/04/23(木) 11:55:37
>>45
環境と使用した ColorRole は?

palette.setColor( QPalette::Window, Qt::red );
w.setPalette( palette );
で変えられるけど。
47デフォルトの名無しさん:2009/04/23(木) 12:18:11
>>43

QString & remove ( int position, int n )

の場合、

QString str = "ABC";
str.remove(0,1); //"BC"

と代入する必要はないけど、

QString toLower () const

の場合、

QString str = "ABC";
str = str.toLower();

と代入しないといけない。

これってちょっと覚えるのが難しいね。
代入しないといけないメンバ関数って何か共通点があるのかな(´・ω・`)
48デフォルトの名無しさん:2009/04/23(木) 12:32:21
>>46
WindowsXP SP3 + VisualStudio2008 + QT4.5(open source)
です

新規作成プロジェクトで
test::test(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);

QPalette palette = ui.centralWidget->palette();
palette.setColor(QPalette::Window, Qt::red);
ui.centralWidget->setPalette(palette);

}

とやっても赤くならない(;´д⊂)
49デフォルトの名無しさん:2009/04/23(木) 12:47:09
>>47
自分自身をインプレースで変えるメソッドと(QString::setNum: 戻り値の型はどうでもいい)
新しくインスタンスを作るメソッドの違いくらいわかろうぜ。(QString::toLower 戻り値の型がQString)
Qtじゃなくてもよく出てくるから。

戻り値の型がどうでもいいのにQString::setNumがQString &を返しているのは
自分自身の参照を返すといろいろ便利だから。
中ではreturn (*this)ってやってる。

インプレースのほうが効率がいいが、参照渡しとかで他のオブジェクトに渡すと中身を勝手に変えられる心配もある
新しくインスタンスを作ればその心配はなくなるが、ちと効率が悪い。

あと、C++は関数の評価順が未定義なので
関数の引数にインプレースで変更する処理を書くと変になる。
インスタンスを作ればそこら辺はもんだいない(たぶん)

たとえば
foo(str.remove(0,1), str) // NG
foo(str.toLower(), str) // たぶんOK
50デフォルトの名無しさん:2009/04/23(木) 12:58:46
>>48

ui.centralWidget->setAutoFillBackground( true );
51デフォルトの名無しさん:2009/04/23(木) 13:34:54
>>50
赤くなった(`・ω・´)
ありがとう。さすがだねぃ
52デフォルトの名無しさん:2009/04/23(木) 18:57:42
コンボボックスが複数あって、それぞれの変更シグナルを
一つのスロット関数で受ける場合、どのコンボボックスからのシグナルなのか
判断するには、connect以外の経由で情報を渡すか、QComboBoxの継承自作クラス
で新規にシグナルを定義するしかないよね?
53デフォルトの名無しさん:2009/04/23(木) 19:19:20
>>52
QObject::sender()が使える?
54デフォルトの名無しさん:2009/04/23(木) 20:09:56
方法によっては QSignalMapper も使えるかも。
55デフォルトの名無しさん:2009/04/23(木) 20:38:46
>>18

> QVariantのtoList()は、"0,1"の場合、要素数2のリストを作ってくれますが、

リストを作りませんよ。

> "0"のようにカンマが無い場合、要素数が0になってしまうようです。
> 要素の数でなく、カンマの数で要素数が決まる?ようです。

toList() は、List と StringList が対象で、"0, 1" という文字列は対象ではないです。

> ↓もがっかりな点です。
> QStringのtoInt()関数 int toInt ( bool * ok = 0, int base = 10 ) const
> QVariantのtoInt関数 int toInt ( bool * ok = 0 ) const
> 同じ関数名なのに機能が統一されてない(´・ω・`)

QSring は文字列が入っているから base を指定する意味があります。
QVariant には文字列が入っているとは限りません、int や bool もあるので
base を指定する意味がないからです。

> たぶん、ほかにもいろいろとこういったものがあるのでしょうね(´・ω・`)。

もう少しプログラミングの基本と C++ の知識をしっかり身につけてから批判するように。
56デフォルトの名無しさん:2009/04/23(木) 20:40:25
>>31

> QPalette pal = ui.labelTitle->palette();
> pal.setColor(QPalette::Normal, QPalette::WindowText, QColor(Qt::black);
> ui.labelTitle->setPalette(pal);
>
> と書かないといけない(;´д⊂)
> これって、QTの改良でなんとかならないのかな。

palette でひとまとめにできるから統一的に色を扱えます。C# の方が古過ぎるのですよ。
57デフォルトの名無しさん:2009/04/23(木) 20:56:33
>>53
おお、QObject::sender()で出来たよ。すごい。
超シンプルな解法!さすがだねぃ
58デフォルトの名無しさん:2009/04/23(木) 21:37:51
QSettingsでiniファイルを読む場合、
childGroups()で得られるリストがファイル記述順になっててほしいんだけど、
やっぱり出来ないよね?やっぱり自作するしかないかな(´・ω・`)
59デフォルトの名無しさん:2009/04/24(金) 00:05:56
Qt 4.5.1 と Qt Creator 1.1 がリリースされてますね
60デフォルトの名無しさん:2009/04/24(金) 01:32:42
VS addin もbetaが消えたね
61デフォルトの名無しさん:2009/04/25(土) 00:44:37
4.5.1コンパイル中だが、北森2.5GHzで150分かかって、やっとwebkitだぜ。
いい加減i7 920辺りに買い替えるべき?C2Qなら30分くらいで終わるの?
62デフォルトの名無しさん:2009/04/25(土) 01:21:23
>>61
Q9450使っているけど、かなり時間食う。
63デフォルトの名無しさん:2009/04/25(土) 05:51:17
どっちかって言うとSSD買った方が速くなる
64デフォルトの名無しさん:2009/04/27(月) 10:08:28
Qtインストールしようとしてるんだけど
これインストールフォルダに日付が入ってて気持ち悪い
みんなそのままインストールしてるの?
65デフォルトの名無しさん:2009/04/27(月) 12:56:27
SDKじゃなければ、バージョンごとのディレクトリがデフォルト
66デフォルトの名無しさん:2009/04/27(月) 13:15:12
Windowsでmingwとqt libraryをインストールしたんだけど、win32api.hか何かが無いって
警告された。でもmingwのwin32apiパッケージ自体はインストールしてるし、問題ないよな。
67デフォルトの名無しさん:2009/04/27(月) 16:29:42
>>64
今ダウンロードできる最新のパッケージの場合、今月(4月)リリースされてファイル名が
qt-sdk-linux-x86-opensource-2009.02.bin(Linux版の場合)。
2009は年を表していると思うけど、最後の02は2番目のリリースと言う意味だと思う。
68デフォルトの名無しさん:2009/04/27(月) 17:37:23
>>64
気持ち悪いんだったら、自分でrenameすればokじゃない?
69デフォルトの名無しさん:2009/04/27(月) 21:48:00
>>66
随分前(といってもVer4以降だが)、MinGWすでに入れてる環境に、
MinGWのPath指定してQtインストールしたら怒られたな

いくつかファイルが足りないとかで


気持ち悪いから、MinGWのPath指定せずQtインストーラ経由でダウンロードしたら解決した
それ以来、MinGWフォルダ圧縮して保管してあるお
70デフォルトの名無しさん:2009/04/28(火) 09:27:21
>>61
とりあえず、メモリ余ってるならTEMPをRAMDISKにしてみるとか、
っていってもビルドしてみた感じボトルネックはCPUっぽいから効果薄いかな。
71デフォルトの名無しさん:2009/04/28(火) 09:49:59
>>66
CPLUS_INCLUDE_PATHとか指定すると、specsのpathを見なかった事があった。
バージョンやbuild時の設定で違うのかもしれん。
72デフォルトの名無しさん:2009/04/30(木) 17:20:50
VS2005にVisualStudioアドインを入れたんですが、
QtオプションでQtVresionsタブからAddを選んで、パスを指定しても
OKボタンがアクティブにならないので押せません。
このためか、Qtのバージョンを指定しろといわれて怒られます。
どうしたら良いんでしょうか?
73デフォルトの名無しさん:2009/04/30(木) 18:10:44
>>72
パスに日本語が含まれているとか?
74デフォルトの名無しさん:2009/04/30(木) 18:19:27
C:\Qt\2009.02\qt
を指定しているので日本語は入っていないです。
RC1で試すと押せるのですが、パスに追加されないでいます。
75デフォルトの名無しさん:2009/04/30(木) 20:51:19
ExpressEdition版というオチ
76デフォルトの名無しさん:2009/04/30(木) 22:26:59
ソースからビルドして、
C:\Qt\qt-win-opensource-src-4.5.1
を指定したら出来ました。
お騒がせしました。
77デフォルトの名無しさん:2009/05/01(金) 14:11:48
msvc2008で-staticなビルドをしようとしたんだけどなんかエラーでる・・・

みんなどんなふうにやってますか?
78デフォルトの名無しさん:2009/05/01(金) 16:50:26
基礎的なことですが教えてください_(._.)_
↓はQMapのkeys()関数です。(qmap.h)

template <class Key, class T>
Q_OUTOFLINE_TEMPLATE QList<Key> QMap<Key, T>::keys(const T &avalue) const
{
QList<Key> res;
const_iterator i = begin();
while (i != end()) {
if (i.value() == avalue)
res.append(i.key());
++i;
}
return res;
}

resをreturnで返していますが、resはこの関数内で宣言されているので、
この関数ないだけでしか存在できないのではないのでしょうか?
resって自動変数ですよね?
79デフォルトの名無しさん:2009/05/01(金) 16:57:10
78>>
自己解決しました。Orz
呼び出し元側で同じ変数が作られ、それにコピーされるわけですね
80デフォルトの名無しさん:2009/05/01(金) 20:39:37
メインウィンドウを持つアプリケーションの多重起動をしようとしたときに
既に開いているメインウィンドウがあれば、それをアクティブにするには
どうすればよいでしょう?
多重起動防止のみならQSystemSemaphoreで可能ですが。
プラットフォーム固有の処理になってしまうでしょうか?
81デフォルトの名無しさん:2009/05/01(金) 21:31:24
82デフォルトの名無しさん:2009/05/01(金) 21:53:52
>>72
商用版のVisual Studio Integrationを使って欲しいということでは。
83デフォルトの名無しさん:2009/05/01(金) 21:55:28
>>81
ありがとうございます。
こんなのがあったのですね。
SDKと分ける理由はなんでしょうね。
同梱で良い気がしますが。
84デフォルトの名無しさん:2009/05/02(土) 01:00:29
QMap、QHashのkeys(), values()で取り出せるリストを
追加順にしたいのですが、出来ないものでしょうか?
85デフォルトの名無しさん:2009/05/02(土) 11:43:32
>>84
入れるものに追加順が分かる識別子を付けて、取出したリストをソートしては?
mapやhashは、その機能からして追加順を覚えるように実装するものじゃないです。
86デフォルトの名無しさん:2009/05/02(土) 16:57:22
>>85
ちなみに.NETのコレクションクラスは追加順を覚えています。
87デフォルトの名無しさん:2009/05/02(土) 19:11:32
>>86
それが仕様だったとしても何も自慢にならない希ガス
88デフォルトの名無しさん:2009/05/02(土) 20:25:30
>86
本当だったら出鱈目な実装だね。それかたまたま何かの加減でそうなっているだけでしょう。
プログラミングの心得が少しでもあるならそんなことはおかしいと思わなくてはならない。
89デフォルトの名無しさん:2009/05/02(土) 23:16:26
>>88
心得があればMDBでKey-Value DBを作っているのと同じだと気付くと思うが。
90デフォルトの名無しさん:2009/05/03(日) 00:48:12
>>89
酷い実装だね。
91デフォルトの名無しさん:2009/05/03(日) 01:11:15
プログラマはバカだという前提の元に
プログラマに余計なことをさせないように
言語側で余計なことをするってのが
今の流行だろ
92デフォルトの名無しさん:2009/05/03(日) 01:37:35
>>90
elegantではないがintelligentな実装だよ。
93デフォルトの名無しさん:2009/05/03(日) 02:27:24
winXP+Qt4.5.1(mingw)でQtSingleApplicationを試してみました。
そのまま使うと問題ないですが、継承して使用すると
「アプリケーションを正しく初期化できませんでした(0xc0000005)。」
のメッセージボックスが出力されて落ちてしまいますが原因をご存知の方はい
らっしゃいませんか。

// MyApplication.hpp
#include <QtSingleApplication>
class MyApplication : public QtSingleApplication
{
  Q_OBJECT
public:
  MyApplication(int argc, char* argv[]) : QtSingleApplication(argc, argv) {}
};

// main.cpp
#include "MyApplication.hpp"
int main(int argc, char* argv[])
{
  MyApplication app(argc, argv);
  QMainWindow mwnd;
  mwnd.show();
  return app.exec();
}
94デフォルトの名無しさん:2009/05/03(日) 09:30:49
辞書が挿入順を記憶するのは、PHPがそうだし、Rubyも1.9でそうなったし、
Pythonも2.7では(組み込みの辞書ではなく)標準ライブラリにcollections.OrdererdDict
が追加された。

設定ファイルとか、JSONファイルとか、シリアライズ&でしりあらいずした後に
人間がテキストエディタで触りたいとかのとき、順序が記憶されると便利。
少ない追加コストで利便性が向上するのは悪くないトレードオフで、どちらかが
正しいということは無いと思うよ。
95デフォルトの名無しさん:2009/05/03(日) 10:18:39
>>94
おまい詳しいなw
LL系は知らないから参考になったお^^
96デフォルトの名無しさん:2009/05/03(日) 10:57:44
>>94
hashやmapにそんな無駄なコストを入れるなんて正しくないよ。
97デフォルトの名無しさん:2009/05/03(日) 11:11:27
>>93
argcに&が付いてないからでは?
MyApplication(int& argc, char* argv[]) : QtSingleApplication(argc, argv)
98デフォルトの名無しさん:2009/05/03(日) 11:16:08
>>96
単に用途によるってだけだろ
両方必要なら両方作るまでだし正しいも正しくないもねーよ
99デフォルトの名無しさん:2009/05/03(日) 11:48:30
>>98
検索速度を犠牲にするのだから正しくないよ。そんなのは偽物のはhash。
100デフォルトの名無しさん:2009/05/03(日) 12:32:54
>>94
比較対象が違います。
PHP、Ruby、Pythonのような元々速度が遅くて大容量データを
扱うのに向かない処理系ならそういった便利そうなものが付いて
もいいと思う。
101デフォルトの名無しさん:2009/05/03(日) 12:42:55
>>99
検索速度を犠牲にするような頭の悪い実装にするわけないでしょ?
思い込みで「酷い実装」だの批判する前にソースを読むように。

http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/corlib/System.Collections.Generic/Dictionary.cs?view=markup
102デフォルトの名無しさん:2009/05/03(日) 13:57:58
故事成語に蛇足という言葉があってだな


まぁ別物、とまでは行かなくとも少なくともオリジナルからは逸れてる
そのオリジナルと異なるものが標準と勘違いすればそこでトラブルが発生する

>>86の場合、Pythonどうのこうのじゃなく、
コンパイラ依存になる点が大きな問題


龍に足生えると飛べなくなる、とかそういう話じゃない
103デフォルトの名無しさん:2009/05/03(日) 14:02:19
>>102
Monoの仕様は以前は追加順ではなかった。
Microsoftの実装と挙動が違うということで修正された。

実はオリジナルのソースも手に入るけど、
NDAの関係があるから晒すわけにはいかない。
104デフォルトの名無しさん:2009/05/03(日) 15:06:29
>>100
PHP, Ruby はともかく、Pythonはかなりコストを意識しているぞ。
だから、組み込みのdictはそのままに拡張したOrdererdDictを追加で作った。
同じ方針でQOrdererdDictがあっても良いと思う。
105デフォルトの名無しさん:2009/05/04(月) 01:45:45
Qtのライセンスなんだけど、公式に以下のとおりに書いてある。

Qt LGPL 版の使用に際しては以下の点にご留意ください。
* Qt 4.5 以降のバージョンでのみ LGPL でも使用でき、4.5 より前のバージョンには LGPL は適用されません。
* Qt LGPL 版を使用していることを明記する必要があります。
* Qt LGPL 版のソースコードの配布を求められた際に、配布を行う義務があります。
* Qt LGPL 版に手を加えた場合には、手を加えた部分のソースコードの公開が必要です。
* Qt LGPL 版をスタティックリンクした際には、独自開発部分のソースコードを配布するか、独自開発部分のオブジェクトを配布する必要があります。
* Qt LGPL 版を使用して作成したアプリケーションのライセンスに、リバースエンジニアリングを禁止する条項を入れてはなりません。
* 同一プロジェクト内で、Qt 商用版を使用する開発者がいる場合に、他の開発者が Qt LGPL/GPL 版のみを使用することはできません。Qt を使用して作成されたソースコードに共通部分がある場合に、同一プロジェクトとみなされます。
* Qt LGPL 版で開発をした後に、Qt 商用版に移ることはできません。

得にここ
> * Qt LGPL 版のソースコードの配布を求められた際に、配布を行う義務があります。
1. これは、Qt本体のソースコードを再配布しろって読むの?
2. それとも自作アプリのソースコードを公開しろって読むの?

漏れは1.と読んだんだけど詳しい人いる?
106デフォルトの名無しさん:2009/05/04(月) 01:49:14
>>105
1.だよ
107デフォルトの名無しさん:2009/05/04(月) 02:11:25
>>106
1 で正解。LGPL のソフトウェアを改変したら、改変したソースコードを
(求めに応じて)開示する必要がある。自分で書いた部分は開示する必要は一切無し。
MPL と一緒だね。

静的リンクをしてもソースコードを公開する必要がないときちんと書いてあるのは
偉いね。
108デフォルトの名無しさん:2009/05/04(月) 02:13:28
スマソ。アンカー間違えた。>>106さんじゃなく>>105さん宛でした。失礼。
109デフォルトの名無しさん:2009/05/04(月) 09:20:03
>>101
要素が多い場合にダブルバケットにした方が速い。無駄にメモリー使っている。
110デフォルトの名無しさん:2009/05/04(月) 11:14:39
>>109
ここQtスレなんで、続きはこっちでやれや。

消しゴムじゃないMONOを使ってみるスレ 2個目
http://pc12.2ch.net/test/read.cgi/tech/1100616350/l50
111デフォルトの名無しさん:2009/05/04(月) 14:41:24
QT4.5のLGPLライセンスを使って、
VisualStudio2008で実行ファイルを作る場合、

>dumpbin /DEPENDENTS TEST.exe
(省略)
Dump of file TEST.exe

File Type: EXECUTABLE IMAGE

Image has the following dependencies:

QtCore4.dll
QtGui4.dll
MSVCR90.dll
KERNEL32.dll

Summary

1000 .data
D000 .rdata
3000 .reloc
1000 .rsrc
1B000 .text
ってなってるから、QTは動的リンクになってるんだよね?
112デフォルトの名無しさん:2009/05/04(月) 17:53:07
WindowsでのLGPLのQT使った実行ファイル作るメモ。
間違い、補足あったらご指摘おねがいします。

MSVCR90.dllがリンクされてると、他PCで動かなくなるので、
プロジェクトのプロパティ→C/C++→コード生成→ランタイムライブラリに「マルチスレッド(/MT)」
を設定する。(代わりにmsvcrt.libが静的リンクされるようになる)

それでコンパイルしてみると、
デフォルトでリンクされるLIBCMT.libとmsvcrt.libが競合するエラーになる。
これは、プロジェクトのプロパティ→リンカ→コマンドラインに「/nodefaultlib:"msvcrt.lib"」を設定すると
エラーがでなくなる。

このときの
dumpbin /DEPENDENTS TEST.exe
は、
Dump of file TEST.exe

File Type: EXECUTABLE IMAGE

Image has the following dependencies:

QtCore4.dll
QtGui4.dll
KERNEL32.dll

となる。
113デフォルトの名無しさん:2009/05/04(月) 21:16:20
msvcrt.libは静的リンクしても大丈夫なライセンスなの?
114デフォルトの名無しさん:2009/05/05(火) 07:34:25
Qtって今どういう状況なの?
数年ぐらいさわってなかったけど今みたらIDEまでフリーみたいになっちゃってるけど
コンパイラついてないんだよね
115デフォルトの名無しさん:2009/05/05(火) 14:18:21
>>114
付属してるやつもあるよ、ちなみにMINGW
116デフォルトの名無しさん:2009/05/06(水) 02:59:48
QHBoxLayout なんかに追加したウィジットって、後でそれを動的に全部消す場合、
そのウィジットのポインタを変数で保存して置かないといけないですか?
QHBoxLayout から追加されてるウィジットのポインタを取り出せないですよね?
追加してあるウィジット全部消す方法もないですよね?

↓適切でないかもしれない例プログラム
int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QWidget *window = new QWidget;

QPushButton *button1 = new QPushButton("Button1");
QPushButton *button2 = new QPushButton("Button2");
QPushButton *button3 = new QPushButton("Button3");

QHBoxLayout *layout = new QHBoxLayout;

layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);

window->setLayout(layout);

layout->removeWidget(button1);
delete button1;

window->show();
return a.exec();
}
117デフォルトの名無しさん:2009/05/06(水) 04:10:47
大抵そういうのはクラス内で行う処理で、
そういう事がしたいならクラスで保持しとけばいい

class Window : public QWidget{
public:
 Window();

private:
 void init();

 QPushButton *button1;
 QPushButton *button2;
 QPushButton *button3;
};

void Window::init(){
 button1 = new QPushButton("Button1");
 //略
 setLayout(layout);
}

そういう、どうすべきかもサンプル見ればかなり参考になる
そもそもまだオブジェクト指向を理解できてなさそうだが、
それも含めてQtのサンプルはいい教材
118デフォルトの名無しさん:2009/05/06(水) 11:17:40
単純に全部消すならtakeAtループが便利
http://doc.trolltech.com/4.5/qlayout.html#takeAt
119デフォルトの名無しさん:2009/05/06(水) 13:16:03
>>118
takeAtでやってみると、一見消えたようにみえましたが、
ウィンドウ背景色がいつもと違ったのでウィンドウ大きくしてみると
でっかいボタンがありました。どうも、QHBoxLayout からは削除されたけど、まだwindow上に
残ってる?ようです。deleteしてるのになぜ残るのでしょう?

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QWidget *window = new QWidget;

QPushButton *button1 = new QPushButton("Button1");

QHBoxLayout *layout = new QHBoxLayout;

layout->addWidget(button1);

window->setLayout(layout);

QLayoutItem *child;

while ((child = layout->takeAt(0)) != 0)
{
delete child;
}

window->show();
return a.exec();
}
120デフォルトの名無しさん:2009/05/06(水) 14:07:45
while ((child = layout->takeAt(0)) != 0)
{
  delete child->widget();
  delete child;
}

121デフォルトの名無しさん:2009/05/06(水) 21:35:13
日本語バージョンってないん?
122デフォルトの名無しさん:2009/05/06(水) 21:37:03
Qt Creatorってどんな感じなのだろうか
123デフォルトの名無しさん:2009/05/06(水) 23:14:48
>>121
何の日本語バージョン?

>>122
一言で言うと軽量のIDE

ここらへんを見れば大体わかるかと
http://www.qtsoftware.com/products-jp/developer-tools/tools-flipper/cross-platform-ide
http://www.youtube.com/view_play_list?p=22E601663DAF3A14

まぁ、無料なんだし自分で試してみるのが良いと思うよ
http://www.qtsoftware.com/downloads-jp
124デフォルトの名無しさん:2009/05/07(木) 10:16:30
>>123
軽量だっていうことで評判はまずまずらしいのだが・・・
125デフォルトの名無しさん:2009/05/07(木) 10:52:45
Qt Creator&MinGW Windows版をつかっています。
簡単なGUIアプリを作成しようとしているのですが、
Designerで作成したuiを継承したクラスをつくりました。
その中でint型の変数をつくったのですが、
Creatorのデバッガで値を見ようとすると、
Localsのリストになく、
Watcherに手入力すると、
<not in scope>と返ってきます。

ブレークポイントは同じクラスの関数内(private slots)なので、
スコープは生きているはずだと思うのですが…。
どこか認識に誤りがあるようでしたらご教示ください。
126デフォルトの名無しさん:2009/05/08(金) 01:56:33
ボタンのクリックシグナルを処理するスロット関数内で
どのボタンが押されたのか判別する方法教えてくださいm(__)m
127デフォルトの名無しさん:2009/05/08(金) 02:33:30
>>126
sender()、ダイナミックプロパティかプロパティ、QSignalMapperなど。
128デフォルトの名無しさん:2009/05/08(金) 03:07:37
>>127
ああ、重要なこと書いてないことに気づきました。ごめんなさい><
マウスのどのボタンがトリガーになったのかを判断しようとしてました。

改めて書き直します。
QTableWidgetで8つのセルに0,1を書き、1バイトのビットをセルクリック
にて0,1の反転できるソフトを作っています。これは、cellClickedシグナルで
簡単に出来たのですが、QTableWidgetに右クリックでコンテキストメニュー
が出るようにしたところ、右クリックでも0,1の反転が動いてしまう事に気づき、
右クリックの時は反転動作をしないようにしようとした次第です。

ちなみに、QPushButtonでは、ボタンが押されるのは左クリック時のみで、
右クリックでは押されませんでした。

これからすると、問題なのは、QTableWidgetのcellClickedシグナルが右クリックでも発生して
しまう事なのではないかと思えてきました。。





129デフォルトの名無しさん:2009/05/08(金) 03:51:36
>>127
>これからすると、問題なのは、QTableWidgetのcellClickedシグナルが右クリックでも発生して
>しまう事なのではないかと思えてきました。。

いややっぱり、これは正しい実装ですね。あるセルが選択された状態で、別のセル上で右クリックしたとき、
ユーザがやりたい事は最初のセルのコンテキストメニューを開きたいのではなくて、右クリックした
セルのコンテキストメニューを開きたいのだから。

となると、やっぱり、cellClickedの引数に押されたマウスボタンの情報が入ってないのが
いけない気がしてきました。。
130デフォルトの名無しさん:2009/05/08(金) 03:58:32
Qtって、ちょっと癖がある気がします。
QWidgetがタイマーの機能を持っていたり、
イベントを伝える手段がsignalと
virtual void mousePressEvent ( QMouseEvent * event )
など経由の2種類あったり、なにか統一されていない気がします。
これらって、理由があっての事なのでしょうか?
それとも、過去の手本としたライブラリのプログラミングスタイルから脱却出来ていないのでしょうか。
131デフォルトの名無しさん:2009/05/08(金) 04:07:46
>>128
どのボタンが押されたかが分かるシグナルを追加するか、イベントフィルター
でどのボタンが最後に押されたかを覚えておいて、イベントフィルターに尋ねる
ようにするというのは。
132デフォルトの名無しさん:2009/05/08(金) 10:21:15
>>130

> QWidgetがタイマーの機能を持っていたり、

QTimerを使えば、タイマー機能は独立したクラスとして扱えます。
実装上は辿り着くのは同じです。タイマー機能があるのはQObject
で、QObjectがタイマー機能を持つのは、以降のようにイベントの
2つの性質をタイマーに持たせられ、直交性を保って統一的になり
ます。

> イベントを伝える手段がsignalと
> virtual void mousePressEvent ( QMouseEvent * event )
> など経由の2種類あったり、なにか統一されていない気がします。

イベントの性質が違うから分けているのです。シグナルはセマン
ティックなイベントで、イベントハンドラーはシンタクティックな
イベントです。

> それとも、過去の手本としたライブラリのプログラミングスタイルから脱却出来ていないのでしょうか。

過去のを手本として、脱却していると思います。
133デフォルトの名無しさん:2009/05/08(金) 16:26:27
>>132
教えてくださってありがとうございます。
すみません、よく分からなかったのでもうちょっと詳しくお願いできないでしょうか。
QTが好きなので納得したいです。
シグナル→セマンティック→意味的?
イベントハンドラ→シンタクティック→?

自分で感じ取れているのは、
イベントハンドラはハードウェアレベルの低レベルイベントをそのまま。
シグナルは、ハードウェアの低レベルイベントを
高レベル(知的な解釈?)に解釈(QPushButtonが押されたとか)したもの。

という感じです。
でもなぜ二つの種類があるのかやっぱり分からないままです。
全てシグナルにしてしまったほうが分かりやすいのではないでしょうか?
134デフォルトの名無しさん:2009/05/08(金) 17:01:59
>>129
>いややっぱり、これは正しい実装ですね。あるセルが選択された状態で、別のセル上で右クリックしたとき、
>ユーザがやりたい事は最初のセルのコンテキストメニューを開きたいのではなくて、右クリックした
>セルのコンテキストメニューを開きたいのだから。

やっぱり、右クリックていうのは、そのセルを選択しコンテキストメニューを出すのが目的であって、
そのセルをクリックしたいわけでないので、クリックイベントが発生するのは間違いが気がする。。

135デフォルトの名無しさん:2009/05/08(金) 18:50:11
コンボボックスの値をマウスホイールで変える時、
コンボボックスの上からカーソルが出ないように気をつけないといけない
のがつらいのですが、なにか方法ないでしょうか?
136デフォルトの名無しさん:2009/05/09(土) 01:32:37
QtCreatorのスナップショットをソースリポジトリからとってきてwin32-msvcでコンパイルすると、
Cdb(マイクロソフトのデバッガ)が使えるようになっていますね。
Gdbよりも良さげです。
137デフォルトの名無しさん:2009/05/09(土) 09:40:49
>>136
Windowsなら、GCCではなくてこれでなくてはね。
138デフォルトの名無しさん:2009/05/09(土) 15:52:20
恐ろしくあたりまえなことを言ってる気がするんだが>>136
139デフォルトの名無しさん:2009/05/09(土) 16:10:50
>>138
Creator 1.0までは、GDBのインターフェイスしか無かったんじゃないの?
140デフォルトの名無しさん:2009/05/09(土) 20:32:27
>>139
1.1のリリース後に、CDB向けのコードが追加されています。
MinGWのGCCは遅くてGCCのバージョンも古過ぎるので、
Visual Studioのコンパイラーが使えないと開発には使えま
せんからよい流れです。
141デフォルトの名無しさん:2009/05/09(土) 20:48:55
>>140
ちゃんと読めば良かった・・・
Creator 1.1 をvs2008でコンパイルしてGDBしか無くて
憮然としてたところだった。
142デフォルトの名無しさん:2009/05/10(日) 00:43:00
>>133
最近使い始めたばっかりの自分の理解では、

イベントハンドラは、ウィジェットの振る舞いを「定義」する時に使う。
シグナルは、ウィジェットを「利用」する時に使う。

イベントを伝える手段は二通りあるけれど、それぞれを使用する目的が違う。
143デフォルトの名無しさん:2009/05/10(日) 02:46:28
カプセル化のために中田氏と外田氏を区別してるってカンジ
144デフォルトの名無しさん:2009/05/10(日) 13:00:13
>>135
フォーカスをあてて、矢印キーを使う。
マウスイベントは、マウスポインターの下にあるウィジェットに送られます。
145デフォルトの名無しさん:2009/05/10(日) 14:15:02
未だに「憮然」を見ると誤用の方の意味が、先に頭に浮かんでしまう。
146デフォルトの名無しさん:2009/05/11(月) 23:10:04
http://labs.trolltech.com/blogs/2009/05/11/qt-public-repository-launched/

Qtのリポジトリが公開されています。自動テストのコードも入っていました。
147デフォルトの名無しさん:2009/05/12(火) 05:06:31
Qt、Javaバインディング「Qt Jambi」の開発打ち切りへ
http://sourceforge.jp/magazine/09/02/23/037237

ちと古い話になるが、Java向けは消えてたのか
まぁQtはC++だからこそ需要があったのであって
Javaにはあまりなさそうだしな
148デフォルトの名無しさん:2009/05/12(火) 19:14:08
qUncompressの使い方がよくわからない・・・

httpサーバから Content-Encoding: gzip つきで帰ってきたやつを処理したいんだけど・・・

QByteArray raw(reply->readAll()); //replyはリクエストに対するQNetworkReplyのインスタンス
QByteArray uncomp(qUncompress(raw));
とやっても解凍できない・・・

マニュアルみてみると
If you want to use this function to uncompress external data compressed using zlib,
you first need to prepend four bytes to the byte array that contain the expected length
(as an unsigned integer) of the uncompressed data encoded in big-endian order
(most significant byte first).
ようするに先頭4バイトにファイルサイズをビッグエンディアンでつけろってことだとおもうんだけど、
これもなーんかうまくいかない・・・

だれかqUncompressでうまくいってる人いる?
149デフォルトの名無しさん:2009/05/12(火) 21:18:48
>>148
QNetworkReply でとってきたデータならすでに展開済みだと思う。
150デフォルトの名無しさん:2009/05/18(月) 11:40:57
ウエブログのなかの検索文字列に含まれるURLエンコードされた日本語を、デコードする方法について教えてください。
なぜか、下記の方法だと一部うまくいかないのですが、どうしてでしょうか。
環境はLinux、Qt4.5.1、文字コードはUTF-8。

(例)
QString string("%E3%81%82"); // "あ"をUTF-8でURLエンコードしたもの
QByteArray byteArray = string.toLatin1();
QUrl url = QUrl::fromEncoded(byteArray);
QString urlString = url.toString();
m_TextEdit->setText(urlString);

上記は、ちゃんと"あ"となるのですが、
QString string("ff%E3%81%82"); // "ffあ"をUTF-8でURLエンコードしたもの
なぜか"ff"を足すとするとうまくいきません
("off"という文字列が含まれたときにうまくいってなかった)。
こうすると結果は
"ffあ"ではなく、"ffd"となります。
どうしてでしょう?
151デフォルトの名無しさん:2009/05/18(月) 14:45:57
>>150
その後、分かったことですが
どうやらQTextCodecのバグ?のようです。

#include <QDebug>
#include <QTextCodec>
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

qDebug() << "ffあ";
QString string("ffあ");
qDebug() << string;
とすると、
ffあ
"ffあ"
となります。
EUC-JPとかの環境でもなるか、どなたか調べてもらえないでしょうか?
152デフォルトの名無しさん:2009/05/18(月) 14:51:23
QTextCodecの問題なら、ローカルでも再現できますよね?
QtCreatorを使っているなら、
エディタのオプションでエンコードを変えられます。
Emacsとかでもちゃんと文字コードは変えられますよ?
153デフォルトの名無しさん:2009/05/18(月) 14:53:55
>>151
訂正

今気づいたのですが、
151の結果の
ffあ
"ffあ"
は、コンソール上では
ffdy
"ffdy"
になっていたのですが、コピーして貼り付けたら
151のようにちゃんとした結果になっていました。
こちらの環境の問題かもしれません。
もう少し自分で調べてみなす。
お騒がせしました。
154デフォルトの名無しさん:2009/05/18(月) 15:03:25
てst
155デフォルトの名無しさん:2009/05/18(月) 15:32:50
>>150
どうもWidgetの表示の問題のような感じ。encode/decode系は関係ないと思う。
"ff<UTF-8>" が表示で化ける感じ。 f以外を使うと化けない。
化けない環境もあるみたいなので調査中。

QString text = QString::fromUtf8("ff\xe3\x81\x82");
QLabel label( text );
label.show();
qDebug() << text;

でqDebug()は正しく表示するが、QLabel(QLineEditやQTextEditも)はNG。
先頭の文字をf以外にすると問題なし。
156デフォルトの名無しさん:2009/05/18(月) 17:02:02
>>155
ffが先頭の文字でなくて、途中にあってもそれ以降にある日本語が化けるようです。
例えば
"testfftestあ"
また、"fiあ"
も化けします。
157デフォルトの名無しさん:2009/05/18(月) 17:31:55
>>156
フォントをDejaVu系から変えたら正常に表示されない?
こちらでは他のフォントにするとちゃんと描画される。
ややこしいバグだけど、デフォルトのフォントでうまくいかないのは困るな。
158デフォルトの名無しさん:2009/05/18(月) 18:00:14
>>157
おっしゃる通り。フォントの問題だったようです。
ただ、DejaVu系ではだめでした。
さざなみゴシックにしたら、ちゃんと表示されました。
ありがとうございました。
159デフォルトの名無しさん:2009/05/19(火) 06:29:42
レスの投稿日のような日付の文字列を1970年1月1日からの秒数に変換しようと思ったのですが、
QDateTime::toTime_tではQDateTime::fromStringで生成したデータを変換することは出来ませんでした
何か他に便利なメソッドはありますか?
160デフォルトの名無しさん:2009/05/19(火) 06:48:00
と思ったら出来ました。すいません
年の入力を2桁にしていたので1909年とされていたようです
出力も2桁にしていたので気付きませんでした
161デフォルトの名無しさん:2009/05/19(火) 10:16:54
>>151-158
この際、Qtをつかったとき、
日本語表示に一番適したフォントをまとめてみるべき?
162デフォルトの名無しさん:2009/05/20(水) 10:04:48
QTで作成したツールをVistaで起動させたら、
オブジェクトを表示させているキャンバスが、作成したGUIから外れて、
PCのモニタの左上に張り付くような感じになってしまいました。

同様の現象になった方、居ませんか?
解決策など分かりましたら、お願いします。
163デフォルトの名無しさん:2009/05/20(水) 11:14:04
doxygenのようにドキュメントを生成する方法をご存知の方いませんか?
用意されているようですがわかりません。
164デフォルトの名無しさん:2009/05/20(水) 12:31:21
>>163
doxygen はQtスタイルをサポートしてるから doxygenを使えばいいんじゃないの?
165デフォルトの名無しさん:2009/05/20(水) 12:45:34
Qtのソースにある qdoc3(tools/qdoc3) で出来るはず。
Qtのドキュメントはそれで html にしている。
166デフォルトの名無しさん:2009/05/20(水) 12:46:18
doxygenは確か、Qtリファレンスを自分でも作りたいと思った
Qt使いが作ったんじゃなかったっけ
167デフォルトの名無しさん:2009/05/20(水) 21:11:40
int QHttp::request ( const QHttpRequestHeader & header, const QByteArray & data, QIODevice * to = 0 )
の使い方が分かりません。
具体的にはmixiにログインして、
home.plのhtmlソースを取得したいのですが。
QHttpRequestHeader header("POST", QUrl("http://mixi.jp/home.pl").toEncodedPath(), 1,1);
QByteArray data((QString)("email=" + name + "&password=" + pass)).toAscii() );
//"email","password"など、POST時のIDはmixiのhtmlソースから取得しています。
QFile to("gotHtml.txt");
をnewでコンストラクトし、
実行スロットでrequest()を発射したところ、
gotHtml.txtは生成されるものの、ブランクファイルでした。
よい方法をご教示ください。
よろしくお願いします
168デフォルトの名無しさん:2009/05/20(水) 22:48:15
>>167
自分も分からないので確認するべきポイントを…
・POST先URLは正しいか?
・requestの戻り値は?
・emailにnameを渡しているが正しいか?
・メアド、パスワードは正しいか?
・リクエストがPOSTで正しいとすれば、&passwordって…おかしくないですか?
169デフォルトの名無しさん:2009/05/20(水) 23:09:24
>>168
ゴメン、適当すぎた
qtdemoにHTTPクライアントのexampleがあるから
それを参考にするといいんじゃないかな?
170デフォルトの名無しさん:2009/05/20(水) 23:15:19
QNetworkAccessManagerのほう推奨じゃないっけ
171デフォルトの名無しさん:2009/05/21(木) 10:11:32
QtってLGPLになった?
さらに将来LGPL版が亡くなる可能性は無い?
172デフォルトの名無しさん:2009/05/21(木) 10:17:17
>>171
LGPLのライセンス上無くなるって事はありえない
開発停止とかはありえるけど, 入手や使用が不可能になることは無い
173167:2009/05/21(木) 10:21:08
>>168-170
ありがとうございます。
POST先のURLなどは確認しています。
requestの戻り値は今夜確認します。
emailにnameを渡すのは、id=emailのinputにアカウント名を渡しています。
&passwordはPOSTの形式がid A,Bに対して、
"A=xxx&B=yyy"という形式だと、
POSTの仕組み関係のページに書いてあった気がします。
これも確認してみます。
qtdemoのexampleですか。
気づきませんでした、参考にします。

QNetworkAccessManagerですか。
よく分かりませんが、これも勉強してみます。

皆さん、ありがとうございました。
また詰まったらor解決できたら、
ご報告させて頂きますね。
174デフォルトの名無しさん:2009/05/21(木) 10:56:50
>QNetworkAccessManager推奨
これは知らなんだ
175デフォルトの名無しさん:2009/05/21(木) 12:12:18
>>165
ありがとうございます。
qdoc3ですが、私の環境ではQtのディレクトリ内のbinにコピーされていませんでした。
tools/qdoc3/releaseにはありましたが。
ちょっと試してみます。

>>164
折角なので本家のツールを使用してみたいと思います。
176デフォルトの名無しさん:2009/05/21(木) 15:39:05
Qt から既定のブラウザの起動って出来ますか?
177デフォルトの名無しさん:2009/05/21(木) 15:39:21
qdoc3についてのドキュメントが見当たりませんが何処かにありますか?
本家の All Tools をみたのですがないようです。
qdoc3は拡張子がqdocconfのファイルを引数とするようですがqdocconfの
書き方などのドキュメントがあればと思います。
178デフォルトの名無しさん:2009/05/21(木) 16:07:04
>>176
QDesktopServices::openUrl()
179デフォルトの名無しさん:2009/05/21(木) 17:06:51
QPainterでマウスカーソルにオブジェクトをくっつけて描画を行っているのですが、
Vistaマシンだと残像が残ってしまいます。
XPでは正常に描画され、VistaでもAero環境だとこれも正常に描画されます。

VistaでQPainterによる描画を行う場合、何か特別な処理が必要だったりするのでしょうか。
180デフォルトの名無しさん:2009/05/21(木) 18:00:37
初心者というか、使ったことないのでつが、Mac OS X にインストロールするの簡単でつか?
wxWidgetsをMac OS Xにインスコするのには数日費やしますたw
181デフォルトの名無しさん:2009/05/21(木) 18:37:43
>>174
QHttpクラスのリファレンスに書いてあるよ
http://doc.trolltech.com/4.5/qhttp.html#details
182デフォルトの名無しさん:2009/05/21(木) 19:43:00
>>180
dmg版があるし、そいつをマウントしたら親切なインストーラがあるよ。
183デフォルトの名無しさん:2009/05/21(木) 22:11:23
LPCTSTRからQStringにするにはどうしたらいいですか(;´д⊂)
調べると、QString::fromUcs2()の例があるけど、QT4にはないみたいです(⊃д⊂)
184デフォルトの名無しさん:2009/05/21(木) 23:12:04
>>183
QString::fromUtf16() は?
185デフォルトの名無しさん:2009/05/21(木) 23:42:27
>>183
#ifndef UNICODE
#define T2Q(tstr) QString::fromLocal8bit(tstr)
#else
#define T2Q(tstr) QString::fromUtf16(tstr)
#endif
186デフォルトの名無しさん:2009/05/22(金) 10:48:28
QTimeが24時間までしか扱えないみたいなのですが、
24時間以上を扱うライブラリはないのでしょうか?
187デフォルトの名無しさん:2009/05/22(金) 11:44:47
目的によっては QDateTime があるけど、QTimeの制限なしだけみたいなのはないな。
188167:2009/05/22(金) 12:21:32
>>167
です。
QNetworkAccessManagerを使ってみました。
QNetworkReply*の扱いが若干不気味ですが、
うまく行きました。

まとめると、
・SIGNAL(finished())などを受け取る前に、
QFile::write( QNetworkReply::readAll() )を呼び出すと、
ブランクファイルになる模様です。
同一スロット内に記述せずに、分けてconnectするのが賢明らしい。
・hidden属性のinput(固定値を返す)ような場合でもPOSTで渡す必要がある。
・POSTするデータ形式はQUrl::toPercentEncode()をかませる必要がある。

また、全体的なクラス構成で、
myCoreなどとしてダイアログとは別にクラスを作り、
その中でQNetworkAccessManager等を生成した場合、
thisポインタを親として渡せず(QObject*じゃなくなる)、
コンストラクタで(QObject *parent)を受け取ることができない。

回避しようとQObjectを継承すると、
今度はダイアログからの呼び出し時に、
自分で定義したメンバ関数やpublicなスロットをうまく呼び出せない。
QObject::slotMySlot()が見つかりません、と表示される…。
myCore::slotMySlot()を呼び出したいのに。
189デフォルトの名無しさん:2009/05/22(金) 13:21:21
>>188
>同一スロット内に記述せずに、分けてconnectするのが賢明らしい。
Qtのネットワーク系の多くのメソッドは非同期動作するので、リクエストだけ出して
返事を待たずに制御が帰る。相手からのレスポンスが来たら SIGNAL で通知される。
リクエストの送出とデータの受け取りは分けなくてはいけない。

>回避しようとQObjectを継承すると、
クラスの定義はどうやってる?
Q_OBJECT はあるか。
slotMySlot() は public slots: スコープで宣言しているか等。
190167:2009/05/22(金) 13:48:07
>189
>リクエストの送出とデータの受け取りは分けなくてはいけない。
QHttp::post()などでは、格納先を引数で渡していたので、
QNetworkAccessManager::postでも同じだと思っていたのです。

myCoreクラスではQObjectをpublicに継承し、
Q_OBJECTは書いたり書かなかったりいろいろ試しました。
slotMySlot()はmyCore.hでpublic slots:として宣言しました。
myCore : public QObject,
myCore::myCore( QObject* parent )
   :QObejct(parent)
がいけないんでしょうか。
191デフォルトの名無しさん:2009/05/22(金) 14:00:34
>>190
>QHttp::post()などでは、格納先を引数で渡していたので、
そうなのか。ごめん、QHttpの仕様はみてなかった。

>Q_OBJECTは書いたり書かなかったりいろいろ試しました。
Q_OBJECTはSIGNAL/SLOTに必須

class myCore : public QObject
{
Q_OBJECT
public:
myCore( QObject *parent = 0 )
: QObject(parent)
{
}

public slots:
void slotMySlot();
};

こんなクラス宣言なら問題はないはず。
これでだめだとすると connect() の方かな。
connect( replay, SIGNAL(finished()), mycore, SLOT(slotMySLot()) );
みたいな記述でいけるはずだが…。
192167:2009/05/22(金) 14:10:23
>>191
ありがとうございます
今夜もう一度試してみます。
(今は呼び出し側のQDialog内でmyCoreの機能をすべて移しています)

このmyCore内で、
manager = new QNetworkAccessManager( this );
をしたときはどうなるんでしょうか。
(myCore *)thisだと、managerのコンストラクタに、
一致するものがありませんよね?
(QObject *)でキャストするべきなのか、
ダイナミックキャストをするべきなのか…。
193デフォルトの名無しさん:2009/05/22(金) 14:18:11
>>192
キャストなしでOK。
194デフォルトの名無しさん:2009/05/22(金) 14:32:02
Qtに関する本って古いものばかりですが、新しい本が出る予定は無いですか?
それとも日本語チュートリアルとかネットに落ちてますか?
195デフォルトの名無しさん:2009/05/22(金) 20:39:52
オライリーのじゃダメなんか?
196デフォルトの名無しさん:2009/05/23(土) 06:37:10
Xp上で使ってるんですが、Qtでlibを作りました。
これを別のQtプロジェクトのappで使いたいんですが、どこにこのlibを使うことを
記述すればいいんでしょう?
makefileかと思ったんですが、run qmakeするとデフォルトに戻ってるみたいですし...。
197デフォルトの名無しさん:2009/05/23(土) 07:56:20
>>196
Windowsのときは、プロジェクトファイル(.pro)に次のように追記すればよい。
LIBS += c:/mylibs/math.lib

qmake Variable ReferenceのLIBS項目に書いてある。
198デフォルトの名無しさん:2009/05/23(土) 14:41:57
Qt creater もひとつだな
199デフォルトの名無しさん:2009/05/23(土) 15:56:28
Qt Creatorにソースファイルを個別にコンパイルする機能ってないですよね。
200デフォルトの名無しさん:2009/05/23(土) 20:14:05
QLabelに
"TEST<a href=\"http://www.google.co.jp\">TEST</a>"
などのリンクを設定して、ラベルをDisableにすると、
リンク部分の青字フォントがダブルストライク?のようになって汚くなります。
バグでしょうか?
201デフォルトの名無しさん:2009/05/24(日) 00:58:02
>>200
どのOSとスタイルで、どのフォントを指定するとなるのでしょうか。
202デフォルトの名無しさん:2009/05/24(日) 06:08:46
>>201
ごめんなさい、WinXPのXPスタイル?です。
203デフォルトの名無しさん:2009/05/24(日) 08:33:58
ソースファイルをUTF-8にするのがQTのマナーだとかってに思ってたのですが、
それではMOCが失敗するのですね?
Unicodeでなくむしろ、Shift-JISやEUCでないとQtは正しくうごかない?
204デフォルトの名無しさん:2009/05/24(日) 09:06:07
>>203
自分の環境はLinuxだけど、ソースファイルをUTF-8にしても問題は出ていない。
環境は?
205デフォルトの名無しさん:2009/05/24(日) 09:42:05
>>200
確かに表示が汚いな。
4.4と比べてみないとバグとはっきりは言い難いけど。
月曜になればいろいろチェックできると思うけど、
本家に報告してみるのも手。
206デフォルトの名無しさん:2009/05/24(日) 09:47:58
>>199
>Qt Creatorにソースファイルを個別にコンパイルする機能ってないですよね。
ファイルを指定してコンパイルすることは、多分できないと思います。
でもプロジェクトを複数個作って(読み込んで)、
プロジェクトを切り替えてビルドするというのはどうですか。
ただし、少々面倒かもしれないけれど。
207デフォルトの名無しさん:2009/05/24(日) 10:03:31
>>197 どうもです。
LIBSをキーワードに勉強してみます。
208デフォルトの名無しさん:2009/05/24(日) 12:10:20
>>200
Linuxのplastiqueスタイルだけど、
ラベルをDisableにするとEnableにする前より、リンク部分が強調されている感じになった。
同じような結果。
209デフォルトの名無しさん:2009/05/24(日) 15:11:08
>>203

>ソースファイルをUTF-8にするのがQTのマナーだとかってに思ってたのですが、

Qtは、C文字列のデフォルトエンコーディングはLatin-1で、UTF-8にするという習慣は
ありません。コンパイラーが使いたいエンコーディングを正しく処理してくれるならば、
Qt では、QTextCodec::setCodecForCStrings()などでエンコーディングを設定すれば、
Qt も正しく扱えます。

>Unicodeでなくむしろ、Shift-JISやEUCでないとQtは正しくうごかない?

コンパイラーがエンコーディングをうまく扱うとは限らないので、ソースファイルには、
マルチバイト文字は記述せずに、ASCII文字にするのが最も確実です。

一番困るのは、Visual Studio 2005以上では、日本語環境でソースコード中のC文字列
をUTF-8で書いてコンパイルすると、.exe内ではSJISになってしまうことです。
210デフォルトの名無しさん:2009/05/24(日) 15:14:11
表示が混在するような場合はどうしたらいい?

ソース自体はUTF-8で書いていて、
外部から読み出したデータをQTreeWidgetで表示させたいんだけど、
そのデータがEUC-JPなんだ。
QTreeWidgetにsetCodecとか無さそうだし…
211デフォルトの名無しさん:2009/05/24(日) 16:36:52
>>210
外部ファイルのエンコーディングがEUC-JPなら、QTextStreamでsetCodec()
して、QStringに読込めば、それをQTreeWidgetに渡して表示できます。

生のEUC-JPへののchar*ならば、QTextCodec::codecForName("eucJP")で返る
インスタンスのtoUnicode(char*)でQStringを得られます。
212194:2009/05/25(月) 10:40:45
>>195
>入門 Qt 4 プログラミング
>QT Createrの説明がない

Qt Createrの説明が無くてもおkなんですか?

それとも、
>Qt GUIプログラミング (C magazine)
の方が良いのかなぁ?

Qt導入するということになったら、
自分が本読むだけでなくて、
本渡すだけでQt Createrの説明終わらせる方が楽なようなw
213210:2009/05/25(月) 11:31:56
>>211
現状では、
QString A;
QString B;
となっていて、AがUTF-8(ソースコードで直値で文字列を指定)で、
BがEUC-JP(QBufferから読み込んでいる)なんだ。
うまく切り替えができないものでしょうか?
それとも、この構成自体がナンセンスでしょうか。
214210:2009/05/25(月) 11:36:53
ごめん、自己解決。

Aをtr("")としていて、BはそのままのQStringということで、
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
codec = QTextCodec::codecForName("euc-JP");
QTextCodec::setCodecForCString(codec);
と、trとCStringに別々に*codecを渡せばOKでした。
215デフォルトの名無しさん:2009/05/25(月) 14:46:34
>>213
そんなグローバルな設定変えなくても、QBufferからQStringを読み出すときに
QTextStream をかませて、 QTextStream の setCodec() 使えば良いのでは?
216210:2009/05/25(月) 15:20:01
QBuffer *buf;
QString answer;
QTextCodec *codecEucjp = QTextCodec::codecForName("euc-JP");

という時に、
QTextStream str;
str = buf->readline((qint64)size);
str.setCodec( codec );
answer = str.read((qint64)size);
ということでしょうか。
なるほど、これを書いていて211さんの返答がようやく理解できた気がします。
表現が私には文学的で理解ができなかったのですorz

(QTextStreamじゃなくてQBufferから読みだしてるから、
 setCodec()使えないよなぁ、と思ってしまってました)

ありがとうございました
217215:2009/05/25(月) 16:13:50
>>216
俺は PyQT ユーザーなのでリファレンス読んだだけの回答になるけど、

QTextStream strm((QIODevice*)buf); // キャストはたぶん要らない
strm.setCodec("eucJP")
QString answer = strm.readLine()

俺が「かませる」といったのは、こんな風に QBuffer を QTextStream で
wrap することであって、QBufferから一行取り出してはQTextStream に
コピーすることじゃない。
218デフォルトの名無しさん:2009/05/25(月) 16:39:45
>>200
Linux/Windows の 4.4, 4.5 で確認。
Linux 4.4: 汚い
Linux 4.5: 強調されず(Disabledな見た目ではないが、4.4ほどでもない)
Windows 4.4/4.5: 汚い

Linux の 4.5 は最初再現していたけど、 $HOME/.config/Trolltech.conf を消したら再現しなくなったorz

バグっぽいけど聞いてみないとわからないかな。
直っても青い色が変わるわけでもなさそうなので効果は限定的かも。
219デフォルトの名無しさん:2009/05/25(月) 18:53:56
>>212

> Qt Createrの説明が無くてもおkなんですか?

Qt Creatorは、IDEのひとつなのでなくてもやって行けます。
Qt 4を覚えるには、もうひとつはQt 3なので、Qt 4のこちらがよいです。

> Qt導入するということになったら、
> 自分が本読むだけでなくて、
> 本渡すだけでQt Createrの説明終わらせる方が楽なようなw

Qt Creatorのマニュアルの翻訳は、Qt Creatorの日本語化プロジェクトで
行なわれているので、できるまでは英語で我慢して、入門Qt 4プログラミングを渡せば楽でしょう。
220210:2009/05/25(月) 23:48:39
>>215
ありがとう、助かりました。
改行コードが取り除かれてることに気づかず、2時間悩んだのは秘密です(w

オライリーのは版によっては誤植が多々あるので気をつけてください。
その点、原本は英語ですが割と読みやすいです。
そもそも技術書の英語は文学と違って先入観を捨てれば読みやすいと思う。
まぁ、こればかりはホントに主観だけど。
それと、チュートリアル本としてはあまりいい構成ではないと思います。
表計算ソフトのメインウィンドウのサンプルが長く、
しかも章を跨いで打ち込みをしないと、
実行してどう動くのか掴みにくいと思います…。
私の場合はそこで諦めて、後半はパラ見だけになってしまいました。
221デフォルトの名無しさん:2009/05/26(火) 08:19:45
最近流れ早いね。

書籍はC++ GUI Programming With Qt 4 Second Editionがあれば他はいらないと思う。
英語の本とはいえ英語が赤点だった自分でも理解できているので問題ないかと。
一応、Googleブック検索でFirst Editionが読めるので、試し読みしてみることをすすめる。

Qt Creatorはまだ出たばっかりというのと軽量IDEという方向性的なため
機能がシンプルなので特に迷うことなく使用できるはず。
まぁ、裏を返せば出来ることが少ないんだけどね。
222212:2009/05/26(火) 08:53:55
>>219 221
了解。
Qt 4本買ってみます。(英語アレルギーの人が居るかもなので、日本語買うかも)
Qt Createrは軽量IDEなんですね。
とは言っても、XCodeよりは賢い動作っぽいし(マカーが怒る?)、クロスプラットフォームなところが安心ですね。
wxDevC++で作成したコードをMACに送ってXCodeコンパイルやったら辛かった。
223デフォルトの名無しさん:2009/05/26(火) 10:51:29
英語でよければまずはこれ
ttp://www.qtrac.eu/C++-GUI-Programming-with-Qt-4-1st-ed.zip

ttp://doc.qtsoftware.com/4.5/how-to-learn-qt.html
からリンクが張られているQt4本の1st edition。
2nd editionを買う前に目を通すといい。
224デフォルトの名無しさん:2009/05/26(火) 13:23:28
1st editionのやつってサンプルコードどこかに公開されてたりはしない?
あくまでちゃんと本買ってCDROMからってことなのかな?
225デフォルトの名無しさん:2009/05/26(火) 19:33:52
GUIでマウスが置かれたところにチェックボックスがあったときに
周りを別の色で強調するようにしたんだけど
FreeBSDではマウスをそこから離すと強調したところが真っ黒になってしまう

これってQtじゃなくてグラフィックドライバの問題なんですかね
226デフォルトの名無しさん:2009/05/26(火) 20:24:35
googleのブック検索で入門Qt4読めるよ。
C++GUI programing with qtもセカンドエディションがある。
227デフォルトの名無しさん:2009/05/27(水) 09:03:06
dクス>>223 >>226
何これ、かなり読めちゃうね。
228デフォルトの名無しさん:2009/05/27(水) 15:18:48
Qt Designerでダイアログにボタン等を配置してからサイズ調整すると
ダイアログのサイズが配置されているウィジェットを無視して最小にな
ってしまいますが前からこんなんでしたか?
ウィジェット群に適当なマージンをとってダイアログがリサイズされたと
記憶しているけども。
229デフォルトの名無しさん:2009/05/27(水) 16:40:37
レイアウト設定せんとだめじゃね?
230デフォルトの名無しさん:2009/05/27(水) 18:34:10
全てのウィジェットは何らかのレイアウトに配置済み。

QVBoxLayout
 -QGridLayout
  -QWidget(4個)
 -QHBoxLayout
  -QWidget(2個)
231デフォルトの名無しさん:2009/05/27(水) 21:13:23
どうもDesignerでダイアログをデザインすると、できるソース(ui_xxx.h))がおかしくないですか?
ウィジェットを色々配置して何らかのレイアウトを使うとui_xxx.hのclass Ui_xxxのメンバに無意
味と思えるQWidget*のインスタンスwidgetができるのですがなんでしょうね。
232デフォルトの名無しさん:2009/05/28(木) 07:28:23
>>228 231
多分 designer のレイアウトの使い方が間違ってる。
top level widget にレイアウトを割り当てるときには
レイアウトしたいwidgetをマークしてレイアウトを選ぶのではなく、
top level widget(この場合は最上位のDialog)を選んでレイアウトを選択する。
( レイアウトを新たに作るのではなく、Dialogにレイアウトを割り当てる)

Object Treeで Dialog の直下にレイアウトがないのに
レイアウトが反映されている状態が正常。
Dialogのプロパティに Layout があるかどうかをチェック。

designerのこの仕様は正直わかりにくい。
233デフォルトの名無しさん:2009/05/28(木) 12:09:46
それ、わかり辛いですね。
教えて頂き、ありがとうございます。
234デフォルトの名無しさん:2009/05/28(木) 22:59:58
WindowsにてMinGWでビルドしたのですが、
QtCore4.dll,QtGui4.dll,QtNetwork4.dll,mingwの(名前忘れた).dll
が配布時に必要ですよね。
これらのdllって、\qt2009.2\Qt\binから持ってくるべきですか?
それとも\qt2009.2\binから持ってくるべきですか?

それと、それらのexeファイルとdllの位置関係なのですが、
同じディレクトリに入れればいいのでしょうか。
プロジェクトファイルで指定ですか??

とりあえず、Qtの無い環境で、上のdll4つ、
同じ場所においてDependencyWalkerで走らせたのですが、
dllがないってエラー吐かれてしまいました。
235デフォルトの名無しさん:2009/05/29(金) 06:41:36
>>234
debugでビルドしたものではありませんか?
debugビルドした場合は、QtCore4d.dllなどの
ファイル名が〜dとなっているDLLに依存しますよ
236デフォルトの名無しさん:2009/05/29(金) 08:45:57
QWinWidgetクラスを使うとWin32APIとごちゃまぜで使えそうなんですが、
LinuxとかWindowsCEとかはどうやってごちゃ混ぜに書くんでしょうか?
237234:2009/05/29(金) 12:24:15
releaseですね…。
debugでビルドしたものは4MB近くあるのに対して、
releaseでビルドしたものは100KBなので、間違いないです。
ちなみに、プロジェクトファイルは以下のようになっています。

TEMPLATE = app
TARGET = ./bin/myApp
DEPENDPATH += ./src
INCLUDEPATH += ./src
238デフォルトの名無しさん:2009/05/29(金) 12:56:04
>>234
具体的にどのdllがないっていわれる?

簡単なアプリなら
app.exe QtCore4.dll QtGui4.dll mingwm10.dll だけでうごいてるけど。
画像を扱う場合などは plugins の下を適当にコピーして場所を設定する必要があるかも。
ただし、この場合のエラーは別の原因だと思うが。
239234:2009/05/29(金) 13:27:23
Dependency Walker下で実行すると、
MSJAVAとかを抜きにすれば、
QtCore4.dll
QtGui4.dll
QtNetwork4.dll
mingwm10.dll
のすべてが赤い表示になってしまいます。

画像はpngファイルをアイコンとして使っていますが、
仰っているように、
GUI表示されたときにきちんと表示されているので、
問題は他にあるのでしょう。
240デフォルトの名無しさん:2009/05/29(金) 14:09:13
Vista(Qt SDK はインストールしたがPATHは通ってない状態)で
app.exe だけある状態で Dependency Walker (2.2) を動かすと
MINGWM10.DLL, QTCORE4.DLL QTGUI4.DLL がないと言われる。

app.exe と同じディレクトリに上記の3つのDLLをコピーすると問題なし。
(WARNINGはあるが、動作する)。
コピー元は C:\Qt\2009.02\qt\bin

その場合にツリー表示されているDLLは
KERNEL32.DLL, MSVCRT.DLL, MINGWM10.DLL, QTCORE4.DLL, QTGUI4.DLL
の5つ。後ろの3つ(or +QTNETWORK4.DLL)をコピーすれば、うまくいくはずだが…。
241234:2009/05/29(金) 14:19:37
>240
ありがとうございます。
プロジェクトファイルでの記述は無関係でしょうか??
リファレンスを読む限りでは、
同一ソリューション内の別プロジェクトに、
依存する場合は云々と書かれているので、
おそらく関係ないんでしょうね…?
242デフォルトの名無しさん:2009/05/29(金) 14:31:19
>>241
ビルドできていれば問題ないとは思うけど。
proファイルはこれだけ(Creatorで作成)。
app_bundle は Macにしか効果がないようなのでCONFIGはほぼ無関係。

TARGET = app
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp

そこそこ規模のあるアプリで試しているようなので、
簡単なものでチェックしてみては。
243デフォルトの名無しさん:2009/05/29(金) 15:58:28
Qtで簡単 GUIプログラミング―Qt入門書を読む前に読む「入門書」
ttp://www.amazon.co.jp/dp/4877832211/

こんな本出てたんだなとおもったら、いきなり評価☆一つとはw
244デフォルトの名無しさん:2009/05/29(金) 16:04:35
しかしこの評価もなんだかなぁ
この人にとっては役に立たなかったんだろうけど

まぁ俺にも役立ちそうに無いが
245234:2009/05/29(金) 16:11:11
簡単なHelloWorldでもダメでしたorz
ビルド環境にも問題があるような気がしてきました。

Athlon64マシンにWindowsXP32bit版、MinGW32でビルドした場合、
動く構成はどのようになるのでしょうか。
246デフォルトの名無しさん:2009/05/29(金) 18:48:30
俺のとこはMingwでもvisual c++でも動くけどなあ。
linuxのgccでも動く。
セロリンだけど。
247デフォルトの名無しさん:2009/05/29(金) 18:51:21
思いついた!dllへのパスが通ってないんじゃね?
248デフォルトの名無しさん:2009/05/31(日) 03:01:14
Windowsのファイルのプロパティで出力されるバージョン情報を扱うクラスはありますか?
setApplicationNameやsetOrganizationNameがそれだと思ったのですが違うようで。
249デフォルトの名無しさん:2009/05/31(日) 11:35:32
250デフォルトの名無しさん:2009/05/31(日) 12:11:10
>>249
VERSIONは与えられました。
qmakeの変数には見当たりませんが会社名等は扱えないのでしょうか?
MFCのリソースのようなものがあれば良かったのですが。
251デフォルトの名無しさん:2009/05/31(日) 13:40:42
Win32リソースのことだろ?
そういうのはwindresを使うものと思ってたが
252デフォルトの名無しさん:2009/05/31(日) 14:15:40
>>250
マニュアルにはないけれど、 QMAKE_TARGET_COMPANY

他の関係変数は QMAKE_TARGET_DESCRIPTION, QMAKE_TARGET_COPYRIGHT, QMAKE_TARGET_PRODUCT
詳しくは qmake のソースを。(qt\qmake\generators\win32\winmakefile.cpp)
253デフォルトの名無しさん:2009/05/31(日) 14:53:09
ありがとうございます。
マニュアルにないということは将来別の方法でサポートする可能性があるのでしょうかね。
qdoc3も表に出していないツールのようで、どうもDoxygenを使った方が良いようですし。
254デフォルトの名無しさん:2009/05/31(日) 15:16:14
変数名くらいは変わる可能性あるかもな。
機能がなくなることはないと思うが、気になるようならrcファイルを作って、
RC_FILE でそのファイルを指定するようにした方が確かなのかもしれない。
RC_FILE についてはマニュアルに記載してある。
255デフォルトの名無しさん:2009/05/31(日) 16:23:50
QHeaderView::setResizeMode(int, QHeaderView::ResizeMode) について質問です。

以下のようにモデルが設定されていない、あるいはモデルのデータがない状態で QHeaderView::setResizeMode(int, QHeaderView::ResizeMode) を呼ぶとプログラムが落ちます。

QTreeView view;
view.header()->setResizeMode(0, QHeaderView::Interactive);

or

QTreeView view;
QStandardItemModel *model = new QStandardItemModel();
view.setModel(model);
view.header()->setResizeMode(0, QHeaderView::Interactive);

代わりに QHeaderView::setResizeMode(QHeaderView::ResizeMode) を呼んだ場合は落ちることはありません。この動作は仕様なのでしょうか?

QHeaderViewを継承してサブクラスを作成し、第一列のみサイズ変更可能にしたいのですが・・・何か対処方法をご存知の方、別のアイディアをお持ちの方がいればよろしくお願いします。
256デフォルトの名無しさん:2009/05/31(日) 17:35:03
>>255
ASSERT出して落ちてるな。
ASSERT: "visual != -1" in file itemviews\qheaderview.cpp, line 1168
基本的に落ちるのはバグ。
qt-bugsにメール出して直してもらうのが一番。
257デフォルトの名無しさん:2009/05/31(日) 18:48:14
>>256
確認ありがとうございます。
やっぱりバグなんですかね。トラック見てもそれらしいものが見つからなかったので、とりあえずメール出してきました。
しばらくはモデルのデータセット後にsetResizeMode()を呼ぶことにします。
258デフォルトの名無しさん:2009/05/31(日) 19:05:58
floatingしていないQDockWidgetのサイズをプログラム側で動的に変更したいのですが、どこを弄ればいいですか?
259デフォルトの名無しさん:2009/05/31(日) 20:44:36
260デフォルトの名無しさん:2009/06/01(月) 02:28:28
日付が変わったら画面を更新したいんですが、日付の変更を通知するようなシグナルってありますか?
261デフォルトの名無しさん:2009/06/01(月) 10:41:15
>>260
ないので QDateTime と QTimer を使って作る。
262デフォルトの名無しさん:2009/06/01(月) 15:36:12
>>258
楽な方法は見つからなかった。

setFixedSize() を呼び出すとサイズが変えられるから SizeHint や SizePolicy を
うまく設定すれば何とかなるかもしれない。

面倒だけど QMainWindow::saveState() した結果を変更して QMainWindow::restoreState()
すれば変更できるかも。
263デフォルトの名無しさん:2009/06/02(火) 18:49:34
QHeaderViewから親のQTreeViewにアクセスする方法ってある?
QTreeView::setHeader()のソース見ると、d->header->setParent(this)っていうのがあるんだけど、QWidgetからQTreeViewへどうキャストすればいいのか分からない・・・
264デフォルトの名無しさん:2009/06/03(水) 01:04:18
>>263
QHeaderView *header = view.header();
QObject *obj = header->parent();
QTreeView *tree = qobject_cast<QTreeView*>(obj);
265デフォルトの名無しさん:2009/06/03(水) 01:31:26
>>264
できた、ありがとう! qobject_cast知らなかった、便利そう♪
266デフォルトの名無しさん:2009/06/04(木) 10:52:22
Qt Creatorのチュートリアル日本語版は無いんでつか?
267デフォルトの名無しさん:2009/06/04(木) 17:41:07
QTabWidgetでタブの配置をEast、Westにしたとき
┌┤
││
││
├┤Widget
││
││
└┤
こうではなく

┌────┤
├────┤Widget
└────┤
このような形にする方法ってありますか?
268デフォルトの名無しさん:2009/06/06(土) 12:34:56
>>266
http://sourceforge.jp/projects/qt-creator-jp/
ヘルプファイルの日本語化をされている方がいます。
269デフォルトの名無しさん:2009/06/07(日) 10:09:17
QSplitterの棒のデフォルト位置をデザイナで変更するはどうすればいいのでしょうか?
もしデザイナでできないならば、コードではどう書けばいいのでしょうか?
270デフォルトの名無しさん:2009/06/07(日) 12:32:49
>>269
Splitterの下にあるWidgetの SizePolicy -> Horizontal(Vertical)Stretch の値を
それぞれのWidgetで明示するといいみたいです。
左のWidgetでは 10, 右のWidgetは 1 とか
271デフォルトの名無しさん:2009/06/09(火) 02:28:23
QtCreatorをFreeBSDで動かせてる方いませんか?
当方Win上のVMware上のFreeBSD7.1にて、Qt4.5.1とQtCreatorのコンパイルは
何とかできたのですが、QtCreatorを実行してもウィンドウが現れないのです(;´д⊂)

PortsのKDE4.4.2も同時に動かしてあって、これにつかってるQt4.4.3が影響してるのか。。

QtCreatorを動かすために、gdbで手動デバッグ、やPrintfデバッグするしか手が思いつかなくて(;´д⊂)
272デフォルトの名無しさん:2009/06/09(火) 02:44:47
>>271
エラーメッセージは何て言ってるのよ? っていうかメッセージの出しかたがわからんのか?
Konsoleでqtcreatorって打って(でいいのかな?)起動してみれ。

Error:うんこが漏れました

とか出てくるからそれ読んで原因究明。出てこないんならどこかに起動してる。
別のデスクトップとか。
273デフォルトの名無しさん:2009/06/09(火) 05:30:07
Qt を使って作られたソフト例
にOperaも入れてやれ。
274デフォルトの名無しさん:2009/06/09(火) 05:32:47
Qtってのにうすうす興味があって、
いろいろ調べているうちにさらに興味が湧いてきて

・・・ついに作ってみようかなと言う気になってきた俺が居る。
275デフォルトの名無しさん:2009/06/09(火) 08:57:09
つ Qt Creator
276デフォルトの名無しさん:2009/06/09(火) 12:13:42
>>271
ごめん、エラーメッセージのこと書き忘れてた(⊃д⊂)

Konsoleで
>qtcreator.bin
とやると、
即プロンプトが帰ってきて、エラーメッセージは表示されない。
(コンソールには、QObject: Do not delete object, 'unnamed', during its event handler!ってでる)

即プロンプトが帰ってくるのが落ちてるんだと思い込んでたけど、
Win上のQtcreatorをコマンドプロンプトで起動すると、同じように即プロンプトが帰ってきたから、
これは問題ないとおもひます。

qtcreator.binからqtcreator_process_stubを呼び出してるみたい。
という状況です(;´д⊂)
277デフォルトの名無しさん:2009/06/09(火) 13:52:15
QTcreatorをデバッグするために-gつけてコンパイルする方法さがしたら、
*.proファイルのCONFIG変数にdebugを追加すればいいとあったんだけど、
自作プログラムでは-gがつくのに、QtCreatorでは付かないよ(;´д⊂)
なんでかな。
CFLAGとかに追加するのをやってみる。
278デフォルトの名無しさん:2009/06/09(火) 14:41:35
>>277
qmake qtcreator.pro -r CONFIG+=debug
で Makefile を作ってみると -g はついているけど。
279デフォルトの名無しさん:2009/06/09(火) 14:47:15
>>278
おおありがとう(;´д⊂)
やってみる
280デフォルトの名無しさん:2009/06/09(火) 14:49:25
>>278
-gつきでコンパイル始まったよ
ほんとありがとう!
281デフォルトの名無しさん:2009/06/09(火) 18:42:26
Linux + Qtで printf("\a");で音が出ない
systen("beep");でも無音
G++ で書くと、どちらも鳴るのになぜ?
282デフォルトの名無しさん:2009/06/09(火) 21:37:48
>>281
"\a"って音を出すんだっけ?
音とは限らない何らかの信号をだせばいいんじゃなかったっけか?

まあ全然分からんから誰か頼むわ。
283274:2009/06/09(火) 21:38:34
>>275
あんがと!
よし!やってみるわ。
ただ趣味グラマだから実際にプログラミングできるのは
相当先になりそうだがね。
284デフォルトの名無しさん:2009/06/09(火) 23:00:11
ファイルパスが存在し得るものかどうかを判定したいのですが、便利な関数はありますか?
*等を含んでいるものや、/が連続するようなパスなどは無効と判定したいのですが・・・
285デフォルトの名無しさん:2009/06/10(水) 00:55:44
QtCtreatorをデバッグしてるものですが、
QtCreatorをgdbでデバッグしてみると、
エラーで落ちてました。エラーメッセージを吐くコードがちゃんと
あったのですが、ターミナルにはログメッセージがでないようでした。
qDebug()でデバッグしようとしたら、その文字列さえもターミナルにでてこ無くて、
調べてみたところ、QtSingleApplicationでapp変数(return.exec()するやつ)
を生成してる行以降からqDebug()が出力されなくなってました。

QtSingleApplicationって前このスレで出てた、インスタンスを複数作れないよう制限するやつですよね。
これに関して何か知ってる方いませんか?(;´д⊂)
286デフォルトの名無しさん:2009/06/10(水) 06:16:51
>>284
QDir::exists, QFile::exists, QFileInfo::exists
287デフォルトの名無しさん:2009/06/10(水) 11:56:42
>>286
284じゃないが、それは実際にファイルがあるか調べるメソッドだよ
288デフォルトの名無しさん:2009/06/10(水) 16:28:20
>>285
qDebug()関係のメッセージが表示されない原因が分かりました。
Qtのコンパイルに-no-iconvを指定すると出来ましたヽ(´ー`)ノ
289デフォルトの名無しさん:2009/06/10(水) 22:10:33
はじめまして。
メニューの項目の作り方についてご質問なのですが、
シグナルスロットを使用しない方法か、
どのメニューを選択しても同じ関数が呼ばれて、IDで識別するような方法ってありますでしょうか。
つまり、他のGUIライブラリのメニューのような使い方がしたいのです。
サンプルだとQActionを使ったシグナルスロットの方法しか書いてありませんでした。
これだと、メニューの項目数と同じだけ関数を用意しないとだめなので、
動的なメニューが作りにくいです(´Д⊂
290デフォルトの名無しさん:2009/06/10(水) 23:02:16
>>289
QAction を同じ SLOT につなげて、SLOTの中で
sender() を使ってどこからか判断したら。
QAction の文字列とかが欲しいなら
QAction *act = qobject_cast<QAction*>( sender() );
で sender() から QAction を取れるから、 act->text() とかも使える。

って、それでいいなら QMenu::triggered(QAction*) シグナル使えばいいのか。
291デフォルトの名無しさん:2009/06/11(木) 14:29:58
Qtプログラムをgprofで動作解析するためには、
QTライブラリを -pg -static つきでコンパイルし直さないといけない
と英語のページで書いてあるように思えたのですが、本当ですか?
292デフォルトの名無しさん:2009/06/11(木) 19:43:37
>>291
Qtだからというのではなく、gprofとはそういうものです。
293デフォルトの名無しさん:2009/06/11(木) 19:49:32
Doxygenスレとどっちで聞こうか悩んだのですが、
お願いします。

ttp://www.doxygen.jp/docblocks.html
ここにある
>Qtスタイルを使うことができ、
>この例が示すように、C スタイルの
>コメント・ブロックが開いた直後に
>感嘆符 (!) を追加します。
/*!
* ... text ...
*/
って書いてあります。
私はDoxygenの知識はあるのですがQtに関しては全く無知です。
Qtにもドキュメント自動生成が出来たりするのですか?
294デフォルトの名無しさん:2009/06/12(金) 01:47:31
>>293
開発元内製のqdocでドキュメント生成されていて、Qt 4.4からqdocのソースが公開されています。
Qt1のソースコードを見ると、この頃から /*!でドキュメントがソースに埋込まれていて、.docもありますね。
295デフォルトの名無しさん:2009/06/12(金) 12:35:04
>>292
すみません、確認のためにもう一回お願いします。
解析対象のプログラムを-pg -static付きでコンパイルしないといけない、というのと
QTもスタティックライブラリにコンパイルしなおさないといけないのは分かってるのですが、

それだけではくQTライブラリも、-pg 付きでコンパイルしないといけないかどうか
の答えが292であってますでしょうか?
296デフォルトの名無しさん:2009/06/12(金) 15:29:38
>>295
Qt自体をコンパイルしなおさないと、qtの中にプロファイル用の
コードが入らないから、実際にはqtの中で時間を使っているのに
プロファイル結果ではその呼び出し元が時間を使っているように
見えてしまう。

それでも良ければ別にQtをコンパイルする必要もQtをスタティック
リンクする必要もないよ。
297デフォルトの名無しさん:2009/06/12(金) 15:44:57
>>296
おお、そうなのですか。
自作プログラムだけを-pgつけてコンパイルすると、
コアダンプするようになってしまって、QT側に何かしないといけない
と思い込んでおりました。
そもそもコアダンプすることはないのですね
ありがtごうございました。調べてみます。
298296:2009/06/12(金) 15:52:58
>>297
ごめん、確認しないで書いた。
コアダンプするなら、それ調べて、Qtが原因ぽかったら再ビルド必要かも。
299デフォルトの名無しさん:2009/06/12(金) 21:32:53
>>295
いけなくはないけれど、Qtの中がプロファイルできないから、結果はスカスカで、
どこで時間がかかっているかが分からないですよ。
300デフォルトの名無しさん:2009/06/13(土) 02:05:11
Qtcreatorので、コンテナボックスを作る方法ってあるのかな?

勿論、ソースでそのまま書けば作れるんだけど、
メイン画面やダイアログみたいに見ながら簡単に作りたい。
でも、GUIツールのところを見てもちょっと見当たらないんだよね。
301デフォルトの名無しさん:2009/06/13(土) 02:06:05
>>300
あ、ゴメン、大間違い。

コンテナボックスじゃなくて、コンテキストメニューのことです。
302デフォルトの名無しさん:2009/06/13(土) 16:16:36
UNICODEMAP_JPをアプリ側で設定してもコーデックに反映されません
getenvで確認しても環境変数自体は設定できているようなのですが、QTextEdit等に表示すると反映されていませんでした
何が問題なのでしょうか?
環境はWindowsXPでQt4.5.1を動的リンクして使っています
303デフォルトの名無しさん:2009/06/13(土) 16:49:56
Qtをソースコードから入れたい場合どうすればよいのでしょうか
304デフォルトの名無しさん:2009/06/13(土) 17:27:14
あきらめろ
305デフォルトの名無しさん:2009/06/14(日) 18:04:38
>>302
俺も前に調べたんだけど、main関数の最初に環境変数書き換えても間に合わないみたい
実行時に変えたいならランチャーを作成するしかないんじゃないかな
306デフォルトの名無しさん:2009/06/14(日) 23:20:45
307デフォルトの名無しさん:2009/06/15(月) 21:26:20
addin入れられなくても
パス指定したらvisual studio EEでQt使えるよね?
308デフォルトの名無しさん:2009/06/15(月) 21:29:02
>>307
そりゃ使えるよ
309デフォルトの名無しさん:2009/06/15(月) 22:02:54
class MainWindowにclass Dialogをメンバ変数として持ち、Dialogから
MianWindowないの関数を呼び出すと、関数までは飛べるんですが、
その後終了してしまいます。
Qtのsignal slotの流れが壊れてしまうのかと思うんですが、
何か、呼び出された側から、呼出し側の関数を呼ぶ方法がありますか?
310309:2009/06/16(火) 21:21:24
自分でslotを作れたんですね。
311デフォルトの名無しさん:2009/06/17(水) 20:41:44
メインウィンドウ内に、lineEditが3つあって、そのうちの1つにフォーカスを
移すにはどうするの
タブを移動するには
312デフォルトの名無しさん:2009/06/18(木) 20:43:11
QWSInputMethodの役目がよく分からないんですが、自分でウィジェットを作ったときに
日本語入力を可能にするためのもの?
別アプリに文字列送信とかも出来るんでしょうか。
ググっても情報がないもんで...。
別アプリに送信できるとうれしいんですけど。
313デフォルトの名無しさん:2009/06/18(木) 22:21:32
>>312
Qt for Embedded Linux で Input Method を実装するためのもの。
X11 を使わない組み込みLinuxだとIMのためのプロトコルがないため、
このクラスを使って実装する。
X11 とか Windows で使っているなら無関係。

別アプリとの通信は X11 だと QtDBUS があるけど、
Windows や Mac だと IPC 使って自分で書かないとだめだったかも。
314デフォルトの名無しさん:2009/06/18(木) 22:39:35
別のプログラムのウィンドウ情報を取得することはできますか?
ウィンドウ位置とタイトルを取得したいのですが・・・
315デフォルトの名無しさん:2009/06/19(金) 15:57:49
What is your environment?
316デフォルトの名無しさん:2009/06/19(金) 19:40:50
>>312
Qt for Embedded Linuxで日本語入力を実装するときに使います。
Qt for Embedded Linuxで、別アプリケーションに文字列送信したいなら、QCOPを使えば簡単にできます。
317314:2009/06/19(金) 19:50:50
>>315
すいません
WindowsXPとVistaでの使用を考えています
318デフォルトの名無しさん:2009/06/19(金) 20:46:58
ListWidget上などで、右クリックで、ポップアップメニューを出すことは
できますか?
319デフォルトの名無しさん:2009/06/20(土) 11:22:31
>>318
contextmenuをキーにしてリファレンスマニュアルを探すと分かるでしょう。
320デフォルトの名無しさん:2009/06/20(土) 17:00:11
日本語版リファレンスが糞重いな・・・
321デフォルトの名無しさん:2009/06/20(土) 17:39:36
QTreeViewを使用して、行を一行固定になるようにする方法ってありますか?
複数行ある文字列をModelにくわせたら、TreeViewも複数行で表示されてしまいます。
QTableViewでは、複数行ある文字列でも一行表示(改行以降の文字列は表示されない)されます。
でも罫線が表示されて微妙な感じです。
322デフォルトの名無しさん:2009/06/20(土) 18:57:36
>>321
QStyledItemDelegate を継承して、 displayText() を書き換えて表示する文字列を変更する。
323デフォルトの名無しさん:2009/06/20(土) 21:54:39
>>320
どこのでしょう。
324デフォルトの名無しさん:2009/06/21(日) 01:31:09
>>322
ありがとう。
QStyledItemDelegateから派生したMyDelegateクラスで以下のようにしたら思い通りになりました。

QString MyDelegate::displayText ( const QVariant & value, const QLocale & locale ) const
{
if(value.type() != QVariant::String)
return QStyledItemDelegate::displayText(value, locale);

QString text = value.toString();
QString ret = text;

for(int i = 0; i < text.count(); ++i)
{
if(text.at(i) == 10) //改行なら
{
ret = text.left(i);
break;
}
}

return ret;
}

でも気になったところが...
if(text.at(i) == 10) //改行なら
のところを
if(text.at(i) == QChar('\n'))
でも行けそうな感じしたんだけどダメでした。
どうも、QChar('\n')を110 (小文字のn)と判定してしまっています。
だれか原因分かりますか?
OS X Tiger + QT Creatorで開発しています。
325デフォルトの名無しさん:2009/06/21(日) 02:07:00
>>324
Mac は知らんけど、'\\n' だったらうまくいくとか?

自分でループ回すより QString::indexOf() を使うのおすすめ。
326デフォルトの名無しさん:2009/06/21(日) 02:59:03
以下の対応したソースをWindowsに持ってきてVS2005でビルドしたらすんなり通った。
int i = text.indexOf(QChar('\n')); // きちんとQChar('\n')は10として評価される
ret = text.left(i);

ちなみに、OSX上で、\\nってやってもダメでした。
327デフォルトの名無しさん:2009/06/21(日) 03:06:05
OSXでは、Optionキー + \ を押さないとバックスラッシュとして認識されないみたいです。
(マカーからすれば当たり前のことなのか。)
お騒がせしました。
328318:2009/06/21(日) 12:51:43
>>319
勉強してみます
ありがとうございました。
329デフォルトの名無しさん:2009/06/21(日) 12:56:18
QListWidgetでファイル名を表示してるんですが
addItemはできるんですが、削除するにはどうしたらいいんですか?
ui->listWidget->removeItemWidget(item);
かと思ったんですが、削除できません。
330デフォルトの名無しさん:2009/06/21(日) 13:51:17
>>329
QListWidgetからのアイテムの削除は、takeItem()で。
removeItemWidget()は、アイテムに設定したウィジェットの削除です。
331329:2009/06/21(日) 18:17:33
>>330
ありがとう
でも、takeItemとは、とても思いつかなかった
332デフォルトの名無しさん:2009/06/21(日) 19:00:43
WindowsとLinux(Ubuntu 8.10)の2つの環境下でQt4.5を使っています。
QtWebkitを使いたいと思っているのですが
include時に'QtWebkit': No such file or directoryと表示が出ています。
両環境ともにlibなどはインストールされているっぽいのですが…。
何か予め設定が必要なのでしょうか?
333デフォルトの名無しさん:2009/06/21(日) 19:15:27
>>332
pro ファイルに
QT += webkit
はある?
334331:2009/06/21(日) 19:42:59
>>333
できました!!
プロジェクト作る時にちゃんと聞いてきてましたね…。
見逃してました。
教えていただきありがとうございました。
まだ触り始めですが色々できそうで楽しみです。

335デフォルトの名無しさん:2009/06/22(月) 02:54:24
Janeみたいに3ペイン表示ってQtデザイナで作れますか?
336デフォルトの名無しさん:2009/06/22(月) 06:46:31
ok
337デフォルトの名無しさん:2009/06/22(月) 21:03:11
質問失礼します。
関数内で
void func(void)
{
QWizard wizard;
}
を使用するとメモリリークが発生します。
void func(void)
{
QDialog wizard;
}
を使用するとメモリリークが発生しません。

QWizardって呼ぶときとか終了する前にしないとだめな処理とか
あるのでしょうか?
環境は Qt 4.5.1 VisualStudio2008 Express
です。
メモリリークのチェック方法は、
#include <crtdbg.h>
をつかってます。

338デフォルトの名無しさん:2009/06/22(月) 22:16:08
>>335
QSplitterで縦に分割して、さらにQSplitterで横に分割すればできる。
QTDesignerでも可能
339デフォルトの名無しさん:2009/06/22(月) 22:19:59
>>337
本当に?
プログラマーの友 第八報:メモリリークと crtdbg.h
ttp://www7b.biglobe.ne.jp/~robe/pf/pf008.html
>この _CrtDumpMemoryLeaks ですが、この関数は正確には
>「この関数を呼んだ時点で開放されていないメモリの情報を表示する」関数です。
>たとえ main の最後に書いておいたとしても、
>cin などのグローバルオブジェクトで確保されたメモリは、
>まだデストラクタが呼ばれておらず開放されていないわけです。
>これまで検知してしまうので、
>メモリリークしていないにもかかわらずメモリリークしたと
>報告してしまうことがあります。
ここにあるような理由じゃないよね・・・?
340デフォルトの名無しさん:2009/06/22(月) 23:01:24
>>339
レスありがとうございます。
僕が使ったのは、
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
こっちのほうなので、影響はないぽいです。
使い方に問題がないのならば、
本当にメモリリークがあるぽいのかな?
341デフォルトの名無しさん:2009/06/23(火) 01:07:08
>>340
本当に >>337 だけで再現するの?
少なくとも >>337 だけじゃ実行できないよね?
実行できて問題が発生する最小限のコードを提示してもらわないと、
だれも君の手元のコードをデバッグできないよ。
342デフォルトの名無しさん:2009/06/23(火) 05:06:12
とりあえずサンプルソースを貼るなら
codepad
ttp://codepad.org/
ここに貼るのがオススメね。
343デフォルトの名無しさん:2009/06/23(火) 16:36:46
>>327
JIS配列の場合のみね。
ことえりの環境設定で、¥をバックスラッシュとして扱うよう変更出来る。
ただし、この場合、¥マークを出したい場合はoption + yとなる。
344デフォルトの名無しさん:2009/06/23(火) 22:12:59
>>341
ごもっともです。
症状の発生する簡単なプログラムを作りました。


>>342
ありがとうございます。
使用させていただきます。

http://codepad.org/HoQtNsqw


もしかしたら、ライブラリのコンパイルをミスったとか
そんなことないですよね・・・(泣)
他の方も同じ症状が発生するのかどうかが知りたいです。
345デフォルトの名無しさん:2009/06/23(火) 22:25:34
コンパイルできてないのに
なんで実行できたんだろう
346デフォルトの名無しさん:2009/06/23(火) 23:49:32
>>345
いえいえw
部分的にコンパイル条件が変わってしまったのかなと思っただけです。
たぶん、そんなことは希少だと思うので、
ライブラリのコンパイルは成功してると思います。
Qtは初使用なので、コンパイルが失敗してたら
ライブラリが存在しないはず。

もしかしたらリンク先消えちゃうかもしれないので
張っておきます。

#include <windows.h>
#include <crtdbg.h>
#include <QtGui/QtGui>

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinst_prev, LPSTR cmdline, int nshow)
{
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG | _CRTDBG_MODE_WNDW);
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

QApplication app(::__argc, ::__argv);
QWizard wizard;

return (0);
}


347デフォルトの名無しさん:2009/06/24(水) 00:15:07
>>344
URLがQtだ
すげぇ
348デフォルトの名無しさん:2009/06/24(水) 00:36:23
>>346
そうじゃなくて

http://codepad.org/HoQtNsqw

コンパイルエラー出てるじゃん
349デフォルトの名無しさん:2009/06/24(水) 00:40:51
>>348
馬鹿?w
350デフォルトの名無しさん:2009/06/24(水) 00:47:07
いえいえw
ばかじゃなくて
うんこです
351デフォルトの名無しさん:2009/06/24(水) 14:21:13
>>347
> URLがQtだ
よく気付いたな。
すげぇ!
352デフォルトの名無しさん:2009/06/25(木) 19:01:58
353デフォルトの名無しさん:2009/06/25(木) 22:10:59
Qtでタイトルバーがないメインウィンドウって作れるの?
コマンドラインランチャ作ろうと思って調べたけど分からんかった…
354デフォルトの名無しさん:2009/06/25(木) 22:17:45
Ubuntu9.04 Qt4.5
1台のPCで書いたQtのプログラムを、別のUbuntuPCにプロジェクトごと
コピーしたんですが、
/usr/bin/ld: cannot find -lfreetype
collect2:ld はステータス1で終了しました
のエラーでとまります。
何が原因でしょうか?
355デフォルトの名無しさん:2009/06/25(木) 22:28:05
freetype のライブラリ が入ってない
ubuntu だと freetype-devel? とかいれればいいんでね
356353:2009/06/25(木) 23:00:51
ごめん、前スレにあったわ。Qt::FramelessWindowHintを使えばいいのね。
357デフォルトの名無しさん:2009/06/25(木) 23:52:02
QT4.5.2でてるよ。
QtCreator,MSアドインも。
358デフォルトの名無しさん:2009/06/26(金) 20:41:27
Windows上のQtCreator+MinGW+gccでは、
MSVC用に提供されてるlibファイルのリンクって出来ないですよね?
359デフォルトの名無しさん:2009/06/26(金) 21:16:04
mingwで吐いたLIBとVCで吐いたLIBのバイナリヘッダを見比べてみ
360デフォルトの名無しさん:2009/06/27(土) 17:11:02
リファレンスの訳をシコシコやってるんだけど
これ見てる人いるのかな
誰も見てなかったらモチベーションが続かない・・・
361デフォルトの名無しさん:2009/06/27(土) 17:44:12
つ アクセス解析
362デフォルトの名無しさん:2009/06/27(土) 18:53:32
363デフォルトの名無しさん:2009/06/27(土) 20:57:29
>>362
それそれ
今思えば自分もリファレンス読むとき本家の英語版読むんだから
やる必要はなさそうだね
364デフォルトの名無しさん:2009/06/27(土) 22:00:03
>>363
俺は今 急がしくて新しいのに挑戦できないのだが
今度 チャンスを見つけて
Qtに浮気しようかなと思っている。
別のスレで結構良い出来だと言われているんで。

そんな俺にとっては翻訳してくれる神がいると絶対うれしい。
365364:2009/06/27(土) 22:04:13
だからこうしてQtを使ったこともないのに
このスレをROM専で見学している。
366デフォルトの名無しさん:2009/06/27(土) 22:37:41
4.5.2コンパイルできないや
367デフォルトの名無しさん:2009/06/27(土) 22:40:35
>>366

どういうこった?
368367:2009/06/28(日) 01:54:42
QT 4.5.2をVS2008使ってビルドしてみたら

ttp://labs.trolltech.com/blogs/2009/06/25/qt-452-has-been-released/

≫ Posted by Thomas on Friday, June 26, 2009 @ 15:53
と同じ現象で、QWebkitのリンクエラーが発生した。

対処方法としては、
-no-webkit
を付ければいけるみたい。その代わり、Webkitが使用できなくなる。。。
だれか、解決できた人いる?
369デフォルトの名無しさん:2009/06/28(日) 06:09:25
QNetworkReplyHandler.hのmocに失敗してるみたいだね

これエラーメッセージ
>platform\network\qt\QNetworkReplyHandler.h(0): Warning: No relevant classes found. No output generated.

でもQNetworkReplyHandler.hは4.5.1と中身一緒だから原因はさっぱり
370デフォルトの名無しさん:2009/06/28(日) 08:50:57
371デフォルトの名無しさん:2009/06/28(日) 10:44:34
>>369
QT4.5.2からVS2008に変えたんだけど、QT4.5.1はVS2008で問題なくビルドとおった?
少なくともQT4.5.1をVS2005でビルドしたときは問題なくビルドとおったけど。
372デフォルトの名無しさん:2009/06/28(日) 10:51:54
>>371
VS2008そのものではないけれど、Windows SDKつかって win32-msvc2008 でコンパイルは 4.5.1 では問題なかった。
webkit もコンパイルできた。
4.5.2 はまだトライしてなかったのでわからないけれど。
373デフォルトの名無しさん:2009/06/28(日) 11:26:04
>>371
全く同じやり方で通った
さっき4.5.1に戻したから間違いない
374364:2009/06/28(日) 13:32:43
>>370
Qt4 Note
は分かりやすそうなんだけど、内容の正確さが結構心配だわ。
同じサイトの
C++ Note
ttp://calmlight.s2.zmx.jp/CppNote/cplusplus_note.html
この辺が今ひとつ怪しい。Qtの解説は大丈夫なのかと。
375デフォルトの名無しさん:2009/06/28(日) 13:37:01
>>373

Forumでも既に問題になっているね。
返信がないから、原因はいまだ不明。
ttp://labs.trolltech.com/forums/topic/859

とりあえず、webkitをビルドしないように、-no-webkit付けて
しのぐとするか。
376デフォルトの名無しさん:2009/06/28(日) 14:25:09
>>374
触りもしないでごたくばっかり並べてるお前みたいなカスよりもよほどマシ
目障りだから消えろクズ
377デフォルトの名無しさん:2009/06/28(日) 14:38:21
>>376
まあまあ、そんなすぐ発火するなよ。
ごたくってどの辺が?
残念だが消える気は無い。
378デフォルトの名無しさん:2009/06/28(日) 20:30:32
死ね

氏ねじゃなく死ね
379デフォルトの名無しさん:2009/06/28(日) 20:38:57
>>378
・・・。

タイ━━━━||Φ|(|゚|∀|゚|)|Φ||━━━━ホ!!!
380デフォルトの名無しさん:2009/06/28(日) 23:43:06
>>374
英語のドキュメントを読めばいいじゃないの。
ソフトウェアを仕事や趣味にしているならば、英語のドキュメントを読んだ方が早く分かって楽しいですよ。
381デフォルトの名無しさん:2009/06/29(月) 19:52:16
最近Qt始めました
ネットワーク処理が良くわからんっ!


もう少し勉強しよう…
382デフォルトの名無しさん:2009/06/29(月) 23:39:42
>>380
同意ですな。
英語のマニュアルも読めないような奴が新しいことに手を出すな、って。
383デフォルトの名無しさん:2009/06/30(火) 05:35:40
そうやってすぐ排斥しようとするクセは直したほうがいいぞ
Unixコミュニティにありがちだけど
384デフォルトの名無しさん:2009/06/30(火) 05:49:22
自分の人生から英語を排斥してる人が
まずその排斥をやめろという話。
385デフォルトの名無しさん:2009/06/30(火) 09:51:54
説明文なんて単語の意味さえ分かればいいわけで、
機械翻訳でもOKさ。
386デフォルトの名無しさん:2009/06/30(火) 09:57:56
VS2008 Professionalでwebkitを含めて問題なく4.5.2をビルド出来たぞ。
387デフォルトの名無しさん:2009/06/30(火) 10:22:36
>>368に返信ついてるな

>Problem is in src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared/mocinclude.tmp
>which produced empty moc_QNetworkReplyHandler.cpp file.
>
>Just remove it and then rebuild QtWebkit again.

だそうだ
388デフォルトの名無しさん:2009/06/30(火) 12:56:14
>>384
ムチャ言うなよw
389デフォルトの名無しさん:2009/06/30(火) 13:15:26
無茶なのかよw
390デフォルトの名無しさん:2009/06/30(火) 13:15:31
中高レベルの英語すら他人に頼る奴がプログラミングに挑戦する方が無茶だよ
391デフォルトの名無しさん:2009/06/30(火) 15:19:15
敷居を下げるためにも日本語のリファレンスはあったほうがいいと思うけどね
392デフォルトの名無しさん:2009/06/30(火) 15:33:35
俺は英語読めてすごい
まで読んだ
393デフォルトの名無しさん:2009/06/30(火) 15:42:59
読むだけなら馬鹿でもできるってことだろ
そんな真っ赤になるなよ
394デフォルトの名無しさん:2009/06/30(火) 16:45:20
「恐らくコイツは、英語ができる自分を凄いと思っているのだろう」
という発想自体があり得ないよね。どんだけ低学歴なのかと。
395デフォルトの名無しさん:2009/06/30(火) 18:32:14
日本語リファレンスがあるとユーザーが増えるのは確かなわけで
ユーザーが増えないとQtの先行きも不安だから
英語で読んでる俺も和訳を応援したいと思いつつ

「じゃあお前も手伝え」とか言われたら面倒だし
しかも手伝ったら「お前和訳へたくそ」とか「なにこの超訳wwこいつ読めてねえwww」とか言われて
ショックで立ち直れなくなったらイヤなので
あえてここは「そのくらい英語で読めよwww」と煽られる前に煽っておく
396デフォルトの名無しさん:2009/06/30(火) 19:56:13
>>391
ざっと数えてみると2万ページ近く。翻訳会社に出すと1億。
162億も出して買収したNokiaに是非翻訳してもらいたい。
397デフォルトの名無しさん:2009/06/30(火) 20:39:41
try{
MainWindow w;
w.show();
return a.exec();
}
catch(char* err)
{
QMessageBox::warning(0, "System Error", err, QMessageBox::Ok);
}
としたら、エラー時突然死してしまいます。
Qtの場合catchはどこで取ればいいんでしょうか?
398デフォルトの名無しさん:2009/06/30(火) 21:54:59
pushButtonのクリックでは、SLOTを動かせるけど
pushButtonにフォーカスがあるときEnterでSLOTを動かすには?
399デフォルトの名無しさん:2009/07/01(水) 00:18:21
>>397
Qt自体は例外を使ってないから、自分でしっかりエラー処理しろ。
400デフォルトの名無しさん:2009/07/01(水) 02:24:23
>>398
多分
pushButton->setAutoDefault(true);
401デフォルトの名無しさん:2009/07/01(水) 03:48:49
>>335
それが正解
402397:2009/07/01(水) 11:01:33
>>399
了解
403デフォルトの名無しさん:2009/07/01(水) 20:12:09
>>400
できまいした。ありがとう
404デフォルトの名無しさん:2009/07/01(水) 22:46:51
I got it!
405デフォルトの名無しさん:2009/07/02(木) 01:08:09
>>387
おお、VS2008でQtWebkitのビルドが上手くいった。

公式サイト以外で、海外サイト(英語)でもいいんだけど、
QTのTipsみたいなのを纏めてる所って知ってる?

QTDemoのソースを参考にすれば、大抵のことはわかるんだけど、
纏まった資料としてどこかにないかなと。
もし無いようなら、wikiでも作って管理しようかなぁなんて思ってみたけど。
406デフォルトの名無しさん:2009/07/02(木) 01:14:25
今の段階ではLinux+GCC+Qtは採用する価値なしと判断しかけている。
なんとかWindows+VCの方向で解決したい。
407デフォルトの名無しさん:2009/07/02(木) 05:41:51
>>406
その理由は?
408デフォルトの名無しさん:2009/07/02(木) 06:20:45
>>406
なぜ?
409デフォルトの名無しさん:2009/07/02(木) 09:53:08
410デフォルトの名無しさん:2009/07/02(木) 09:59:47
>>406
mingw は ?
411デフォルトの名無しさん:2009/07/02(木) 20:52:02
Qt4.5
ItemViewとItemWidgetはどう違うの?
412デフォルトの名無しさん:2009/07/02(木) 23:26:45
>>411
Q{List,Table,Tree}ViewとQ{List,Table,Tree}Widgetの違いのことですか。
413デフォルトの名無しさん:2009/07/02(木) 23:32:44
>411
Q*ViewはQ*Modelと対で使う。Q*WidgetはQt3以前のアイテムベース。
リファレンスのModel/View Programmingくらい読んでおけ。
414デフォルトの名無しさん:2009/07/03(金) 00:40:40
415デフォルトの名無しさん:2009/07/03(金) 00:59:57
>>414
>>410じゃないが、おまいさんは何が言いたいのだ
416デフォルトの名無しさん:2009/07/03(金) 09:03:29
>>412
そうだったらQ{LIst,Table,Tree}Widgetは、最初は簡単に使えます。
しかし、拡張は低いです。例えば、 内部に独自モデルを抱えていて
差替えができないので、機能を追加できなくなって行き詰まります
だから、最初からQ{List,Table,Tree}Viewを使うようにした方がよいです。

Qt4になったときにQ*Widgetを入れなければ後で困ることは減ったで
しょう。
417411:2009/07/03(金) 09:32:34
>>416
>>413
そうか、View勉強します
ありがとう
418デフォルトの名無しさん:2009/07/03(金) 11:25:25
Windowsの、メッセージループ見たいにQtのイベント監視ルーチンを修正することはできますか?
具体的には、シリアルポートの着信を監視したいんだけど、今はタイマーイベントで
見にいってるんですが。
Qtのイベント監視ルーチンに、ポート監視ルーチンを追加できないかと
419デフォルトの名無しさん:2009/07/03(金) 12:53:35
>>418
カスタムなイベントをハンドリングしたいということですね。
それならば、イベントフィルターを使えば可能です。
参考:http://doc.qtsoftware.com/4.5/eventsandfilters.html
420デフォルトの名無しさん:2009/07/03(金) 12:55:16
>>418
Windowsでシリアルポートならこれを見てみてはどうですか。
http://sourceforge.net/projects/qextserialport/
421デフォルトの名無しさん:2009/07/03(金) 12:55:28
>>416
日本語で桶
422419:2009/07/03(金) 12:57:58
>>419
QObject::event()をオーバーライドする方法もあります。
同様に419の参考に書いてあります。
423デフォルトの名無しさん:2009/07/03(金) 13:41:41
>>421
オレも云いたかったが、親切心を無下にできんと思って触れなかったのに
貴様KYだろ
424デフォルトの名無しさん:2009/07/03(金) 18:07:15
Widgetがシングルクリックされた時だけ処理を実行したいのですが、
ダブルクリックでないことを確認するにはどうすればいいのでしょうか?
425デフォルトの名無しさん:2009/07/04(土) 00:28:13
>>421
自動翻訳か何かを使ってわざわざ書き込んでくれている外人さんと予想したが
426デフォルトの名無しさん:2009/07/04(土) 04:17:51
>>424
こちらの環境では、ダブルクリックをしたときは、mousePressEventが発生し、
さらにmouseDoubleClickEventが発生しているので、そちらもその状況にあると仮定。
まずタイマーを作り、シングルクリックイベントハンドラー内でそのタイマーをスタートさせ、
ダブルクリックの時間間隔より少し大きめの時間がたったときにシグナルを発するようにする。
このシグナルにハンドラーとなる別のスロットを接続する。
そしてその中で、ダブルクリックイベントが発生していないか確かめてから
シングルクリックに対する処理を実行すればよい。
427デフォルトの名無しさん:2009/07/04(土) 04:19:42
426つづき

実装例
(ヘッダーファイル.h)
class QTimer;
//...

// データメンバー
QTimer* m_Timer;
bool m_IsDoubleClick;
428デフォルトの名無しさん:2009/07/04(土) 04:21:58
426つづき

(実装ファイル.cpp)
#include <QMouseEvent>
#include <QApplication>
#include <QTimer>

// コンストラクターなどで
m_Timer = new QTimer(this);
m_IsDoubleClick = false;
m_Timer->setInterval(qApp->doubleClickInterval() + 10);
connect(m_Timer, SIGNAL(timeout()), this, SLOT(handleSingleClick()));
429デフォルトの名無しさん:2009/07/04(土) 04:22:46
426つづき

void MainWindow::mousePressEvent(QMouseEvent* event) // オーバーライド
{
m_IsDoubleClick = false; // ダブルクリックではないと仮定する。
m_Timer->start();
}

void MainWindow::mouseDoubleClickEvent(QMouseEvent* event) // オーバーライド
{
m_Timer->stop();
m_IsDoubleClick = true;
// ここにダブルクリックのときの処理を書く。
}

// スロット定義
void MainWindow::handleSingleClick()
{
if(!m_IsDoubleClick) {
m_Timer->stop();
// ここにシングルクリックのときの処理を書く。
}
}

もっといい実装方法があるかもしれない。
なぜか少しもたつく。
430デフォルトの名無しさん:2009/07/04(土) 04:47:19
>>425
Bingo!
431デフォルトの名無しさん:2009/07/04(土) 04:47:26
>>429
訂正
プログラム実行中にユーザがダブルクリックの間隔を変える可能性があるので、
mousePressEvent()内でタイマーをスタートする前に
m_Timer->setInterval(qApp->doubleClickInterval() + 10);
を実行したほうがいいかも。
432デフォルトの名無しさん:2009/07/04(土) 05:17:47
>>426
427 428 429 431
ごめん。mouseReleaseEventに対応していなかった。
433デフォルトの名無しさん:2009/07/04(土) 11:45:59
>>429
>なぜか少しもたつく
ダブルクリック間隔よりも長く、シングルクリックでの動作が待たされるため、
シングルクリック操作時の動作がぎくしゃくしてしまいます。
従って、シングルクリックのときにのみ処理させることはできません。

416 の外人です。日本語を勉強しました。よくなったでしょうか。
434デフォルトの名無しさん:2009/07/04(土) 11:50:58
シングルクリックと仮定して動作して、ダブルクリックだったら取り消すって設計にできればそっちの方がいいね
実際そういう実装方法は多いと思う
435デフォルトの名無しさん:2009/07/04(土) 12:01:34
>>434
>シングルクリックと仮定して動作して、ダブルクリックだったら取り消すって設計にできればそっちの方がいいね
でもそれだと、ダブルクリックだけ取得したいときに、さきにシングルクリックの処理が実行されてしまうのでは?
436デフォルトの名無しさん:2009/07/04(土) 12:05:48
QSystemTrayIconはシングルクリックかダブルクリックかのイベントを
区別して渡してくれるんだけど、あれってWindowsやDEからのイベント
だからなのかな?
437435:2009/07/04(土) 12:22:16
>>435
取り消します。
常に、ダブルクリックを無視するのではなく、そういう状況の時だけ無視するということですね。
438デフォルトの名無しさん:2009/07/04(土) 12:49:07
そもそもシングルクリックとダブルクリックで全く挙動が違うUIは
作りとしてマズいんじゃないか?人間は間違うものだし。
Windowsのexplorerにしても、
シングルクリック: 選択
ダブルクリック:(選択後に)実行
という一連の流れになってる。
439デフォルトの名無しさん:2009/07/04(土) 12:54:28
単純にダブルクリックイベントは無効にして
前回のシングルクリックからの間隔を判定して
動作を分けたらいいんでね?
440デフォルトの名無しさん:2009/07/04(土) 12:56:09
>>439が一番妥当だろうな
441デフォルトの名無しさん:2009/07/04(土) 12:59:22
>>439
シングルクリックのときだけ処理をさせようとすると、
シングルクリックがもたついた動作になるんじゃないの。
442デフォルトの名無しさん:2009/07/04(土) 13:02:11
>>426のは、
ダブルクリックイベントは有効にしておいて、
シングルクリックイベント側で、ダブルクリックと同等のものを作り
ダブルクリックと思われる間隔だったらダブルクリックイベントに渡してる

というものじゃないの?
そりゃもたつくとは思う
443デフォルトの名無しさん:2009/07/04(土) 13:04:14
>>441
ダブルクリック時にシングルクリックイベントが発生しないような
APIを使っていない限り、それは必然ではないか?
444デフォルトの名無しさん:2009/07/04(土) 13:09:12
>>443
そのAPIの中でダブルクリック待ち受け時間終了までシングルクリックの
イベントの発生を遅らせる必要があるから結局同じことだと思う。
445デフォルトの名無しさん:2009/07/04(土) 13:25:50
>>439ってmouseDoubleClickEvent使うのと全く一緒じゃないのか?
446デフォルトの名無しさん:2009/07/04(土) 13:28:10
>>445
ダブルクリックイベント発生した際、
シングルクリックイベントを取り消せるなら、ね
447デフォルトの名無しさん:2009/07/04(土) 13:33:07
>>442
シングルクリックでコントロールキーが押されていたら、シングルクリックの処理をする。
ダブルクリックのときにコントロールキーが押されていたら何もしない、
コントロールキーが押されていなかったらダブルクリックの処理をする。
こんなようにしてもたつきを避けた方がよいのでないでしょうか。
448デフォルトの名無しさん:2009/07/04(土) 13:37:19
>>446
ダブルクリックした場合、mouseDoubleClickEventがオーバーライドされてれば
mousePressEvent
mouseDoubleClickEvent
の順で呼び出される。

オーバーライドされていなければ
mousePressEvent
mousePressEvent
と呼び出されるだけだからmousePressEventで分けるのは無意味では?
449デフォルトの名無しさん:2009/07/04(土) 13:43:53
状況1:シングルクリックイベントだけ処理したいとき
状況2:ダブルクリックイベントだけ処理したいとき
状況3:シングルクリックとダブルクリックの両方に対してそれぞれの処理をしたいとき

状況1のとき
ダブルクリックイベントを無視。

状況2のとき
シングルクリックイベントを無視。

状況3のとき
どうあがこうとダブルクリックが発生する時間だけ待たないと、
最初のクリック時にダブルクリックが発生するか判断できない。
よって、このときはどうしてもシングルクリックに対する処理は遅れる。

よって、状況1と状況3があり、シングルクリックに対して処理を遅らせることができないときは、
それぞれの状況に合わせて処理を切り替えるしかない。
と思うけどあってる?
450デフォルトの名無しさん:2009/07/04(土) 14:20:47
>>449
だね

で、
>シングルクリックに対して処理を遅らせることができないときは、
>それぞれの状況に合わせて処理を切り替えるしかない。
これは>>447の案

>>439
シングルクリックイベントの処理は
1回目クリックで一定間隔待機、
2回目クリックが一定間隔内に来たらダブルクリックの処理
一定間隔過ぎても2回目クリックが来なければそのままシングルクリックの処理

>>426
毎回シングルクリックから時間計測し
ダブルクリックイベントと別にダブルクリックだったのか判定(2重判定?)
なのかな?

>>448
んー、いまいちよくわからない
解釈間違ってるかもしれないけど、
初回クリックがシングルなのか、ダブルのための1度目なのかそれで判定できる?
451デフォルトの名無しさん:2009/07/04(土) 14:52:11
多分、>>439>>448は単に実装方法の違いだけだよ

>>439は、
mousePressEventが呼び出されたらタイマースタート
timeout前にmousePressEventが再度呼ばれたらダブルクリック
timeoutしたらシングルクリック

>>448は、
mousePressEventが呼び出されたらタイマースタート
timeout前にmouseDoubleClickEventが呼ばれたらダブルクリック
timeoutしたらシングルクリック

どっちでも実装できると思うけど、前者の方が多少コードが複雑になるから、
わざわざmouseDoubleClickEventを外す必要はないって話だと思う
全然関係ないこと言ってたらゴメン
452デフォルトの名無しさん:2009/07/06(月) 01:22:27
Skypeって昔Delphiで作ってるって話だったけどいつの間にかQt/C++に変わってたんだね
453デフォルトの名無しさん:2009/07/06(月) 01:39:26
かなり前からQtだったと思うが。
454デフォルトの名無しさん:2009/07/06(月) 09:47:17
QtCreater入れて試してみた
若干コンパイルが遅い気がしたんだけどこんなもんだっけ?
455デフォルトの名無しさん:2009/07/06(月) 12:03:11
SkypeのWindows版はまだDelphiじゃない?
456デフォルトの名無しさん:2009/07/06(月) 14:25:55
うちだと若干どころかはっきりと遅いんだけど
457デフォルトの名無しさん:2009/07/06(月) 15:28:40
>>454
mocが実行されるからその分遅いとか?
458デフォルトの名無しさん:2009/07/06(月) 18:30:29
ダブルクリックが必要なソフトってエクスプローラ以外に何かあったっけ?
459デフォルトの名無しさん:2009/07/06(月) 19:01:01
>>458
ゲームとか?
460デフォルトの名無しさん:2009/07/06(月) 19:08:15
どちらにしてもダブルクリックの場合はシングルクリックの処理をした後
ダブルクリックの処理をしてるよな
461デフォルトの名無しさん:2009/07/06(月) 19:13:44
何かしら一覧表示のできるソフトはシングルクリックで選択、ダブルクリックで操作ってのが多いね
マルチメディアプレイヤーのプレイリストとか、エクセルとか
462デフォルトの名無しさん:2009/07/06(月) 19:19:39
俺も昔、シングルクリックとダブルクリックの処理をわけたいと思ったことがあったんだけど
何しようとしてたんだろう。今になると全然思い出せないから、発想がおかしかったんだろうな
463デフォルトの名無しさん:2009/07/07(火) 00:30:27
>>457
mocって一言で言って何?
464デフォルトの名無しさん:2009/07/07(火) 06:20:31
>>463
Meta-Object Compplier

QtのQObjectクラス(Qtのウィジットなど)のためにメタオブジェクト情報を生成する。
標準C++に対しての、付加機能。
ソースをmocに一度通して機能を付加して、C++のコンパイラーが許容するC++コードを生成する。
Qt開発ではこのプロセスが余計に必要になる。
標準C++ではない拡張をしていることに対して拒否反応を示す人がいるけれど、
ライブラリーに依存している以上そのライブラリーの付加機能があろうとなかろうと
あまり問題ないような気がする。
個人的な意見だけど。

参考
http://qt.linux-life.net/4/doc/ja/object.html
465デフォルトの名無しさん:2009/07/07(火) 06:23:41
>>464
>Qt開発ではこのプロセスが余計に必要になる。
Qt Creatorなどをつかっていれば(qmakeのお陰?)、mocを自動的に実行してくれるので
mocを意識しないで済む。
466デフォルトの名無しさん:2009/07/07(火) 06:53:53
>>464
>Meta-Object Compplier
ごめん。typoした。
Meta-Object Compiler
467デフォルトの名無しさん:2009/07/07(火) 06:57:13
Qt Creatorコンパイル遅すぎる
468デフォルトの名無しさん:2009/07/07(火) 07:51:47
>>467
moc,Qt, Qt Creatorなどをソースからビルドして最適化オプション指定すれば速くなるとか?
調べてないまま言っているけど。
469デフォルトの名無しさん:2009/07/07(火) 08:27:20
>>467
どのコンパイル方法と比べてどれくらい遅いですか?
Qt Creatorそのものは、コンパイルのための外部処理を呼出しているのだから、
Qt Cretaorでコンパイルが遅いならば、Qt Creatorなしでもコンンパイルが遅いはず。
470デフォルトの名無しさん:2009/07/07(火) 08:42:10
逆にLinuxネイティブだともっと速いのだろうか
471デフォルトの名無しさん:2009/07/07(火) 09:39:39
Qt Creator はコンパイルの実行前にプロジェクトをチェックしてるので
(たぶん、進捗表示用)
コンパイルを開始するまでが大きなプロジェクトだと時間がかかるな。
コンパイルが始まってからは普通にmakeするのとあまり変わらないだろうけど。
472デフォルトの名無しさん:2009/07/07(火) 12:10:29
ダブルクリック、シングルクリックの話だけど、
なんでイベント-アクセプタを使用するの?
signal-slotじゃだめなの?
教えてください偉い人
473デフォルトの名無しさん:2009/07/07(火) 12:24:34
>>472
どっちも同じだから
474デフォルトの名無しさん:2009/07/07(火) 13:32:28
MOCレベルでの実装が同じ、という意味なの??
475デフォルトの名無しさん:2009/07/07(火) 13:43:34
同じだったら統一されてると思う
476デフォルトの名無しさん:2009/07/07(火) 14:22:52
>>472
signal-slot は point-to-point な配線だ。親子関係を無視する。
それに比べ、イベントはどこかで捕まるまで階層構造を伝播する。

たとえば、ダイアログボックスの中にラベルがあったとき、ラベル上で
ダブルクリックすると、ラベルがダブルクリックを捕まえない限りは
自動で親のダイアログボックスにダブルクリックイベントが飛ぶ。
477デフォルトの名無しさん:2009/07/07(火) 23:01:03
VC2005で勉強中ですが以下の点を確認させてください。
・Qtデザイナーで任意のウィジェットのシグナルと
 QDialog 内に新規作成したスロット名をコネクトしても
 自動的にダイアログ.h とダイアログ.cpp 内に同じ名前のスロットは
 作成してくれない。ので、自分で関数名から記述する必要がある。
よろしく
478デフォルトの名無しさん:2009/07/08(水) 07:24:02
>>477
Qt Creatorを使えば、.hと.cppにスロットが自動的に作成されます。
479472:2009/07/08(水) 11:10:56
なるほど。
イベントだとクラスの階層構造を辿っていくのですね。
signal-slotだと、親なら親、子なら子でインスタンスを指定する、と。

・signal-slotの方がセーフティー
・イベントの方が実装として適している
・どちらでもあまり違いはない
の3つ場面がありうるということだと理解しました。
480デフォルトの名無しさん:2009/07/08(水) 13:23:55
遡上の途中でイベントを握り潰すケースもある
481デフォルトの名無しさん:2009/07/08(水) 14:38:43
EclipseつかってQtアプリ開発してる人っていらっしゃいます?
482デフォルトの名無しさん:2009/07/08(水) 15:56:56
Qt用のプラグイン追加すれば、GUIデザインも出きるし、
スケルトンやMakeファイルも自動生成されるから始めて使ったが、簡単だったよ。
483デフォルトの名無しさん:2009/07/08(水) 21:58:10
QtCreaterあるのにわざわざEclipse使うメリットって?
484デフォルトの名無しさん:2009/07/08(水) 22:00:55
Javaマンセー





そんなやつがQt使うメリットないか
485デフォルトの名無しさん:2009/07/08(水) 22:42:38
作成されたスケルトン見ると、C++なんだけどな。
486477:2009/07/08(水) 22:55:25
>>478
ありがとさんです。
487デフォルトの名無しさん:2009/07/09(木) 00:43:15
>>483
eclipseって激重なのにね
488デフォルトの名無しさん:2009/07/09(木) 00:44:44
そんなに遅いPC使って恥ずかしくない?
489デフォルトの名無しさん:2009/07/09(木) 00:50:01
eclipse使って無いけど使いたい気持ちは分るぞ
使い慣れた環境とかプラグインとかは重要だろ
俺もQtCreator使わずにEmacs使ってるし
490デフォルトの名無しさん:2009/07/09(木) 00:55:42
俺はvi派だったけど
QtCreatorにFakeVimがついてて飛びついた



けど、QtDesigner使わずゴリゴリ書いちゃう派だから
あんまり意味のないことに気がついた
491デフォルトの名無しさん:2009/07/09(木) 07:00:12
>>490
FakeVimってなぁに?
492デフォルトの名無しさん:2009/07/09(木) 07:30:06
>>491
viエディタと同じキー操作で編集できるようになる機能。
493デフォルトの名無しさん:2009/07/09(木) 07:51:45
>>492
vimはviを拡張したもの。
494デフォルトの名無しさん:2009/07/09(木) 14:22:44
ユーザとのフロントエンドにQtを使い、実装するロジックの作成に複数の言語を適材適所で使い分けて
一つのプロジェクトで管理するようなことが出来そうだからEclipseを選んでみた。
開発に使えるプラットホームも選ばないし。
495デフォルトの名無しさん:2009/07/09(木) 14:25:45
>>494
で、それは達成出来たのか?
496デフォルトの名無しさん:2009/07/09(木) 14:26:27
それは聞いちゃダメです><
497デフォルトの名無しさん:2009/07/09(木) 14:44:27
俺たちってなんか、それなりにフォーエバーだよな。
498デフォルトの名無しさん:2009/07/09(木) 14:45:22
一緒にすんな
499デフォルトの名無しさん:2009/07/09(木) 22:06:54
オープンソースのライセンスってソース開示しなかったらなんかペナルティあるの?
500デフォルトの名無しさん:2009/07/09(木) 22:13:01
>>499
>オープンソースのライセンス
もうちょっと勉強しようぜハニー!
Category:オープンソースライセンス - Wikipedia
ttp://ja.wikipedia.org/wiki/Category:%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9

面白いのは以下のものかな。
GNU General Public License - Wikipedia
ttp://ja.wikipedia.org/wiki/GNU_General_Public_License
GNU Lesser General Public License - Wikipedia
ttp://ja.wikipedia.org/wiki/GNU_Lesser_General_Public_License
BSDライセンス - Wikipedia
ttp://ja.wikipedia.org/wiki/BSD%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9
NYSL - Wikipedia
ttp://ja.wikipedia.org/wiki/NYSL
501デフォルトの名無しさん:2009/07/09(木) 22:15:29
おまい優しい奴だな
502デフォルトの名無しさん:2009/07/09(木) 22:22:24
>>499
開示義務のあるやつはな。
GPLモノだとときどきFSFに訴訟されてるケースがある。
503デフォルトの名無しさん:2009/07/09(木) 23:28:47
>>499
逆のイメージも想像した方がいいかもな。
自分がオープンソースにしたコードが自分の自由にならなくなった場合とか。
作った奴がライセンスを決められる。使う奴はそれに従う。
最終的にはそういったこと。
504デフォルトの名無しさん:2009/07/10(金) 00:04:35
でも、このライブラリ使ったとか言わなくてもバレるものなの?
505デフォルトの名無しさん:2009/07/10(金) 00:20:53
オプソ陣営にはバイナリハッカー部隊がいて、日夜いろいろなソフトを解析比較して
GPL違反してる奴を探してるからバレる
506デフォルトの名無しさん:2009/07/10(金) 00:30:19
なるほど、謎が解けたよ
ありがと
507デフォルトの名無しさん:2009/07/10(金) 07:06:03
>>505
> バイナリハッカー部隊
フイタ。
その知識を別の方面に使ってくれれば。。。
508デフォルトの名無しさん:2009/07/10(金) 08:09:52
ていうかか… strings と grep でばれちゃうようなことしてるやつが見つかっちゃうんよ…

509デフォルトの名無しさん:2009/07/10(金) 10:20:24
同じバグがあって見付かることも多いみたいだけどな
510デフォルトの名無しさん:2009/07/10(金) 10:55:44
本気で隠そうとしたら多分見つからないだろうね。
見つかってないライセンス違反もかなり多いと思う。
それこそ関数ごとにアセンブリコード比較したら分かる可能性もあるが
最初からそこまでやるような暇人はいないと思う。
511デフォルトの名無しさん:2009/07/10(金) 12:44:08
そもそも、適当なうpロダにバイナリだけ置いてこういう掲示板に貼って配布するだけでもライセンス違反なの?

ソース付きならセーフ?
512デフォルトの名無しさん:2009/07/10(金) 13:07:49
スレチもいいところだな
他行けよ
513デフォルトの名無しさん:2009/07/10(金) 21:47:07
>>511
ライセンスによるんじゃない?
ライセンス読まないとわからね。
514デフォルトの名無しさん:2009/07/10(金) 22:12:00
LGPL
っつーかスレち
515デフォルトの名無しさん:2009/07/10(金) 22:24:45
実際に作ったもののうpを2chに晒してみる事を想定するとライセンス関係がちょっと気になったんだ
スレチスマン
516デフォルトの名無しさん:2009/07/10(金) 22:47:14
それにしてもgtkスレ過疎ってるな
517デフォルトの名無しさん:2009/07/11(土) 11:07:06
518デフォルトの名無しさん:2009/07/11(土) 11:17:27
そりゃgtkは面倒くさいからな。
519デフォルトの名無しさん:2009/07/11(土) 13:34:58
4.5.1から4.5.2へのマイナーバージョンアップは
手動で古い方アンインストールしてから新しい方インストールするんですか?
520デフォルトの名無しさん:2009/07/11(土) 20:24:17
>>519
アップデートというのはないですね。Mac OS X SDKは、uninstallのスクリプトが入っています。
WindowsやLinuxはどうなんでしょう。
521デフォルトの名無しさん:2009/07/11(土) 20:40:51
>>520
Windows、LinuxともSDKには、アンインストーラーが入っています。
522519:2009/07/12(日) 00:35:12
>>520 >>521
ありがとうございます。アンインストールしてからインストールします。
523デフォルトの名無しさん:2009/07/13(月) 01:25:27
Constants.h

public:
static const QString str0 = "str0";
static const QString str1 = "str1";

のように各種定数を集めたクラスを作成したいのですが、このような宣言は許されないのでしょうか? 型がintやdoubleの場合はコンパイルできるのですが、QStringになるとエラーを吐かれます。
何か解決方法があればよろしくお願いしますm(_ _)m
524デフォルトの名無しさん:2009/07/13(月) 01:57:11
>>523
定数ならcharでいいんじゃないか
525デフォルトの名無しさん:2009/07/13(月) 02:03:50
>>523
おいおい、Qt関係ないぞ。C++の基本だろ?
整数型以外のメンバをクラス定義内で初期化するのは不可能。
doubleもエラーになるはずだが。
以下のように、メンバの定義時に初期化すべし。

const QString Constants::str0 = "str0";
526デフォルトの名無しさん:2009/07/13(月) 07:48:04
>>523
定数を定義したいんだったら

#define HOGE "str0"

とかすれば、いいんじゃないでしょうか?
527デフォルトの名無しさん:2009/07/13(月) 08:13:57
>>526
プリプロセッサによる置き換えは、エラーのとき分かりにくいから定数にしておいたほうがいいのでは。
528デフォルトの名無しさん:2009/07/13(月) 08:27:15
>>527
訂正
○constなオブジェクト
×定数
529デフォルトの名無しさん:2009/07/13(月) 08:34:51
>>525から読み取れるけど、補足すると
const QString Constants::str0 = "str0";
を実装ファイル(.cpp)に書けばよい。
530デフォルトの名無しさん:2009/07/13(月) 09:35:35
>doubleもエラーになるはずだが。
531デフォルトの名無しさん:2009/07/13(月) 13:04:36
>>530
馬鹿か?日本語使えないならレスするなよ
532デフォルトの名無しさん:2009/07/13(月) 13:38:48
最小化やタスクトレイに収納しても使える、グローバルホットキーの設定は
一体、どこの関数でやったらいいのでしょうか?
533デフォルトの名無しさん:2009/07/13(月) 16:30:09
すみません教えてください。
QTextEdit使って、ログ表示しようとしてます。
append()使うと、最終行に追加していけるんですが、必ず改行が追加されてしまうので、
代わりに、moveCursor(QTextCursor::End)でカーソルを最終行に持っていき、
insertPlainText()をする方法にしました。それ自体はうまくいきました。

ですが、スクロールバーが最終行に移動しないので、関数呼び出して移動させようと思うのですが、
そういう関数が見当たりません。どなたかご存知ないでしょうか。

また、よりよい方法がありましたらご教授お願いします。
534デフォルトの名無しさん:2009/07/13(月) 19:19:51
>>532
Qtライブラリには無いのかな?

Qt Centreのスレッド「Grabbing a key in X11」の中のリンクより
LibQxtライブラリのQxtGlobalShortcutが使えるみたい。
http://doc.libqxt.org/latest/classQxtGlobalShortcut.html

でも、プラットフォーム独自のショートカットでアプリケーションをアクティブに
してもらってもいいような気がするんだけど、それだとダメなの?
535デフォルトの名無しさん:2009/07/13(月) 20:30:32
>>533
#include <QScrollBar>
QScrollBar* vScrollBar = m_Editor->verticalScrollBar();
vScrollBar->setSliderPosition(vScrollBar->maximum());
536デフォルトの名無しさん:2009/07/13(月) 22:03:21
>>534
ありがとうございます。 頑張ってみます。
わざわざアクティブにするのは、色々面倒だったので。
537デフォルトの名無しさん:2009/07/14(火) 01:11:00
538デフォルトの名無しさん:2009/07/14(火) 01:21:31
仮りに9xいまでも使ってるとして
HDD寿命で壊れないか心配になったりしないのだろうか
539デフォルトの名無しさん:2009/07/14(火) 06:59:33
>>538
新しいHDDにインストールすればいい話では。
540デフォルトの名無しさん:2009/07/14(火) 17:08:38
新しくインストールするのにわざわざ(r
541デフォルトの名無しさん:2009/07/14(火) 18:05:29
まあそんなこんなで実際に使ってる人が少ないからサポートから外される訳で
542デフォルトの名無しさん:2009/07/14(火) 20:37:31
Qtで録音関係のライブラリ?API?ってないのかな
543デフォルトの名無しさん:2009/07/14(火) 22:11:18
y
544デフォルトの名無しさん:2009/07/15(水) 00:48:35
WindowsでQt Creatorの埋め込みデザイナにカスタムウィジェットを組み込みたいと思い
Qt Creatorを使ってQt\examples\designer\customwidgetpluginをビルドし
Qt\bin\designerディレクトリに入れてみたんですが、デザイナがロードしてくれません。
Qt DesignerではちゃんとQt\qt\plugins\designerに入れれば使うことができます。

調べたところ、Qt CreatorのプラグインはVCで作らないとダメだというような情報があり
実際に試してVCで作ったプラグインならちゃんとQt Creatorのデザイナでも認識されるのは確認したんですが
VCではなくQt Creatorで作ったプラグインをQt Creatorで認識させるのって無理なんですかね?

使っているQt CreatorとQtはqt-sdk-win-opensource-2009.03.1.exeに入っているものです。
545デフォルトの名無しさん:2009/07/15(水) 07:03:55
>>542
サウンドを再生するためのPhononならあるけど、
録音関係はまだ実装されていないと思います。
546デフォルトの名無しさん:2009/07/15(水) 16:25:56
一瞬QuivkTimeの方のQtかと思ったw
サウンド関係はJuceが充実しているね
http://www.rawmaterialsoftware.com/juce/
547デフォルトの名無しさん:2009/07/16(木) 15:09:31
QtCreator 1.2.1
日本語化されちゃってるよ。びっくりした。
548デフォルトの名無しさん:2009/07/16(木) 16:52:23
日本語化は1.2からじゃなかったっけ
549デフォルトの名無しさん:2009/07/16(木) 17:21:43
ローカルに保存されている画像ファイルの画像の大きさだけ知りたいのですが、
QImage::sizeよりもメモリ消費量の少ない方法はありますか?
550549:2009/07/16(木) 20:59:10
自己解決しました
QImageReader::sizeならファイルサイズ分しか使いませんでした
551デフォルトの名無しさん:2009/07/16(木) 21:31:10
>>550
模範的な自決ありがとう。
後を行く人の助けになる。
552デフォルトの名無しさん:2009/07/16(木) 21:52:09
他の質問スレの連中に549の爪の垢でも飲ませたいもんだ。
553デフォルトの名無しさん:2009/07/17(金) 09:18:10
心の底から同意する
554デフォルトの名無しさん:2009/07/18(土) 23:51:15
qt 4.5.2は、mingwのgcc 4.4(g++)でビルドできますか?
555デフォルトの名無しさん:2009/07/19(日) 02:00:43
QPixmapをstaticで宣言するとクラッシュするようなのですが、何か解決策はありませんか?
556デフォルトの名無しさん:2009/07/19(日) 02:00:49
できるよ
557デフォルトの名無しさん:2009/07/19(日) 09:50:00
>>555
どのように使っていますか。staticなQPixmapに画像をロードして、QLabelで表示した場合では、
クラッシュせずにQLabelに画像が表示されるので、staticだからというだけでは落ちません。
558555:2009/07/19(日) 20:09:05
>>557
すいません、宣言ではなく定義でした。
以下の様にstaticでQPixmapを宣言した後定義を行うと、クラッシュします。

icons.h
public:
static QPixmap icon;

icons.cpp
QPixmap icons::icon = QPixmap();

いくつかのアイコンを起動時に読み込んで以後はそれを使用したいのですが・・・何か解決方法があればよろしくお願いします。
559デフォルトの名無しさん:2009/07/19(日) 20:12:12
>>558
どこで落ちるかデバッガで確認したの?
560555:2009/07/19(日) 20:39:43

>>559
icons.cpp
QPixmap icons::icon = QPixmap();
で落ちるようです。main()に入る前に落ちるのでデバッガで確認はできていませんが、初期化を行わない場合はmain()が実行されます。QPixmapのコンストラクタをデバッグする方法ってありますか? Qt Creatorを使用しています。
561デフォルトの名無しさん:2009/07/19(日) 20:52:47
>>560
Linux上(Qt-4.5.0)で以下のコードを実行してみた。

% cat qpixmap.cpp
#include <QtGui/QPixmap>

class Foo {
static QPixmap pixmap;
};

QPixmap Foo::pixmap = QPixmap();
int main() {}

$ g++ qpixmap.cpp -I/usr/include/qt4 -lQtGui
$ ./a.out
QPixmap: Must construct a QApplication before a QPaintDevice
[2] 12778 abort ./a.out

QApplicationをインスタンス化した後じゃないと駄目だね。
てことで、iconsクラスをシングルトン化したら?
562555:2009/07/19(日) 21:16:54
>>561
QPaintDevice系のクラスはQApplicationをインスタンス化した後に構築しなければならないのですね。原因がわかりました。
以下のようにシングルトンパターンを構成することで解決できました。ありがとうございました。

icons.h
private:
icons();

public:
static icons getIcons();

icons.cpp
icons getIcons(){
static icons icons;
return(icons);
}
563デフォルトの名無しさん:2009/07/19(日) 21:23:16
>>562
return(icons);
ここで値コピーされてるのでシングルトンになっていないのでは?
564555:2009/07/19(日) 21:47:31
>>563
iconsにstaticキーワードを付与してるので問題ないと思うのですが・・・間違ってますか?
C++をいじるのは初めてなんで自信ないです(^_^;)
565デフォルトの名無しさん:2009/07/19(日) 22:08:11
>>564
icons& getIcons() {...}
として参照を返すようにしないとオブジェクトがコピーされるよ。
最低Effective C++は読んだ方がいいよ。
566デフォルトの名無しさん:2009/07/19(日) 22:15:34
>>565
参照返しちゃだめですよ。QPixmapをnewするのもだめ。QPIxmapは、reference count付きのimplicit sharedですから。
Effective C++に書かれているように、こういうクラスはコピーされるように使います。
567デフォルトの名無しさん:2009/07/19(日) 22:46:23
>>566
単純にシングルトンは駄目、と言えばいい話だろ?
568デフォルトの名無しさん:2009/07/19(日) 22:55:52
つまり>>562のコードはシングルトンではないけどQt的には推奨、ということ。
569デフォルトの名無しさん:2009/07/20(月) 03:31:15
>>567
違うよ。
570デフォルトの名無しさん:2009/07/20(月) 04:02:11
>>569
シングルトンを使えないのは事実。
それに加えて値渡ししか使ってはいけないというだけ。
571デフォルトの名無しさん:2009/07/20(月) 08:12:57
>>564
Javaの人なんだね。

自動変数とポインタを見抜けないと(C++を使うのは)難しい
572デフォルトの名無しさん:2009/07/20(月) 20:44:57
>>571
>自動変数とポインタを見抜けないと(C++を使うのは)難しい
それが見抜けない人は、
C++に限らずもはや何だって難しいと思うんだぜ。
573デフォルトの名無しさん:2009/07/20(月) 20:48:43
なこたーない。

C++のガラパゴス仕様の異常性は有名なんだから。
574デフォルトの名無しさん:2009/07/20(月) 20:49:58
>>573
それが見抜けない(初心者という意味じゃなく、頭脳という意味で)レベルの人の場合、
いくらやさしい言語でもやっぱ厳しいんじゃないかと思ったのだが。

ま、いいや。
575デフォルトの名無しさん:2009/07/20(月) 21:32:02
in Japanese please
576デフォルトの名無しさん:2009/07/20(月) 21:40:15
Windows用のVisual Studio add-inについて教えてください。
Qtの商用ライセンスを持っていない場合、add-inは使用してもいいの?

What is the Visual Studio add-in?
Answer
We want to enable everyone who downloads Qt from our website
to have the option of using Qt together with Visual Studio,
regardless of whether they choose to use a commercial evaluation version, the GPL or the LGPL.
The add-in is designed to serve this purpose.
Qt commercial license holders on Windows get access to a full Visual Studio Integration.
この最後の一行は、商用ライセンスを持っていないと使用できないといっているの?
577デフォルトの名無しさん:2009/07/20(月) 21:43:18
>>Qt commercial license holders on Windows get access to a full Visual Studio Integration.
商用ライセンス持ってる人はもっといいアドインがあるよ ってこと
今公開されてるVisual Studio Addin 1.01はLGPLで使用可能だよ
578デフォルトの名無しさん:2009/07/20(月) 21:44:08
>>576のつづき
リファレンスのInstalling Qt on Windowsより引用。
Open Source Versions of Qt is not officially supported for use with any version of Visual Studio.
Integration with Visual Studio is available as part of the Qt Commercial Editions.
これもどう判断すればいいの?
579デフォルトの名無しさん:2009/07/20(月) 22:20:22
>>578
訳せばそのままだが
* オープンソースバージョンのQtは公式にはVisual Studioでの使用をサポートしません。
  ( Visual Studio でビルドしたバイナリをサポートしてほしい場合は商用版を使え )
* Visual Studio Integration は商用版Qtの一部として提供されます。

Visual Studio Integration と Visual Studio add-in は別物。
580デフォルトの名無しさん:2009/07/20(月) 22:23:05
>>Open Source Versions of Qt is not officially supported for use with any version of Visual Studio.
>>Integration with Visual Studio is available as part of the Qt Commercial Editions.
ここで言ってるIntegrationって最近リリースされたVisual Studio Addinとは違うんじゃないのかな。
自分は>>576だけを読んで大丈夫だと思って使ってるんだけど
もしかしたら違うのかもしれない
581デフォルトの名無しさん:2009/07/20(月) 22:26:45
>>576
フリーの限定機能add-inではなく、フル機能Integrationは、商用版ユーザのみが使うことができるということです。

>>578
オープンソース版のQtは、Visual Studioで使えるかもしれないけれど正式サポートはしていません。
そして、Integration with Visual Studio (フリーのadd-inでないもの)は、商用版だけで利用可能です。ということ。
582デフォルトの名無しさん:2009/07/20(月) 22:32:56
>>577,579,580
Integrationとadd-inの区別がついていませんでした。
お騒がせしました。
ありがとうございました。
583デフォルトの名無しさん:2009/07/20(月) 22:35:56
>>581
お騒がせしました。
ありがとうございました。
584デフォルトの名無しさん:2009/07/20(月) 22:55:44
>>566
参照返しにして、デフォルトコンストラクタとコピーコンストラクタ、
それとコピー演算子をprivateにするのが、Singletonの普通の実装なんじゃない?

まあ、それにしてもQPixmapはコピーで返さないといけないけど。

>>570
Singletonが使えないってソースどこ?
585584:2009/07/20(月) 23:00:50
書いてから気がついたけど、>>570のSingletonが使えないってのは、
QPixmap自体のインスタンスを1つだけにするのが無理ってことか。
586デフォルトの名無しさん:2009/07/21(火) 06:41:37
ひとつにしなくてよいように作られているのだから。
587デフォルトの名無しさん:2009/07/21(火) 21:07:46
>>571
Javaな人は、99.9999999%がCOBOLな人と同じだからね。
588デフォルトの名無しさん:2009/07/22(水) 01:14:19
nmakeが失敗してた
寝る
589デフォルトの名無しさん:2009/07/22(水) 11:01:49
>>582
2chで聞くより直接問い合わせたほうがいいんでない?
590576,582:2009/07/22(水) 11:48:20
>>589
Open Source LicenseでAdd-inが使用できるか知りたかったのです。
商用ライセンスは、持っていないのです。
591590:2009/07/22(水) 11:52:06
これくらいの質問ならQt Softwareに問い合わせてもいいんですかね。
その辺が判断できなくて。
592デフォルトの名無しさん:2009/07/26(日) 11:03:39
ユーザーによってQToolBarがドラッグされて違うエリアに移ったとき、
どのエリアに移ったか知りたいのですが、
何か適当なシグナルやイベントハンドラーはありますか。
593592:2009/07/26(日) 11:41:41

自己解決しました。
ツールバーのmoveEvent()をハンドルし、QMainWindow::toolBarArea()
をコールするだけでした。
594デフォルトの名無しさん:2009/07/26(日) 11:53:07
>>593
またもや模範的な自決すばらしい。
595デフォルトの名無しさん:2009/07/26(日) 12:12:58
QLineEditを縦向きにして配置したいのですが、できますか。
596デフォルトの名無しさん:2009/07/26(日) 13:39:05
>>595
Graphics Viewでできます。
597595:2009/07/26(日) 13:48:35
>>596
ありがとうございます。
やってみます。
598デフォルトの名無しさん:2009/07/26(日) 21:54:06
デバッグヘルパって何ですか?
オプションの[Qt4]→[Qt Versions]の自動検出したQtのデバッグヘルパの所に赤いバツ印がついてるんですが

ちなみにQt Creator 1.2.1のバイナリだけをダウンロードし
win32-msvc2005でリビルドしたQt 4.4.3で使っています
Qt Creatorでビルドもデバッグも問題なくできます
599デフォルトの名無しさん:2009/07/27(月) 01:38:20
>>598
デバッグヘルパは Qt Creator でデバッグ時に Qt のクラスの内容をわかりやすく表示するために使われる。
QString だとか QList とか。

SDK ではなく Creator をインストールした場合にバツ印があるのは問題ない。
その場合は「リビルド」ボタンを押してヘルパを作ってやるといい。
600デフォルトの名無しさん:2009/07/27(月) 13:29:41
>>599
あの「リビルド」ボタンはデバッグヘルパをビルドするためのボタンだったんですね
赤いバツ印も緑に変わりました
ありがとうございます。
601デフォルトの名無しさん:2009/07/28(火) 19:57:59
区切り線のウィジェットってありますか?
ボタンとボタンの間に線を引きたいのですがいい方法はありませんか?

QMenuのaddSeparatorみたいなイメージで、こんな風にしたいのですが…

layout->addWidget(button1);
layout->addWidget(button2);
layout->addSeparator();
layout->addWidget(button3);
602デフォルトの名無しさん:2009/07/28(火) 20:09:38
>>601
QFrameを使う。でframeShapeをQFrame::VLineかQFrame::HLineにすれば良い。
つーかQt Designerを使ってないのか?
603デフォルトの名無しさん:2009/07/28(火) 20:35:23
>>602
ありがとうございます。
frameShapeと合わせてframeShadowにQFrame::Sunkenを指定したら
思っていたような区切り線になりました。

Qt Designer使ってません…。
604デフォルトの名無しさん:2009/07/28(火) 22:08:54
>>603
Designerでどんなコードが出るかを調べながらやると早く覚えられますよ。
605デフォルトの名無しさん:2009/07/28(火) 23:34:13
QTableViewを使ってエクセルの「ウインドウ枠を固定」のような動作をさせたいのですが、
どのように作るのが良いでしょうか?
複数のテーブルをそれらしく組み合わせるとか・・・・

良い方法があれば教えてください。よろしくお願いします。
606デフォルトの名無しさん:2009/07/29(水) 10:44:43
>>605
>複数のテーブルをそれらしく組み合わせるとか・・・・
それでいいような気がするけど。
607デフォルトの名無しさん:2009/07/30(木) 10:30:04
>>605
試してはないけれど、 Delegate を使って QModelIndex をうまくずらしてやれば
そちらでも対応できそうな気はする。
608デフォルトの名無しさん:2009/07/30(木) 19:20:06
WindowsAPIのPlaySound関数を使いたいのですが、関数実行後10秒〜30秒程で再生が止まってしまいます
QtアプリからはPlaySoundは使えないんでしょうかね?
609デフォルトの名無しさん:2009/07/30(木) 22:10:18
>>608
Windowsでも、Qtは、Windowsアプリケーションに過ぎません、
ちゃんとWindowsのプログラミングをすれば使えます。
610デフォルトの名無しさん:2009/07/31(金) 13:01:37
Qtデザイナーってどうよ?
611デフォルトの名無しさん:2009/07/31(金) 16:06:59
>>610
便利だけど、凝ったことをするには微妙。
612デフォルトの名無しさん:2009/07/31(金) 16:08:12
>凝ったこと
kwsk
613デフォルトの名無しさん:2009/07/31(金) 16:31:52
>どうよ?
kwsk
614デフォルトの名無しさん:2009/07/31(金) 17:02:53
mainで作られるwの中のuiをどこからでもいじれるようにはできますか???
615デフォルトの名無しさん:2009/07/31(金) 17:40:13
>>612
たとえば
* QDockWidget を使用する場合
* 画像の貼り付け(バックグランドの指定)など

コードとうまく組み合わせる必要があるのでそれなりに慣れはいる。

>>614
ui を public で公開してしまえばいいけど、設計としては勧めたくないな。
616デフォルトの名無しさん:2009/07/31(金) 18:26:32
>>615
kwsk
それだけじゃ何で不都合があるか分からん。
普通にDesigner使っても問題ないように思えるが。
617デフォルトの名無しさん:2009/07/31(金) 19:05:23
>>616
QDockWidget はドラッグ&ドロップで位置を変えられれないし(プロパティから変更はできる)、
二つのQDockWidgetをタブで同じエリアに配置するのもDesignerからはできなかったと思う。
大きさは変えても反映されない(こっちはQtの仕様上むずかしいが)。
Designer だけの問題ではないが、QDockWidgetを使いたい場合に希望通りの配置をするのは大変。
( アプリが使われ出したら saveState(), restoreState() を使うからいいんだろうけど。 )

画像の件はたとえばQWidgetの背景に画像を貼り付けたい場合にパレットで画像が指定できない。
パレットに画像を指定したい場合はコードで指定する必要がある。

基本の配置を作るのに Designer を使うのは便利なときも多いし、問題ないと思う。
ただ、ちょっと派手にしようと思ったりするとコードを書く必要が出てくるので、
GUIだけで「デザイン」をしたいと考えるなら微妙な時もある。
画面のどこまでを Designer で作りたいかだな。
618デフォルトの名無しさん:2009/07/31(金) 19:12:29
そういえばQSplitterってまだDesignerは対応してないよね?
619デフォルトの名無しさん:2009/07/31(金) 22:20:45
>>618
ずっと前から対応していますね。
620デフォルトの名無しさん:2009/07/31(金) 22:22:29
>>610
使える部分には、使えばいい。
621デフォルトの名無しさん:2009/08/01(土) 00:18:55
>>618
Containers の中ではなくて、レイアウトの方にある。
複数の Widget を選択した後に間に線と矢印のあるレイアウトを選択する。
622デフォルトの名無しさん:2009/08/01(土) 05:37:47
ウィンドウの最前面表示を切り替えようと以下のようなコードを
書いているのですが、一度ウィンドウを閉じてから開き直すような
動作になってしまいます。

Qt::WindowFlags flags = windowFlags();
flags ^= Qt::WindowStaysOnTopHint;
setWindowFlags(flags);
show();

一瞬ですがチラついて見える上、Windowsのタスクバー内の
アプリケーションの順番が変わってしまうのが気になるのですが
これを回避する書き方はないでしょうか?
623デフォルトの名無しさん:2009/08/01(土) 13:14:09
>>622
Widget::activateWindow(), QWidget::raise()は?
624623:2009/08/01(土) 13:22:11
ごめん。Widget::activateWindow()のところに、
Windows版ではそうなると書いてあった。
625デフォルトの名無しさん:2009/08/01(土) 14:40:29
>>614
uiにアクセスしたいクラスを、MainWindowクラスのfriendクラスに指定すれば良い
626デフォルトの名無しさん:2009/08/01(土) 20:26:30
>>624
Qtに限らずWindowsならそうなります。Windowsだから仕方ありません。
627デフォルトの名無しさん:2009/08/01(土) 20:28:56
>>614
そんな馬鹿なことしてはいけない。
628デフォルトの名無しさん:2009/08/01(土) 23:19:08
>>624
activateWindowの説明読んでみました。ウィンドウがアクティブじゃない状態で
呼ぶとアクティブにならずにタスクバーがチカチカするってことですよね。
アクティブな状態で呼ぶことを想定しているのでそこは問題ないんですが
メインウィンドウで呼ぶと一度閉じてしまう現象はよく分かりませんでした。
とりあえずこのままで我慢しておきます。
629デフォルトの名無しさん:2009/08/01(土) 23:56:20
QNetworkAccessManager や QHttp って同期的には使えない?
ちょっとデータを取ってくるだけで Signals/Slots 使って非同期な処理
書くのって微妙に面倒なんだけど…。なんか使い方間違ってんのかな?
630デフォルトの名無しさん:2009/08/02(日) 00:25:49
>>629
QEventLoopを使うと良いと思う。
631デフォルトの名無しさん:2009/08/02(日) 01:00:58
>>630
おおー、使ってみます!
632デフォルトの名無しさん:2009/08/03(月) 16:28:02
C++ GUI Programming with Qt4 (2nd) を買うかどうか迷ってるんですが
今となっては情報古いでしょうか? 4.3準拠だそうですが。
633デフォルトの名無しさん:2009/08/03(月) 17:06:01
>>632
どのあたりの情報が欲しいのかによる。
1st が 4.1、2nd が 4.3 なので、その間に追加されたクラスの情報がピンポイントで欲しければ。
4.1でいいなら日本語版なり、英語版のpdfでいい。
WebKit とかの新しいところが欲しければ載ってないし、
Qt の基本でいいなら 1st でも十分。

4.2, 4.3の新機能は下記でチェック。
ttp://doc.qtsoftware.com/4.2/qt4-2-intro.html
ttp://doc.qtsoftware.com/4.3/qt4-3-intro.html

今は手元に 2nd の実物がないから詳細が知りたければどのクラスのことが知りたいか
書いておいてくれれば、明日には書けるかも。
634デフォルトの名無しさん:2009/08/03(月) 17:21:02
>>633
いや具体的にどのクラスが知りたいってことはなくて、移動中とか
ネットがない環境とかでパラパラめくるのに紙媒体が好みなので
買っておこうかなーと思ってるのです。Qt3版しか持ってないので。

解説されてるクラスが足りない程度なら問題ないんですが
「このサンプルソースは今のバージョンでは動かない」とか
そういう混乱するような点がないかどうかだけが知りたいです。
635デフォルトの名無しさん:2009/08/03(月) 18:27:09
>>634
Qt 4.x はソース/バイナリともにバックワードコンパチなので
基本的には古いバージョンのサンプルでも動作に問題はないはず。
動かして試したわけではないが。

ただ、QFtpやQHttpのように別のクラス(QNetworkAccessManager)が導入されて
使用が推奨されてないものがあったりはするので、
実際に自分でプログラミングするときには最新のドキュメントを
念のためにチェックするくらいはしておいた方がいい。

ハードカバーなのが個人的には好きだ。 > 2nd.

そういうことなら、良さそうな本を適当に選べばいいかと。
ttp://www.qtsoftware.com/developer/books
636デフォルトの名無しさん:2009/08/03(月) 22:35:28
>>635
それが、いろいろ動かない。changes の Important Behavior Changes を見ると、
4.4/4.5/4.6 は、ぞろぞろある。どのソフトウェアも変わらない。
637デフォルトの名無しさん:2009/08/03(月) 23:43:13
>>636
でもまあ主旨を考えると、本に書いてあるサンプル程度の基本的なものの動作が根本的には変わらないからいいんじゃないの
638デフォルトの名無しさん:2009/08/06(木) 01:24:55
Qt on android available!




(´ー`)ダッタライイナー
でもゼロじゃないみたいだ

もし出るなら速攻上司に申し出るんだけどな
業界そのものが、まだ1ヶ月も経ってない新米だけどw
639デフォルトの名無しさん:2009/08/06(木) 03:01:26
>>638
俺もよく妄想する。例えば QtGui だけ java で書いたやつ(android用)で、
他は C++ native で、C++ で書いた自前のアプリをビルドして動かすとかできたらなぁとか。
640デフォルトの名無しさん:2009/08/07(金) 11:22:21
>>638-639
私なら真逆の妄想をします。
QtCore,QtGui,QtNetworkを含むスマートフォンが出たらいいな、と。
641デフォルトの名無しさん:2009/08/07(金) 11:35:57
Nokiaのスマートフォンには載るんじゃないかな。
何のために買収したのか判らなくなるし。
642デフォルトの名無しさん:2009/08/07(金) 14:12:33
Qt/s60じゃだめなの?
643デフォルトの名無しさん:2009/08/09(日) 01:09:59
俺も Symbian に期待したけど
一向に日本に進出(日本が進出?)が進まず、
いまだに海外主流だから、日本で開発するケースなんて少なそうだしなぁ
644デフォルトの名無しさん:2009/08/09(日) 21:04:18
自分で作ったウィジェットを画面いっぱいに配置しているのですが
sizeHintを指定してもメニューバー分だけ小さくなってしまいます。

ttp://calmlight.s2.zmx.jp/Qt4Examples/Pixmap.html
の「(4)サイズヒント」で言っていることと同じだと思うのですが
これは既知のバグとしてこのページのように回避するしかないのでしょうか?
645デフォルトの名無しさん:2009/08/09(日) 22:04:24
>>644
メニューバーがあるからメニューバー分小さくなってるだけじゃない?
646デフォルトの名無しさん:2009/08/09(日) 22:11:40
>>645
ウィンドウじゃなくてウィジェットにサイズを指定しているのですが
そういうものなんですか?ウィジェットに200x200を指定したら、
ウィンドウ全体の高さは 200+メニューバーの高さ+ステータスバーの高さ
になってほしいんですが…。
647デフォルトの名無しさん:2009/08/09(日) 22:39:19
>>646
サイズポリシーはどうしてる?
最小サイズをどうしても指定したかったら setMinimumSize() を使うとか
setFixedSize() を使う手もあるけど。
648デフォルトの名無しさん:2009/08/09(日) 22:56:49
>>647
サイズポリシーは何も指定していません。
最小サイズや固定サイズじゃなくて、最初のデフォルトサイズだけ
指定したいんです。>>644のページと同じ方法で回避できるので
それほど問題ないのですが、他の人はどうしてるのかなと思って。
649デフォルトの名無しさん:2009/08/11(火) 00:53:26
Aboutダイアログボックスにアプリのバージョン番号を表示したいのですが
qmakeで使う.proファイルに書いたVERSIONの値(アプリのバージョン番号)を
プログラムから参照する方法はありますか?
650デフォルトの名無しさん:2009/08/11(火) 21:51:17
Qt Creatorで、Ctrlを押しながら変数名なんかの上で左クリックすると
「カーソル位置のシンボルの定義へ移動」が実行されますが、この動作って無効にできないんですか?
651デフォルトの名無しさん:2009/08/12(水) 08:19:02
Qt(Windows,LGPL版)インストールしてQt Creator使ってたんだけど,何度か使ったら急に起動しなくなった。
タスクマネージャーの「プロセス」で見ても残ってないし,コマンドプロンプトから起動しても,何も
表示せずすぐ終了してしまう。

アンインストールして,PC再起動して再インストールしても二度と起動しなくなってしまった。
近くにもう一人似たような症状で起動しなくなった人がいる。
どなたか原因や対策をご存知ありませんか?ちなみにOSはWindows XP SP3。
652デフォルトの名無しさん:2009/08/12(水) 10:11:54
>>649
特にないので
DEFINES += APP_VERSION=\"$$VERSION\"
のようにしてマクロで受け取る。
653デフォルトの名無しさん:2009/08/12(水) 10:19:45
>>651
うちでは、ウイルス対策ソフトのウイルスバスターを使っていて、それが邪魔してたけど。
654デフォルトの名無しさん:2009/08/12(水) 12:38:23
>>651
心当たりはないけれど、以前に立ち上がっていたということなら
関連しそうなレジストリを消してみるとか、
アンインストール時に残ってるファイルがないかチェックしてみるとか。
655デフォルトの名無しさん:2009/08/12(水) 15:55:59
みなさんQtでどんなソフトウェア作ってるんですか?
656デフォルトの名無しさん:2009/08/12(水) 16:35:06
とってもキュートなもの♪
657デフォルトの名無しさん:2009/08/12(水) 18:03:04
任意のタイミングでキーの状態を知る方法ってQtには用意されていないのでしょうか?
キー入力だと,
QWidget::keyPressEvent
をオーバライドする方法が頭に思い浮かぶのですが,
これはキーを押したり離したりしたタイミングで呼ばれますよね.
そうではなくて,周期的にキーの状態を知りたいと考えています.
658657:2009/08/12(水) 18:08:18
ちなみに,やっていることは
SDL + OpenGLで全画面表示.キーの状態を周期的に監視する
というようなソフトを,Qt + OpenGLの環境に移植できないかなと思いまして,
Qtの機能を調査しています.
659デフォルトの名無しさん:2009/08/12(水) 18:11:56
>>657
キーを押したり離したりしたタイミングでフラグ立てとけや
660657:2009/08/12(水) 18:25:47
>>659
返事ありがとうございます.
その方法だと,キーを押してから,
keyPressEvent
が呼ばれる潜時が気になるのですが,
最近のコンピュータでどれくらい遅延するもんなんですかね.
なんか図る良い方法ないかなぁ.
661デフォルトの名無しさん:2009/08/12(水) 20:23:49
キー押したままアプリ切り替えしたときとか厳しそう
662デフォルトの名無しさん:2009/08/12(水) 20:31:48
>>661
フォーカスが離れたらフラグをリセットするだけじゃん
663657:2009/08/12(水) 20:44:17
調べていましたらwin32ではGetAsyncKeyStateが私の欲しい関数のようです.
QtでこれをラップしてポータブルになっていればHappyなんですけど.
まぁ,なれば#ifdefで場合分けすることにします.
664デフォルトの名無しさん:2009/08/12(水) 22:51:16
>>663
GetAsyncKeyState見たいなのがあるかどうかは分からないけど、
event()をオーバーライドして、キー入力を記録するようにして、
他の別の関数で記録を調べるようにしておけばいいんじゃない。
event()をオーバーライドした時は、QWidget::event()をコールするのを忘れずに。
665デフォルトの名無しさん:2009/08/12(水) 22:52:46
666デフォルトの名無しさん:2009/08/12(水) 23:35:24
>>652
なるほど、ありがとうございました。
667デフォルトの名無しさん:2009/08/12(水) 23:51:53
フィンランドNokiaが「Qt」ブランドを再度変更、「Qt Development Frameworks」へ
ttp://sourceforge.jp/magazine/09/08/12/0531207
668651:2009/08/13(木) 08:19:50
皆さんレスサンクス。

>>653
とりあえずノートン外してみたけど,残念ながら関係なかった。

>>654
アンインストール時に残ったファイルやフォルダは消してから再インストールしたんだけど,
やっぱりダメだった。

レジストリは Qt で検索すると,Quick Time関係が沢山引っ掛かるのでw注意深くやってみます。
669デフォルトの名無しさん:2009/08/15(土) 00:07:43
テンプレ用情報だが
次期バージョンのLightWave COREもQtを組み込むらしい
GUIプラグインが作りやすいから採用しただそうな
670デフォルトの名無しさん:2009/08/15(土) 06:54:56
>>629-631
ゆとり?
671デフォルトの名無しさん:2009/08/15(土) 11:16:49
>>669
なんかMayaもQt採用っつう噂があったな。
672デフォルトの名無しさん:2009/08/17(月) 02:26:23
Qtcreatorで、QWizard+QWizardPageを使ってるんだけど、
QWizardPageのfieldの設定関係のメソッドって、全部protectedになってて、
Qtcreatorがuiから作ったC++プログラムからは呼び出せない。

入力条件を満たした時だけ、次のページに行くボタンがenableになるようにしたいんだけど、
自前で作れってことなのかな?

まあ、Qtcreatorに拘らずに、ソースコードだけでゴリゴリ作ればすむ話なんだけど、
Qtcreatorだけでやりたいんだけよね。
みなさんどうやってます?
673デフォルトの名無しさん:2009/08/17(月) 09:03:09
LightWave CORE^(TM)は、可能な限り業界標準の仕様を
利用しています。SDKとフレームワークはC++で記述され、
UIツールキットは業界標準であるTrollTech/Nokia社のQt
ツールキットを使用しています。
674デフォルトの名無しさん:2009/08/17(月) 10:42:57
>>672
QWizardの*.uiにゴリゴリ書くんじゃなくて、ページ毎に個別の*.uiを作成すればQtCreatorでも同じコードが書けるよ
675デフォルトの名無しさん:2009/08/17(月) 23:37:20
>>674
ああ、なるほど。
Qtcreatorで作られるQWizardのuiはあらかじめQPageWizardを
2ページ分含んでて、後からいくらでもページをui上で追加できるから
そういう発想は無かったなあ。
言われてみればそれで作れるね。サンクス。
676デフォルトの名無しさん:2009/08/18(火) 15:46:39
QTextEditのスライダーの位置から実際に表示されているテキストを取得するにはどうしたらいいんでしょうか?
スライダーは縦のみで、横は使いません
QTextEdit::cursorForPosition()を使えばよいかと考えているのですが、もっとスマートな方法はありますか?
677デフォルトの名無しさん:2009/08/18(火) 16:25:49
>>676
QString text;
int num = slider->value();
QTextDocument *doc = textEdit->document();
QTextBlock block = doc->findBlockByLineNumber(num);
if (block.isValid())
text = block.text();
678デフォルトの名無しさん:2009/08/18(火) 17:45:37
>>677
わざわざソースまで書いてもらっておいて恐縮ですが、
QTextDocument::findBlockByLineNumber()の引数は行数なので、
QAbstractSlider::value()の値から行数に変換する手順が必要になると思います
それとドキュメントがブロック1個で構成されている場合は常にドキュメント全体を返してしまいます
679デフォルトの名無しさん:2009/08/18(火) 20:54:43
>>678
スライダーの位置を QTextEdit の何に対応させたいかで行数への変換方法は決まる。
スライダーを行に対応させるのでいいのなら slider->setMaximum( doc->lineCount() - 1 )
RichText で行の高さも気にしつつやるのなら、面倒だな。
その場合はスライダーの移動ステップをどうするかとかもあるが。

QTextBlock が複数行の時を気にするなら QTextBlock::firstLineNumber() と
QTextBlock::lineCount(), QTextBlock::layout(), QTextLayout, QTextLine
とか使ってなんとかなるはず。

やりたいことが曖昧なので、今書けるのはこの程度。
680676:2009/08/18(火) 21:38:48
スライダーというのはQTextEditの高さが足りない場合にデフォルト設定で右端に表示されるスクロールバーのことです
取得したいのはQTextEditがスクロールバーを表示して部分的にテキストを表示している際の、現在画面に表示されている部分のテキストです
681デフォルトの名無しさん:2009/08/19(水) 00:08:18
ぶった切ってすまんが、Python for Qt! ってのがあるんだね
http://www.pyside.org/
682デフォルトの名無しさん:2009/08/19(水) 00:13:47
pyqt
683デフォルトの名無しさん:2009/08/19(水) 01:01:07
model/viewで表示されたtableの全てをprinterに複数ページに分割して
出力するにはどうしたらいいの?
684デフォルトの名無しさん:2009/08/19(水) 01:02:57
QTableWidgetでアイコンだけの列があるんだけど
sortItemsを使ってもソートができないんだよね。
アイコンだけの列をソートする方法ってある?
685デフォルトの名無しさん:2009/08/19(水) 02:20:00
なんか素朴な疑問なんだけどさ、マウスポインタを変える方法ってあるの?
686デフォルトの名無しさん:2009/08/19(水) 02:44:24
ああ自己解決。setOverrideCursorってのがあった。
687デフォルトの名無しさん:2009/08/19(水) 05:11:30
>>676, 680
>QTextEdit::cursorForPosition()を使えばよいかと考えているのですが、もっとスマートな方法はありますか?
これでいいんじゃない。
688687:2009/08/19(水) 05:13:53
サンプル
QTextCursor beginCursor = cursorForPosition(QPoint(0,0));
QTextCursor endCursor = cursorForPosition(QPoint(width(), height() - fontMetrics().height()));

QTextCursor cursor = textCursor();
int currnet = cursor.position();
cursor.setPosition(beginCursor.position());
cursor.setPosition(endCursor.position()+1, QTextCursor::KeepAnchor);
QString selected = cursor.selectedText();
//setTextCursor(cursor); // その部分を選択状態にするとき。
689688:2009/08/19(水) 05:16:07
ごめん
int currnet = cursor.position();
この行はいらない。
690デフォルトの名無しさん:2009/08/19(水) 09:37:49
Qt creator って、Qt作ってるとこが出してるIDE?
やっぱり便利なんだよね?
691682:2009/08/19(水) 12:35:51
692デフォルトの名無しさん:2009/08/19(水) 12:43:57
PyQtがGPLのままだからPySideができたんかな。
NokiaがRiverbankを買収してPyQtがLGPLになるのが理想だったんだけどな。
693デフォルトの名無しさん:2009/08/21(金) 20:51:52
QTreeView向けの、ノード1つ1つにクラスのポインタが関連付けられてるような再利用はしないモデルを作りたいんだけど
デモのSimple Tree Model ExampleみたいにQAbstractItemModelから派生するのと
QStandardItemModelから派生させてQStandardItemにデータを持たすのはどっちがQt的にはいいの?
694デフォルトの名無しさん:2009/08/22(土) 01:47:51
QTextEditを継承して自前のクラスを作ったのですが、そのクラスの内部で第三引数にthisポインタを指定してQObject::connectを実行してもQTextEditのスロットと接続を試みているようで、自前のクラスのスロットに繋げません。
これがエラーメッセージです。
Object::connect: No such slot QTextEdit::on_timer_timeout()

これは正常な動作ですか?
695デフォルトの名無しさん:2009/08/22(土) 02:05:43
>>694
「そんなスロットはないよ」と言ってきているから、
指定しているスロット名が定義と違っていたりしていない?
696695:2009/08/22(土) 02:06:55
ごめん。
クラス定義にQ_OBJECTは、書いた?
697694:2009/08/22(土) 02:22:11
>>696
それでした・・・
どうもありがとうございました
698デフォルトの名無しさん:2009/08/22(土) 05:26:35
>>693
どちらもありだと思うけれど。

その例のようにQAbstractItemModelだと、純粋仮想関数をオーバライドしなくてはならない。
QStandardItemModelでまにあうのならそちらを使うのも有りだと思う。
699デフォルトの名無しさん:2009/08/22(土) 15:55:29
>>698
ありがとう。どっちでもいいならQStandardItemModelで済ますよ。
700デフォルトの名無しさん:2009/08/23(日) 21:17:03
QDockWidgetのタイトルバー部分の左クリックを検出したいんですけど、カスタムタイトルバーをセットする以外に方法ありますか?
701デフォルトの名無しさん:2009/08/23(日) 22:32:35
>>700
以下の2つの方法があると思う。
1.カスタムなドックウィジットを定義する。
2.QDockWidgetにイベントフィルターをインストールする。
702デフォルトの名無しさん:2009/08/23(日) 22:52:51
>>701
2の方法にトライしてみようと思います
ありがとうございます
703デフォルトの名無しさん:2009/08/23(日) 23:34:29
イベントフィルターなんてもんがあったのか。知らなかった。

それ使ったら、シグナル出さないイベントを捕捉するためにわざわざ元ウィジェットを継承したクラス作って、
mousePressedEvent()をオーバーライドして、って手間を省けるってこと?
704デフォルトの名無しさん:2009/08/23(日) 23:47:42
>>703
イベントフィルター。
イベントフィルターと呼ばれる、QObjectを継承したクラスを定義する。
このクラスで、eventFilter(QObject* object, QEvent* event)をオーバーライドする。
ここで、イベント処理を書く。
そして、このイベントフィルターを他のQWidgetにインストールする。
今だったら、docWidget->installEventFilter(mouseClickfilter)みたいに。
これで、dockWidgetにディスパッチされるイベントをイベントフィルターで処理できるようになる。
705704:2009/08/23(日) 23:49:58
イベントフィルターは、クラスオブジェクトだから関数より柔軟に実装できる。
706704:2009/08/24(月) 00:06:55
もちろんQWidgetもイベントフィルターになれるから、
カスタムクラスでeventFilter()を定義し、他のクラスのインスタンスにインストールすれば
他のクラスのイベントをハンドルできるクラスとなることができる。

インストールしたイベントフィルターを削除したいときは、removeEventFilter()をコールすればよい。
707デフォルトの名無しさん:2009/08/24(月) 04:41:54
日本語化マダー?
708デフォルトの名無しさん:2009/08/24(月) 05:12:53
>>707
何の?
709デフォルトの名無しさん:2009/08/25(火) 08:36:30
>>657
キー監視用のスレッド走らせればいいんじゃない?
710デフォルトの名無しさん:2009/08/25(火) 09:59:18
>>276
qtcreatorスクリプトファイルの方を実行すればよい。
711名無し学生:2009/08/25(火) 10:34:31
Visual Basic の課題で困っております。
誰かお答えください。本当に助けてください。

1.Visual Basicの関数で数値を文字に直すCStr()とStr()の違いについて

2.戻り値の違いが確認できる方法を考え、戻り値の違いについて実際に確認し、
  その確認方法と違いを具体的に述べよ。
注意:実際にやったことと、確認した違いを簡潔かつ具体的に書くこと。

3.下記の計算結果などから、Visual Basicで計算できる数値の桁数について考察をまとめ、
  何故そのような制限があるかについて理由を答えよ
  1) 48 x 100 - 81
  2) 12 ÷ 9.3 x 247
  3) 0.2 - 12 ÷ 69
  4) -12 ÷ 100 + 100
712デフォルトの名無しさん:2009/08/25(火) 10:52:23
QtConcurrentのmap、mappedReducedの機能が今一わかりません。
ユーザの方でスレッドをわざわざ作らずともハードのマルチコアを利用して並列処理してくれると
いうものですか?
713デフォルトの名無しさん:2009/08/25(火) 11:21:19
QtConcurrentMapのソースを見ると、スレッドプールを自前で用意してくれて、それを使って
並列処理してくれるようでした。
714デフォルトの名無しさん:2009/08/26(水) 01:15:09
Fedora環境で
Qt 4.5.1/4.5.2の3rdparty/webkit/WebCore/Makefileに-O2があると
GoogleMapsがマウスでスクロールできません。
-O2を-O1に変えるとスクロールできます。
JavaScrptの処理に問題がありそうなところまでは
わかりましたが、JavaScriptのコードが複雑すぎて解析はあきらめました。
gcc 4.1.1を使ってますが、gccのバグですかね?
715デフォルトの名無しさん:2009/08/26(水) 05:02:30
>>714
>GoogleMapsがマウスでスクロールできません。
マウスでドラッグして地図をスクロールさせるということ?
716デフォルトの名無しさん:2009/08/26(水) 08:19:40
>>704
詳細な解説ありがとう

そうか、他のクラスのイベントを直接捕捉できるのか。便利だ。
717デフォルトの名無しさん:2009/08/26(水) 23:45:14
>>715
はい、そうです。
スクロールできずに、マウスカーソルが進入禁止マークになります。
718デフォルトの名無しさん:2009/08/27(木) 01:56:57
>>717
Qtについてるexampleのfancy browserで試してみたらどう?
この例題では、JavaScriptを拡張するためにソースを
読み込んでいるみたいから動かないかな?
719デフォルトの名無しさん:2009/08/27(木) 03:21:43
>>717
#include <QWebPage>
#include <QWebSettings>
QWebPage* webPage = webView->page();
QWebSettings* webSettings = webPage->settings();
webSettings->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
上記のように、DeveloperExtrasEnabledを設定すると、コンテキストメニューから
インスペクターを呼び出せるようになるから、そこで何かエラーがでてない?
720デフォルトの名無しさん:2009/08/27(木) 05:27:36
LinuxでQPlainTextEditで日本語入力を行っており、textChanged()シグナルに
スロットを接続しています。日本語入力を確定するためにEnterを押すと
textChanged()シグナルが続けさまに2回発生します。
日本語入力にはuim, uim-xim, uim-anthyを使用しています。
Windows XP上で同じコードを実行すると、期待通りtextChanged()シグナルは
1回しか発生しません。Linux上で生じるこの結果は、バグですかね。
721デフォルトの名無しさん:2009/08/27(木) 17:57:17
>>644
古い話だが、
ttp://qt.gitorious.org/qt/qt/commit/8e8a75051a4053d4b536a96e2d05f1f9ddf05ee4
バグだったようで直してもらった。
ただし、4.5系にはまだ入ってないので 4.5.3 で直るかは不明。
4.6には入るとは思う。 -stable 系のブランチにはまだ反映されてないけれど…。
722デフォルトの名無しさん:2009/08/28(金) 07:29:31
GUIプログラミングを考えているのですが
QtとGTKとWXのどれが一番いいですか?
723デフォルトの名無しさん:2009/08/28(金) 09:34:03
WindowsでQTを使ってアプリケーションを作成したのですが、
ウィンドウの左上や、タスクバーに表示されるアイコンを
特定のものに設定するには、どうすれば良いのでしょうか?
WindowsのAPIを色々調べてみたのですが、イマイチ分からず…。
724723:2009/08/28(金) 11:55:03
setWindowIcon()を使用して、自己解決しました。
725デフォルトの名無しさん:2009/08/28(金) 15:15:44
>>722
Wx > Qt >>>> GTK
726デフォルトの名無しさん:2009/08/28(金) 15:16:56
>>722
Qt >>> WX >>>>>>>>> GTK
727デフォルトの名無しさん:2009/08/28(金) 16:02:01
>>722
Windows環境ならwxWidgets + Code::Blocksと,Qt + Qt Creatorを試してみてるけど,
それぞれ得失があるよ。

■wxWidgetsは,ライブラリを自分でビルドしなければならない。Code::Blocksは
 バイナリ配布がある(MinGW版なら)。

■Code::BlocksはVC++で使う場合cdbデバッガへの対応がまだ不完全で,例えば
 関数へのstep inがサポートされていない。MinGWの場合はgdbデバッガへの対応
 はほぼ完璧。

■Qt/Qt CreatorはVC++で使う場合,両方とも自分でビルドしなければならない。
 MinGWで使うならバイナリ配布がそのまま使えるから楽。

■Qtはビルド時の設定を.proファイルに手書きで書き込む必要がある。
 Code::Blocksはその辺痒いところに手が届いている。

■RADツールの使い勝手は,好みや主観もあると思うがQt Creatorより
 Code::Blocksの方がわかりやすいと俺は思う。

■wxWidgetsは日本語の情報が非常に少ないので調べるのが面倒。

■ちなみにMinGW g++はstd::への対応がまだ不完全なようで,
 ちょっと試してみたところではwstringstreamがサポートされてなかった。
728デフォルトの名無しさん:2009/08/28(金) 19:29:20
>>722
wxWidget, GTKは使ったことないけれど、ざっと調べた限り以下のことが言える。

Qtは、クラスの抽象化がうまく行われていて、楽に少ないコードでプログラミングすることができる。
リファレンスが充実している(英語だけれど)。
商用、非商用問わず、多くの大きなプロジェクトにも使用されている。
そのOSネイティブのAPIを使っていているから、ユーザーから見てGUIに違和感を感じない。
GUI以外の機能も充実している。
組込系にも移植されている。
729デフォルトの名無しさん:2009/08/28(金) 19:52:17
> ユーザーから見てGUIに違和感を感じない

これに関してはwxの方が上な気がする。Qtは微妙に独自感がある。
730デフォルトの名無しさん:2009/08/28(金) 23:09:16
たしかになんか違和感は感じるよな
何が?って言われると指摘できない微妙なものなんだけど
731デフォルトの名無しさん:2009/08/28(金) 23:29:07
>>725-726
GTKの立つ瀬がないなw
732デフォルトの名無しさん:2009/08/29(土) 00:09:44
GTKは糞過ぎて話にならん。
やはりドキュメントが充実しているQtを勧めたい。
RADツールなんて慣れの問題だし。
733デフォルトの名無しさん:2009/08/29(土) 01:12:53
C++やり始めの頃にGUIをGTKで作ろうとした。
コンパイルエラーがでるので調べら、GTKではクラスの非staticメンバが使えないと判明。
ロジック部が実装済みだったので手戻りすることもできずキタナこれはと思った。

クラス対応版のもあるらしいけど、よく知らん。
734デフォルトの名無しさん:2009/08/29(土) 02:17:01
>>733
GTKmm
735デフォルトの名無しさん:2009/08/29(土) 02:29:21
GTKはCから使うものでC++から使うように想定されてないからな。
gtk2hsを使って使い勝手が糞だからといってgtkが糞ではないのと同じ話。

実際gtkは普及率的にもかなりイケてる。もちろんgtkmmも。
個人的な感想ではwxよりは使いやすいと思うな。
736デフォルトの名無しさん:2009/08/29(土) 04:03:07
>>729, 730
どのプラットフォームのとき?
Windows?、それともMacOS X?
737デフォルトの名無しさん:2009/08/29(土) 10:35:45
>>728
あれ?Qtって独自GUIじゃなかったっけ?
そいでwxはそれぞれのAPIを触るんでなかったか。

あとそれぞれのライブラリの違いは所詮、慣れの問題だと思う。
738デフォルトの名無しさん:2009/08/29(土) 10:44:22
wxとQtは慣れの問題かもしれないが
GTKは果たして慣れなのか?

あと完全にAPIを呼び出すwxは
osが変わると微妙にパーツがずれることが
あるとか聞いたよ。

100%独自GUIのライブラリは、
個性ありすぎになるけどずれたりはしないとか。
739デフォルトの名無しさん:2009/08/29(土) 10:47:38
sizer使ってOSごとにサイズの違うコントロール並べるんだからずれて当たり前
740デフォルトの名無しさん:2009/08/29(土) 10:58:50
QtはGUIよりthreadとかsocketとかをPOSIX的に扱えるのが有り難かったりする
741デフォルトの名無しさん:2009/08/29(土) 16:22:15
>>737
>あれ?Qtって独自GUIじゃなかったっけ?
http://qt.nokia.com/products
のQt Class LibrariesのAdvanced GUIのところに

Qt uses the native graphics APIs of each platform it supports,
taking full advantage of system resources and ensuring
that applications have native look and feel.

と書いてあるけど、これってどういう意味?
742デフォルトの名無しさん:2009/08/29(土) 16:32:28
Qt Widget Gallery
http://doc.trolltech.com/4.5/gallery.html
ここにQt4からOSネイティブの様々なスタイルに対応していると書いてあります。
743デフォルトの名無しさん:2009/08/29(土) 16:34:21
おまえら本当にQtで開発してるのか?ちゃんとネイティブUI使ってるだろ。
Macだと多少独自部分が残っているところもあるが。
744デフォルトの名無しさん:2009/08/29(土) 17:33:04
独自GUIでネイティブの様々なスタイルに対応
745デフォルトの名無しさん:2009/08/29(土) 18:47:28
GUIのコントロール(多分ウインドウも含む)の描画自体には、
ネイティブのAPIを使用している。
そして、それぞれをQtで管理できるようにコントロール(イベントへの対応)や
レイアウトなどは、Qt独自に実装している。
746デフォルトの名無しさん:2009/08/29(土) 19:09:04
>>736
俺が729で言ったのはWindowsの話。ステータスバーやメニューはOS標準と少し違う。
もしかしたらOS標準のを使う方法があるのかもしれないけど。
747デフォルトの名無しさん:2009/08/29(土) 21:19:09
>>746
yes i do
748デフォルトの名無しさん:2009/08/29(土) 21:36:52
gtkmmは本家のFAQが痛すぎ
749デフォルトの名無しさん:2009/08/29(土) 21:43:56
kwsk
750デフォルトの名無しさん:2009/08/29(土) 23:26:22
>>746
多分、アイコンが違ったり、フォントの大きさが違ったり、
レイアウトの間隔が違ったりするからじゃない?

もしそうなら、それらはすべて設定可能。
でも、デフォルトでそうなってほしいけど。
751デフォルトの名無しさん:2009/08/30(日) 00:24:00
>>750
フォントの大きさやレイアウトの間隔だけなのかな?
例えばチェック可能にしたメニューの表示もWindows標準と違う。
別に大して気にならないけどね。
752デフォルトの名無しさん:2009/08/30(日) 01:03:22

753デフォルトの名無しさん:2009/09/03(木) 22:06:11
750も行ってるのに前スレまだ落ちてない…
754デフォルトの名無しさん:2009/09/05(土) 00:17:56

pc11って板違い?でもないのか

こっちはDAT落ちだが
http://pc12.2ch.net/test/read.cgi/tech/1194158506/
755デフォルトの名無しさん:2009/09/05(土) 07:41:58

pc11って鯖違い。
756デフォルトの名無しさん:2009/09/05(土) 09:23:38
3月までは同じ鯖だっただろpc11がのこってるほうがおかしい
757デフォルトの名無しさん:2009/09/05(土) 09:24:49
書き込みできねーじゃん w
758デフォルトの名無しさん:2009/09/07(月) 10:01:34
QtCreatorで「QMetaObject::connectSlotsByName: No matching signal for [スロット名]」
というエラーメッセージを抑制する方法を教えてください
759デフォルトの名無しさん:2009/09/07(月) 13:14:06
>>758
on_ で始まる名前のシグナルに接続していない?
760デフォルトの名無しさん:2009/09/07(月) 22:14:27
>>759
on_で始まる名前だから良くなかったのですか
ありがとうございました
761759:2009/09/08(火) 05:43:42
>>760
Qtには、シグナルとスロットを自動的に接続する仕組みがあって、
これを利用するとき、そのスロット名をon_で始まると決められているから
MOCが文句を言ってきている。
(参照)
ttp://doc.trolltech.com/4.5/qmetaobject.html#connectSlotsByName
ttp://doc.trolltech.com/4.5/designer-using-a-ui-file.html#automatic-connections
762デフォルトの名無しさん:2009/09/08(火) 17:03:49
なにげに使えそうな機能ですねw
763デフォルトの名無しさん:2009/09/09(水) 08:46:18
>>761
MOCでなくてconnect。
764デフォルトの名無しさん:2009/09/09(水) 09:15:08
>>763
ごめん、その部分は推測で書いた。
765デフォルトの名無しさん:2009/09/09(水) 15:08:42
あるオープンソースの画像編集ソフトで、なんかエラーで落ちるなぁと思ったら、
画像が大きすぎでQByteArrayでメモリを確保しきれていないのにそのまま処理が続行していたからでした。
(メモリが確保できなければエラーを出すべきという話は置いておいて)

画像のサイズを小さくするのも一つの方法だとして、大きな画像を扱うので
できれば、アプリ側を修正しようと思っています。

確保するサイズをいろいろ変更して試したところ127MBを越えたあたりぐらいでエラーになりました。
QByteArrayは127MBぐらいまでしか確保できない制限あるのでしょうか?
PCのメモリは2GBつんでいます。
766デフォルトの名無しさん:2009/09/09(水) 20:56:04
Qt creatorって、色分けしてくれるエディタとかついてますか?
767デフォルトの名無しさん:2009/09/10(木) 00:50:01
768デフォルトの名無しさん:2009/09/10(木) 04:12:33
>>765
助言にならないけど、以下のことを考えた。
多分QByteArrayは、もっと大きなサイズを扱えると思う。4GBとか。
システム自体がメモリを食っているとか?
システム依存で、1つのプロセスに割り当てるメモリサイズが制限されているとか?


769デフォルトの名無しさん:2009/09/10(木) 04:16:46
770768:2009/09/10(木) 04:57:29
こちらは、LinuxだけどQByteArrayで1GB確保しても問題なかったよ。
771768:2009/09/10(木) 06:25:28
QByteArrayでメモリを確保する簡単なサンプルを作成して、
そこで同じような現象が起こるか確かめるといいんじゃない?
それで発生するようなら、QByteArray以外のオブジェクトで
同じように確保できるか調べてみればいいんじゃない?
772766:2009/09/10(木) 07:18:50
>>769
リンク先 拝見しました。
とてもよさ気な感じです。
ありがとうございました。
773デフォルトの名無しさん:2009/09/10(木) 15:07:13
文字列だけが入ったQTextEditで、選択されている範囲が何行にわたってるかを取得するにはどうすればいいんでしょう?
QTextEdit::textCursor().block().lineCount()は、選択範囲を示してないようで常に1を返してくるのでダメでした。
774デフォルトの名無しさん:2009/09/10(木) 17:48:47
>>768
マジですか。128MB-管理用メモリ?で
きりが良い数字なので何かに制限があるのかなと。

こちらはWindowsなのでQByteArray外の制限の可能性もありそうですね。
調べてみます。
775デフォルトの名無しさん:2009/09/10(木) 17:53:53
>>773
もっと簡単にできるような気がするけど。
QTextDocument* doc = textEdit->document();
QTextCursor currentCursor = textEdit->textCursor();
const int firstPositon = currentCursor.selectionStart();
const int endPosition = currentCursor.selectionEnd();
QTextBlock firstBlock = doc->findBlock(firstPositon);
QTextBlock endBlock = doc->findBlock(endPosition);
qDebug() << endBlock.blockNumber() - firstBlock.blockNumber() + 1;
776775:2009/09/10(木) 17:59:19
ごめん。
勘違いしていた。
775は間違い。
777デフォルトの名無しさん:2009/09/10(木) 20:05:21
メニューバーで
孫メニューが存在する、子メニューの上にカーソルを載せると
右側に孫メニューが展開されますが

カーソルを乗せた瞬間にすぐに孫メニューが展開するようにするにはどこを弄ればいいんでしょうか?
デフォルトだと展開されるまでに数百msの遅延があるので、すぐに展開されるようにしたい
778デフォルトの名無しさん:2009/09/10(木) 20:23:36
>>777
Qt Creatorで、ツール→フォームエディタ→プレビューと同じでしょうか。
一瞬で孫メニューが表示されていて、何回か試しても数百秒もかかることはありませんでした。
779デフォルトの名無しさん:2009/09/10(木) 20:24:48
あ、メニューの展開ラグはOSの設定依存なのか?
窓の手とかで、スタートメニューの表示速度という項目で速度調節できるのを思い出した
780デフォルトの名無しさん:2009/09/10(木) 20:31:18
ということで解決、お騒がせしました。
781デフォルトの名無しさん:2009/09/11(金) 07:13:10
>>776
返信ありがとうございます。
実際私のほうで書いていただいたコードを試したところ
私の実装したい処理を問題なく実現できるようなので、使わせていただきます。
ありがとうございました。
782776:2009/09/11(金) 08:44:16
>>781
1つのブロックが複数の行にまたがるときは、うまく機能しないと思われるので、
もしそうならば、修正が必要。
783デフォルトの名無しさん:2009/09/12(土) 22:07:46
Qt Examplesには多くのサンプルが有りますが、これをそのままテストしたいとき
それぞれのファイルをコピペしないとだめなの?
一括してプロジェクトを付けれないの?
784デフォルトの名無しさん:2009/09/12(土) 22:16:53
>>783
どのようにしたいかを具体的に書いてもらえますか。
テストとしたいって、動かしたいと言うことなら、Qt Demosがランチャになっていますよ。
785デフォルトの名無しさん:2009/09/13(日) 06:58:23
>>783
Qt Creatorを起動して、画面左の「ようこそ:Welcome」を選択し、中央に表示される3つの
タブ(:分かりにくいけど)から「Qt Creatorを始めよう:Gettign Started」を選択し、
さらに「Qtのサンプルプログラムを参照:Explore Qt Examples」のところのコンボボックスから
目的のサンプルを選べばそのプロジェクトを読み込んでくれる。
そこで、ソースも参照できるし、ビルドもすぐにできる。
786785:2009/09/13(日) 07:07:43
また、exmaplesフォルダや、demosフォルダ内の目的のサンプルの
プロジェクトファイル(.pro)をQt Creatorで開いても同様のことができる。
785で書いた方法だと一部のexampleが表示されないことがあるみたい(今はどうかわからないけど)
787デフォルトの名無しさん:2009/09/13(日) 15:59:31
QTextCodec::codecForNameってQApplicationのコンストラクタより先に呼び出しちゃダメなんかな?
先に呼び出すと実行ファイル直下のcodecsディレクトリを読んでくれない
788785:2009/09/13(日) 16:26:04
>>784,785,786
ありがとうございました。
789デフォルトの名無しさん:2009/09/13(日) 16:50:38
>>787
QApplicationでロケール初期化などをしているから、文字コーデック関係は、
その後に使うべきだと思います。
790788:2009/09/13(日) 17:40:43
まちがえました 783でした すいません
サンプルプログラムがインストールされていません になってました
Qt SDK for Linux/X11 32bit をダウンロードしたんですが
791デフォルトの名無しさん:2009/09/13(日) 19:15:43
>>790
Qt SDK for Linux/X11 32bit 2009.03を入れているけれど、サンプルプログラムが入っています。
792788:2009/09/14(月) 12:28:39
最初のインストール手順がまずかったのかも知れません。
最インストールしてもだめでした。
examplesファルダ以下はありましたのでそこからコピーして
試してみます。
793デフォルトの名無しさん:2009/09/14(月) 13:09:53
setWindowIconを使ってツールにアイコンを付けようと思ったのですが、
どうしてもアイコンが付きません。
コードは下記のようになっています。

QString iconPath = "C:/tmp/sample.ico";
QIcon icon(iconPath);
if(icon.isNull()) {
// A
}
else {
// B
}
setWindowIcon(icon);

ちゃんとアイコンが取得できているかを調べるために
コードを上記のようにしてisNull()でチェックしてみましたが、
きちんと"B"の方を通るので、その点は問題ないようです。

どなたか原因等分かる方居られましたら、お願いします。
794デフォルトの名無しさん:2009/09/14(月) 13:17:51
VC++をラッパーしたものを作って
コンパイルするとLinux用のGtk+の実行ファイルを作るようなものを
作ったんだけど、公開すると需要あるかな?
795デフォルトの名無しさん:2009/09/14(月) 13:19:51
ああ、Qtのスレだった。。

要は、MFCなりWin32APIなりでソース書いてコンパイルすると
Gtkの実行ファイルと同じものができる。
だから、Linuxで動くんだ。これで事実上、VC++はRun anywhereになるんだけど・・
796デフォルトの名無しさん:2009/09/14(月) 15:55:02
>>793
Qtリソースシステムを使って、リソースコレクションファイルに
アイコンへのパスを記述すればいいかも。
その際、Q_INIT_RESOURCE()の記述を忘れずに。
797793:2009/09/14(月) 17:29:59
レスありがとうございます。
さっそくリソースシステムでもやってみたのですが…
やはりアイコンファイルが表示されない状態です。

…で、もう少し調べてみたところ、
Qtがインストールされているマシンでは正常にアイコンが表示されました。
それを踏まえて更に調べてみたところ、
どうやら"plugins/imageformats/"にあるqico4.dllが必要なことがわかりました。
(このファイルをリネームすると表示されなくなるので)

…が、インストールされていないマシンでもアイコンを表示させないといけないので、
qico4.dllをツール本体(exeファイル)と同じ箇所に置いて動作させてみたのですが、
やはりアイコンは表示されません。
qico4.dllの置き方が悪いのか、インストールされていないマシンにも
$QTDIR/plugins/imageformatsを作成して、ここにqico4.dllを置いておく、
といった方法を行わなければならないのでしょうか…?

詳しい方居られましたら、よろしくお願いします。
798デフォルトの名無しさん:2009/09/14(月) 17:57:58
>>797
コンパイラは何、VC++それともMinGW
799793:2009/09/14(月) 18:33:21
>>798
コンパイラはVC++(2008.NET)です。
800デフォルトの名無しさん:2009/09/14(月) 18:40:10
hageでもかまいません目欄に何か入れてください
801デフォルトの名無しさん:2009/09/14(月) 18:40:56
>>797
ツール本体と同じディレクトリじゃなくて、ツール本体のディレクトリの下に
plugins/imageformats/ というディレクトリを作ってみたら?
802デフォルトの名無しさん:2009/09/14(月) 19:02:54
>>797
Qt 4.5: Deploying Qt Applications
http://doc.trolltech.com/4.5/deployment.html

配布方法については、ここに詳しく書かれていますよ。
803デフォルトの名無しさん:2009/09/14(月) 19:28:03
実行ファイルにアイコンを埋め込む
804デフォルトの名無しさん:2009/09/14(月) 20:46:41
日本語化のやり方を教えてください。
SourceForgeの「Qt Creator 日本語化プロジェクト」のqt-creator-jp-win-1.0.0-jp-beta0.zipをダウンロードして解凍して、次はどうすれば???
qtcreator_ja_JP.qm あたりをどうにかすると良さそうなのですが
まったくドキュメントがなくさっぱりわかりません。
OSはFreeBSDです。どうかよろしくお願いします.
805デフォルトの名無しさん:2009/09/14(月) 23:11:48
>>804
Qt Creatorは、どうやってインストールしたの?
こちらの環境はLinuxだけど、インストール先のqtcreatorのディレクトリの中に
translationsというディレクトリがあり、その中にqtcreator_ja.qm
が入っているけど。
最近のソースやパッケージをインストールしたのなら、日本語化されているんじゃないかな。
*.qmで検索して、qtcreator_ja.qmなどのファイルがあるかまず確かめてみて、
qtcreator_ja.qmがあるようならば、ロケールが日本語になっていないからかも。
環境変数のLANGとか見ているみたいけど。下記の4番目のレスに書いてある。
ttp://www.qtcentre.org/forum/f-qt-tools-3/t-switching-qtcreator-to-english-22353.html/?highlight=translation
806デフォルトの名無しさん:2009/09/14(月) 23:20:29
進化するQt−Qt最新事情2009
http://gihyo.jp/dev/serial/01/qt-2009
807デフォルトの名無しさん:2009/09/15(火) 00:42:13
>>804
「Qt Creator日本語化プロジェクト」の成果は本家にフィードバックされているので、
Qt Creator 1.2.1 をベースに使うのを進める。
FreeBSD で動かすのに問題があるかは知らないが
ちゃんとビルド、インストールすればそのままで日本語化されてるはず。
# 誤訳もいくつかあるけどな。
808デフォルトの名無しさん:2009/09/15(火) 01:08:46
>>806
BSDでもソースからビルドすれば問題なさそう。
BSDは、正式にはサポート外になったみたいだけれど。
http://doc.trolltech.com/4.5/platform-notes-platforms.html
http://doc.trolltech.com/4.5/supported-platforms.html
809808:2009/09/15(火) 01:11:00
808で間違えた
>>806
>>804の間違い。
810デフォルトの名無しさん:2009/09/15(火) 01:15:26
>>808
BSDは、Community Supported Platformsには含まれているから
ソースからビルドする分にはこれから先も問題なさそう。
811デフォルトの名無しさん:2009/09/15(火) 08:53:44
qtcreator_ja.qm自体はすでにportsからインストールして入ってました。
/usr/local/share/qtcreator/translations/qtcreator_ja.qm

環境変数は LANG=ja_JP.UTF-8 に設定してあります。
LANGの設定がこれではダメなのでしょうか?

// どーりでQtCreatorのメニューを探し回ってもないはずだ
812デフォルトの名無しさん:2009/09/15(火) 08:58:17
>>811
>環境変数は LANG=ja_JP.UTF-8 に設定してあります。
これなら、日本語になるはずなんだけど。
環境変数は問題なさそう。
813793:2009/09/15(火) 09:02:46
>>801
その方法も試してみましたが、ダメでした。

>>802
読んでみましたが、どうにも理解が難しく…
pluginsの配布辺りのことですよね。
qt.confが関わっているようですが、
これの活用方法がどうしても良く分かりません…。
814793:2009/09/15(火) 09:42:19
>>801>>802
qt.confでpluginsの場所を指定すれば良かったのですね。

しかし、これだと配布物が色々と増えてしまう事になるのですが、
仕方ないのでしょうかね…。qt.confや/plugins/imageformats/qico4.dllなどの。

>>803
実行ファイルに埋め込むと、これらの配布は必要なくなるのでしょうか?
やり方がよく分かりませんが、ちょっと調べてみます。

レスしてくれた方々、ありがとうございました。
815デフォルトの名無しさん:2009/09/15(火) 11:03:17
>>814
実行ファイルに埋め込んでも .ico ファイルのままではプラグインは必要。
ttp://qt.nokia.com/doc/4.5/resources.html

アイコンを png に変更して試す方がいいかも。
png だとプラグインはいらないはず。
816デフォルトの名無しさん:2009/09/15(火) 11:16:06
>>811
こちらで最新のソースからビルドした版のQt Creatorでは、main.cppで、
qtTrPath、qtTrFile(:共にQStringローカル変数)が定義してあって、それぞれ
「qt内のtranslationsへのパス」、「翻訳ファイル名」が入っていた。
具体的には、
qtTrPathには、"/usr/local/Trolltech/Qt-4.7.0/translations"
qtTrFileには、"qt_ja_JP"となっており、qt_jp_JP.qmを参照している。
つまり、qtcreator_ja.qmではなく、qt_jp_JP.qmとなっていた。
ビルドしたときのmain.cppソースのqtTrFileの中を調べて、インストール先の
翻訳ファイルのファイル名を変更すれば日本語になると思う。
817816:2009/09/15(火) 11:19:51
>>816
>こちらで最新のソースからビルドした版のQt Creatorでは、main.cppで
訂正:最新の開発版のソース(安定坂ではない)
818デフォルトの名無しさん:2009/09/15(火) 11:28:59
>>812
そうですか。FreeBSDのportsに入っているQtCreatorがアホだということであきらめます。
ありがとうございました。
819デフォルトの名無しさん:2009/09/15(火) 12:48:38
>>818
816に書いてあるとおり、ファイル名が違っているだけかもしれないから、root権限があるのならば、
qtcreator_ja.qmを同じディレクトリ内にqt_jp_JP.qmとしてコピーしてみたら。
同ディレクトリにqt_jp_JP.qmがないときの話だけれど(間違って上書きしないように!)。
820デフォルトの名無しさん:2009/09/15(火) 14:59:27
>>818
ver 1.2からはQtライブラリ自体の翻訳ファイル(qt_ja_JP.qm)も必要になってます。
翻訳ファイルのロケール部分はja_JP、jaのどちらでも問題ないはずです。
821818:2009/09/15(火) 16:59:28
>>819-829 おっけー! 日本語表示になりました。
他の誰かが幸せになれるようにFreeBSD 7.2 でQtCreator導入の手順をまとめておきます。
==================================================
1. portsからmake install
# cd /usr/ports/devel/qtcreator
# make install

2. そのままだと(参照する翻訳ファイルの名前が間違えているので)日本語で表示されないのでリンクを張る
# cd /usr/local/share/qtcreator/translations
# ln -s qtcreator_ja.pm qt_ja_JP.qm

3. 環境変数のLANGを日本語ロケール(うちの場合はja_JP.UTF-8)にしてqtcreatorを立ち上げればメニュー等が日本語で表示される
# exports LANG=ja_JP.UTF-8
==================================================
822818:2009/09/15(火) 17:06:22
頼んでいた入門Qt4プログラミングも来たので、これで本格的にQtの勉強が始められます。
助けてくれた皆様本当にありがとうございました。
GUIプログラミングは本当に困っていて、どうしたものかと思ってましたが、
調べた限りではQtで何とかなりそうなのでQtをものにしたいです。

823デフォルトの名無しさん:2009/09/15(火) 22:55:24
824デフォルトの名無しさん:2009/09/16(水) 03:45:15
>>806
>Windowsでは,GCC でのデバッグ実行時に,qDebug()で日本語を表示すると文字化けします。
>MinGWのGDBでは,GDB/MIを介すると文字化けしてしまうので,MinGWのGDBが原因の問題です。

あらー、MinGWの問題なのか・・・
825デフォルトの名無しさん:2009/09/16(水) 09:09:32
横からすみません。
現在fedora11を使っていまして、「scribus」を使用しようと思っているのですが、ツール等の英語がプロポーショナルではない間延びした書体になっています。
そこでQtに依存しているらしく
#qtconfig-qt4
を実行しフォントを変えたのですが、「scribus」は変わらず、再度上記コマンドでチェックしようとすると、フォント設定が元に戻ってしまいます。
何方様か知恵をお借り出きればと思います。
宜しくお願いいたします。
826デフォルトの名無しさん:2009/09/16(水) 09:56:51
>>825
Scribus は、Qt 3 を使っているから、qtconfig-qt4 は効かないでしょう。
827デフォルトの名無しさん:2009/09/16(水) 10:11:18
>>825
自信ないけれど、
scribusはQt3を使っているからqt3用のqtconfigで
設定しないといけないんじゃない?
828デフォルトの名無しさん:2009/09/16(水) 11:17:08
>>824
デバッグ実行時は MinGW の問題だが、
通常実行時にもメッセージの出し方次第では日本語が出ない。
これは Qt側で 4.5 からqDebug周りの挙動が変わって
ASCII以外を受け付けるルートが減ったため。

char *utf8; QString qstr; のとき

OK:
qDeubg() << qstr;
qDebug("%s", utf8);

NG:
qDebug() << qstr.toUtf8();
qDebug() << qstr.toLocal8Bit();
qDebug(utf8);
829デフォルトの名無しさん:2009/09/16(水) 15:16:43
QTextEdit・QTextBrowserがスクロールするとメモリをどんどん消費するようになってしまったんですが、何が原因でしょうか?
スクロールを続けているとある程度でメモリ消費が収まるので、プログラム側のメモリリークではないと思います。
また確保されたメモリ領域は時間が経つと少しずつ解放されて元に戻るようです。
プログラムに新たに追加したQTextEditでも同じ現象が起きてもうお手上げです・・・
830デフォルトの名無しさん:2009/09/16(水) 16:46:27
>>829
スクロールした部分をバッファに貯めているんじゃない?
正しい振る舞いのような気がするけど。
Qt3のときは、バッファサイズを指定するメソッドがあったみたいだけれど、
今時の環境では必要はないという判断でなくなったみたい。

もし、テキストがプレインテキストならQPlainTextEditというクラスもあるけど。
ただし、大して変わらないかもしれない。
また、Nokia製ではないけれどQCodeEditというのがGPLで公開されているみたいだけど。
831デフォルトの名無しさん:2009/09/16(水) 17:28:43
>>829
かなり増えるの?
832829:2009/09/16(水) 18:44:45
>>830
やっぱりバッファリングなんでしょうか
新規のプロジェクトではほとんど消費しなかったのでプログラム側を疑ってたんですが、
Qtが自動でバッファサイズを変えてるんでしょうかね?
そうなるともう完全にお手上げ・・・
QCodeEditは初めて聞いたんですが、今作っているものがHTMLよりなのでちょっと難しいかもしれないです

>>831
テキストの量に関係なく10MB前後増えます
増える前だとプログラム全体で20MB強ですから、かなりの量ですね
でも実際にはそこまでくまなくスクロールすることはまず無いので2,3MB程度で済むみたいです
833デフォルトの名無しさん:2009/09/16(水) 20:55:15
>>829
こちらはLinuxだけど、スクロールのためにそんなにメモリー量が増えるというのは再現しない。
スクロールしてもそんなに変わらない。

>テキストの量に関係なく10MB前後増えます
こちらでは、QTextEditのインスタンスを作成し、小さいテキストを表示させただけでは
こんなに増えない。

実は、append()やinsertPlainText()なんかでテキストを何回も細かく追加していて、
全部追加が終わっていないのに終わったと勘違いしているだけとか?
834833:2009/09/16(水) 21:03:26
確かめないで書くけど、細かくテキストを追加すると、
undoのための情報を保持しなければならないので余計にメモリー量が増える。
835829:2009/09/16(水) 21:39:31
原因が分かりました。
QPlastiqueStyleを指定しているとこの現象が起きるようです。
うちの環境で使用できる他のスタイル(QCDEStyle, QCleanlooksStyle, QMotifStyle, QWindowsStyle, QWindowsXPStyle)では問題ありませんでした。
実行環境はWindowsXP SP3です。
836デフォルトの名無しさん:2009/09/16(水) 23:31:01
>>826
>>827
遅くなりました。
ご返事、有難う御座いました。
QT3のGUIのConfig内、Fontタブで設定を変えたのですが、やはり変わりませんでした。
例えば文字の大きさなども一緒に変えてみましたが、まったく反応が内容です。
重々、宜しくお願いいたします。
837デフォルトの名無しさん:2009/09/17(木) 09:25:48
>>836
こちらはDebian LinuxのパッケージでインストールしたScribus1.3.3.13だけど、
デフォルトでメニューが日本語になっている。

Scribusの「ファイル」メニューから「設定...」を選んで、
表示されるダイアログの左の見出しの「全般」から「GUI」を選ぶと、
GUIで使用する「テーマ」、「言語」とか、「メニューのフォントサイズ」
なんかを指定できるよ。
これとqt3 configを設定すれば何とかならないかな。

よく分からないで書いているので、混乱させたのならごめん。
838837:2009/09/17(木) 09:32:09
>>837
英語にしたときの項目名
「設定...」-->「Preferences...」
「全般」-->「General」

それから、変更が適用されない時はScribusを再起動すればいいと思う。
839デフォルトの名無しさん:2009/09/17(木) 15:43:19
>>837
御返答、ありがとうございます。
仰る設定項目は扱いましたが、サイズこそは変わっても、フォントの種類はやはり変わりません。
日本語については問題ないのですが、英語がが間のびしています。(苦笑)
余談ですが、設定の左ペインが潰れていて、2文字分の幅しかありません。これも関連するトラブルでしょうか、、、
840デフォルトの名無しさん:2009/09/17(木) 17:22:29
>>839
以下のことはあっているかどうか分からないけど。

下記参考サイトによると、ホームディレクトリ以下の/.scribus内に設定ファイルがあるようなので、
それらを編集すれば変更できるかも?

KDE3のコントロールパネルから設定するのが一番のような気がするけど。

参考:
http://docs.scribus.net/index.php?lang=en&page=settings1
841デフォルトの名無しさん:2009/09/19(土) 00:54:41
QDataStreamでシリアライズできるみたいですけどQSharedPointerなど
ポインタのシリアライズがサポートされてないですね。

ポインタの配列などをシリアライズする良い方法ないでしょうか?
boostはポインタの追跡してくれたけども。
842デフォルトの名無しさん:2009/09/19(土) 10:40:20
>>841
>boostはポインタの追跡してくれたけども。
boostのことは詳しくないんだけれど、boostだと読み込み時にポインター変数を渡せば、
自動的にオブジェクトのインスタンスを生成して返してくれるような便利なものがあるの?
参考までに、クラス名は?
843842:2009/09/19(土) 11:06:32
Qtに目的のものが既にあるかどうかよく知らないんだけれど、
下記によるとQDataStreamは、QVector<T>をシリアライズできるようだから
QVectorかQVectorのポインターに対応させれば楽ができそう。
http://qt.nokia.com/doc/4.5/datastreamformat.html

質問の内容とずれていたらごめん。
844842:2009/09/19(土) 11:22:17
>>841
自分で確保したポインターにこだわらないのなら上記の方法があると思う。

ポインタの配列などをシリアライズする良い方法ないでしょうか?
QVector<T*>に対応したtemplateのoperator<<()とoperator>>()を
書けば簡単に実現できると思うけど。

そんなことは十分承知の上で、聞いていたらごめん。
845デフォルトの名無しさん:2009/09/20(日) 23:33:20
Qt を勉強しようと考えているのですが、
初心者に最適な解説サイトってありますか?
846デフォルトの名無しさん:2009/09/21(月) 08:57:01
>>845

下記リファレンスのチュートリアルやexampleを参考にして
進めるのがいいのではないのかな(英語を読まないといけないけれど)。
http://qt.linux-life.net/4/doc/ja/index.html
http://doc.trolltech.com/4.5/index.html

でも、Qtの知識がないのならば、本の「入門 Qt 4 プログラミング」を買って、
一通り目を通したほうがいいと思うよ。日本語だし。

それから、分からないことがあれば、ここや他のところで聞けばいいんじゃないかな。
http://www.qtcentre.org/forum/
http://www.qtforum.org/
847845:2009/09/22(火) 09:39:30
>>846

分かりました。ありがとうございます。
やっぱり、本が一番なんですね。
848デフォルトの名無しさん:2009/09/22(火) 16:39:06
QMessageBox で 日本語表示するには、どうしてもおまじないが必要ですか?

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
849デフォルトの名無しさん:2009/09/22(火) 18:07:47
Qtで図形を描画したいんですが、カスタムウイジェットを作る必要があるようです。
Qt Designerでカスタムウイジェットを作るにはどうすれば良いですか?
ContainersのWidgetでエリアを指定すれば良いでしょうか?
その場合、cppやhファイルを自動生成できますか?

850デフォルトの名無しさん:2009/09/22(火) 20:31:39
>>848
ただ日本語を表示するだけなら
const char const*から、QString型に変換するQStringのstaticな関数、
QQString::fromUtf8()やQString::fromLocal8Bit()を使う手もあるけど、
これだと一々この長い記述が必要になる。
それに翻訳の仕組みが使えない。
851デフォルトの名無しさん:2009/09/22(火) 20:58:42
>>849
Qt Creatorを使っているのならば、メニューの「ファイル」ー>「新規作成...」
を選ぶ。
そして、表示されるダイアログからデザイナーフォームクラスを選んで基底クラスウィジット
を選べば、コンストラクターを含むソースファイルを自動生成してくれる。
Qt Creatorには、Qt Designerの機能も組み込まれているので、そこでソースとGUIフォームを
編集することが可能だけど。
852デフォルトの名無しさん:2009/09/22(火) 21:23:06
>>851
ありがとうございます。
この方法で、cpp、h、ui関連したカスタムウイジェットが出来そうですが、
このuiをMainWindowのセントラルウイジェットに組み込むにはどうすれば
良いでしょうか?
853デフォルトの名無しさん:2009/09/22(火) 21:55:51
格上げ機能を使う
まず、>>851で選択した基底クラスウィジェットと同じクラスウィジェットを新規にMainWindowのセントラルウィジェットに組み込む
組み込んだウィジェットを右クリックし、「格上げ先を指定」を選ぶ
「格上げされたクラス名」に自作したカスタムウィジェットのクラス名を入力、右の追加ボタン、下の格上げボタンの順に押す
おしまい
854849:2009/09/22(火) 22:13:24
>>851
同じクラスウイジェットを新規MainWindowのセントラルウィジェットに組み込む
とはどのようにすれば良いでしょうか?
たびたび、すいません。

855デフォルトの名無しさん:2009/09/22(火) 23:09:04
>>854
例えばQFrameをテンプレートとして選択した場合は、MainWindowにQFrameを追加する
何も考えずに一覧からQFrameをドラッグして適当な場所に追加すればよい
QFrameでなくても基底クラスなら問題ないので、QWidgetを追加してもよい
ちなみに格上げしてもQtCreator上の見た目は変わらないから、プログラムを実行して確認してね
856849:2009/09/23(水) 07:24:28
>>851
MainWindowのプロジェクトに 新規>Qtデザイナフォームクラス>QFrame で
プロジェクト内に、cpp h uiができました。
でも、ここからMainWindowにドラッグ出来ません。
>一覧表からQFrameからドラッグして
一覧表からって、サイドバー(プロジェクト、開いているファイル)でしょうか?
画面を左右に分割してMainWindowとQFrameを両方表示してドラッグしてみても
うまく行きません。
857デフォルトの名無しさん:2009/09/23(水) 08:27:59
そのカスタムウィジェットは「QFrame」じゃなくて「QFrameを継承したカスタムクラス」でしょ
「QFrame」を追加しなさいって言われてるのに「カスタムクラス」を追加しようとしてもうまく行く訳がない
カスタムクラスじゃなくて、別に新しく「QFrame」をMainWindowに追加するんです
一覧っていうのはQt Designerの左端にあるウィジェット一覧です

これで分からないなら諦めてQLayout::addWidgetやQBoxLayout::insertWidgetを使いなさい
858デフォルトの名無しさん:2009/09/23(水) 08:34:25
QtCore4.dllやQtGui4.dllってbinフォルダとlibフォルダの両方に
入っているけど、何が違うの?どっちが何用とかある?
859デフォルトの名無しさん:2009/09/23(水) 10:00:39
>>858
binのはVC++で作られたdllで、libのはMinGWで作られたdllになっている。こういう構成なので、
フォームエディタで、Designerプラグインを使うには、VC++とVC++でビルドしたQtが必要。

860デフォルトの名無しさん:2009/09/23(水) 10:49:27
>>859
なるほど。分かりやすい説明ありがとう。
861デフォルトの名無しさん:2009/09/23(水) 11:59:32
862851:2009/09/23(水) 18:23:27
>>856
その順番で、MainWindowに既に作成したcpp h uiのクラスを組み込むには2つある。
1.853、857の人が言われているように格上げという機能を使う方法。
2.MainWindowのカスタムクラスでコードを使ってカスタムウィジットを配置する方法。
 この場合、カスタムウィジットクラスはとカスタムメインウィジットは同じGUIフォームには出せない。
 857の人の「QLayout::addWidgetやQBoxLayout::insertWidgetを使いなさい」というのは
 こちらの方法を言っている。

分からなかったらまた聞いて。
863851:2009/09/23(水) 18:27:21
>>862
訂正
>この場合、カスタムウィジットクラスはとカスタムメインウィジットは同じGUIフォームには出せない。
この場合、カスタムウィジットクラスはとカスタムウィジットは同じGUIフォームには出せない。

デフォルトでカスタムメインウィジットはメインウィジットに既に配置されている。
864デフォルトの名無しさん:2009/09/23(水) 21:00:48
Qt Designer の操作をあれこれ考えるよりも、もっと根本的なところを掴んだ方がよいと思う。
Qt Designerって、Qt API でコードをある程度書けるようになって、そこから楽になるためのツールだから、
Qt でどう書けばよいかを把握してから使った方がいいんじゃないの。
865デフォルトの名無しさん:2009/09/23(水) 22:44:02
確かに、その通りだと思う。
866デフォルトの名無しさん:2009/09/24(木) 03:47:03
QT CreatorからQTデビューなんだけど、
これ以前の書き方からずいぶんと変わった?

QTを使っているらしいソフト(Posterazor)を
修正しようかと思っているんだけど
なんかコードがQT Creatorで生成されるものと違う気がする。
867デフォルトの名無しさん:2009/09/24(木) 03:55:38
というか、以前は手動でプログラマが好き勝手書いていたのが
GUI自動生成されるようになったのか?
868デフォルトの名無しさん:2009/09/24(木) 07:59:52
Posterazor は、Fltk では。
869デフォルトの名無しさん:2009/09/24(木) 10:27:31
QT Creatorの最新版の日本語版くれ
870デフォルトの名無しさん:2009/09/24(木) 13:18:30
>>869
最新版というのは、安定版の最新版という意味ではなく
開発版の最新版という意味?
871デフォルトの名無しさん:2009/09/24(木) 17:05:54
>>869
日本語版をやってくれている人達は、頑張っているよ。
Qt の開発版のメッセージも更新されているから、きっと、Qt Creator も更新してもらえると思う。
872デフォルトの名無しさん:2009/09/24(木) 19:02:24
Qtに標準でついてくる、Qtライブラリの翻訳ファイルのqt_ja_JP.qmを
実行ファイルのリソースに埋め込んで使おうと思っているんですが
やっぱりこうするとQtライブラリの静的リンク扱いになって、ソフト本体もLGPLになってしまうんでしょうか?
873デフォルトの名無しさん:2009/09/24(木) 21:32:55
qt_ja_JP.qmのライセンスってなんだろう。
874デフォルトの名無しさん:2009/09/24(木) 21:55:01
横から入ってきてごめん。

自分のソースにQtのLGPL版を静的リンクした場合、必ず自分のソースを公開する必要があるの。

>>2 にLGPLのときは、わざわざ動的リンク時と断ってソース公開が任意となっている。

また、前スレhttp://pc11.2ch.net/test/read.cgi/tech/1194158506/885n-
の885では、「Qt 4.5 以降のものならば LGPL の下で自分の作ったコードを公開せずに商用利
用はできる。ただし、ダイナミックリンクでなくてはならない。スタティック
の場合の条件は現実的でないから...」とある。現実的ではない、とは何のこと?

http://www.sra.co.jp/qt/licence/index.html#n002 によると、
「Qt LGPL 版をスタティックリンクした際には、独自開発部分の
ソースコードを配布するか、独自開発部分のオブジェクトを配布する必要があります。」

Qt LGPL版を、静的リンクさせて公開したいとき、自分で作った部分を実行形式で配布すれば
ソース公開をする必要がないの?
875874:2009/09/24(木) 22:01:15
Wikipediaによると(http://ja.wikipedia.org/wiki/GNU_Lesser_General_Public_License)、
「ライブラリAに静的リンクしたプログラムBを配布する場合、Bのソースコードまたは
オブジェクトコードの配布を拒否してはならない。(LGPLv2-6a、LGPLv3-4d0)」
とあるけど、これはどちらも拒否してはならないということを意味するの?
876デフォルトの名無しさん:2009/09/24(木) 22:27:31
おれも前から気になってた部分だ。

LGPLのルールとしては>>875の通りで、アプリのソースを公開しなければ
ならないんだけど、NOKIAとしてはQtの独自開発部分だけを公開すれば
十分ですよ、という風に読める。

だけど、LGPLだと言ってるかぎりにおいては、NOKIAだけがソース公開の
請求元とは限らないので、バイナリを入手した他者がアプリのソース公開を
要求した場合どうするんだ、という問題はあるよね。
877874:2009/09/24(木) 22:29:10
(訂正)
>>Qt LGPL版を、静的リンクさせて公開したいとき、自分で作った部分を実行形式で配布すれば
ソース公開をする必要がないの?

Qt LGPL版を静的リンクさせて公開したいとき、ビルドしたときのQtのソースと、
自分で作った部分を実行形式で配布すればソース公開をする必要がないの?

もし、これが許されるとして、配布するときにパッケージを1つにする必要があるの?
例えば、ウェブサイトで2つリンクを貼って別々にダウロードできるようにするのは可能?
878874:2009/09/24(木) 22:42:36
ごめん。再訂正。

Qt LGPL版を静的リンクさせて公開したいとき、
* Qtと自分のソースをビルドし、リンクした実行形式(そのまま使えるアプリケーション)。
* ビルドしたときのQtのソース
* 自分で作った部分のバイナリ(リンクできる形式のもの)
を配布すれば、自分のソース公開をする必要がないの?
879874:2009/09/24(木) 22:47:01
>>876
878で書いた方法が可能ならば、他者のソースの公開を受け付けなくてもいいのかな
と思っていた。
違うかもしれないけど。
880デフォルトの名無しさん:2009/09/24(木) 22:50:31
>>878
それでOK

昔、ネスケ4が同じようにオブジェクトファイルを公開していて、
Motifのバグで日本語処理がおかしかった部分をLesstifで直して、
Lesstifとネスケのオブジェクトをリンクさせるということが行われていた。
881874:2009/09/24(木) 22:53:15
>>880
前から疑問になっていたことが、やっと理解できた。
ありがとう。
882デフォルトの名無しさん:2009/09/24(木) 23:00:11
うぉそれで良かったのか、触らぬ神にたたりなしで動的リンクしか使ってなかった、
みんなありがとう。
883デフォルトの名無しさん:2009/09/24(木) 23:39:55
どっちみち、Dll配布するか、オブジェクト公開するかだから
あまり変わらんのと違う?
884デフォルトの名無しさん:2009/09/25(金) 00:00:17
オブジェクトファイルだとリバースエンジニアリングがちょっとだけ楽になる
885デフォルトの名無しさん:2009/09/25(金) 00:01:22
>>883
バイナリが1つになっているものを公開できるところがいい。
インストール時の設定ミス。依存ライブラリ(Dllを含む)の上書き変更を気にしないですむ。
ユーザーが混乱することを避けることができる。
886デフォルトの名無しさん:2009/09/25(金) 08:30:27
QSharedPointerが明示的なデストラクタを必要としなくなるのは何時だろ?

>>842
色々込み入った内容なのでBoostC++Librariesプログラミングなんか参考にして下さい。
887デフォルトの名無しさん:2009/09/25(金) 09:14:22
>>886
質問の意味が分からないんだけど。
shared pointerは、通常明示的なデストラクタ呼び出しを必要としないという
認識なんだけど。
888デフォルトの名無しさん:2009/09/25(金) 09:55:12
>>887
別の問題ですかね。
QObjectを継承したクラスでQSharedPointerのメンバを持たすと
テンプレート引数にした型の定義が必要になるのですけど。
boostのだと問題ないです。
889デフォルトの名無しさん:2009/09/25(金) 09:58:31
動的削除子を使用してないという問題ですかね。
[参考]http://d.hatena.ne.jp/Cryolite/20060108
890デフォルトの名無しさん:2009/09/25(金) 14:39:15
>>888
>QObjectを継承したクラスでQSharedPointerのメンバを持たすと
>テンプレート引数にした型の定義が必要になるのですけど。
これの意味が分からないんだけど。
891デフォルトの名無しさん:2009/09/25(金) 15:46:38
>>890
ちょっと間違ってました。QObjectからの継承とは関係ないでした。

http://d.hatena.ne.jp/redboltz/20081003#1222991824

の内容と同じ問題です。
boost::shared_ptrはテンプレート引数の型がインラインのデストラク
タを持っていても問題ないのですけどQSharedPointerはboost::scoped_ptr
と同じ問題が起こるということです。
892デフォルトの名無しさん:2009/09/25(金) 19:21:02
>>891
こちらはLinux/g++なんだけど、簡単なサンプルで試した限りでは通ったけど。

QSharedPointer<IMPL>をポインタメンバーに持つクラスAにインライン関数ができないように
しなければならない。
例えば、こちらで作成した例では、クラスAにコピーコンストラクターと
代入演算子operator=()を定義する必要があった。


893892:2009/09/25(金) 20:11:16
もちろんデストラクターも定義した。

インライン関数にしないために、クラスAのメンバー関数はすべて、
実装ファイルに定義する必要がある。
894デフォルトの名無しさん:2009/09/25(金) 21:24:50
windows/mingwですけどこっちはデストラクタだけで良かったです。
895デフォルトの名無しさん:2009/09/26(土) 02:25:25
>>868
> Posterazor は、Fltk では。

いえいえ、そっちじゃなくて、最新開発版です。
http://posterazor.git.sourceforge.net/git/gitweb.cgi?p=posterazor/posterazor;a=shortlog

http://www.qt-apps.org/content/show.php/PosteRazor?content=90431
1.9.5 is a preview version of the upcoming PosteRazor 2.
It is the Qt port of the good old PosteRazor 1 (see http://posterazor.sourceforge.net/).
After user tests and hopefully feedback, and with a few new features, PosteRazor 2 will be released.
896デフォルトの名無しさん:2009/09/26(土) 20:15:08
>>895
.uiの生成コードの使い方ということなら、Qt Creator 1.2の方法と違うけれど、
Posterazorの多重継承で使う方法は、Qt Creator 1.3からは選択できるようなっています。
897デフォルトの名無しさん:2009/09/26(土) 22:14:25
Qt Reference Documentation の翻訳をしてる方っているのでしょうか?
日本語のリファレンスがほしい・・・。
898デフォルトの名無しさん:2009/09/26(土) 22:50:47
>>897
下記のサイトの人が翻訳しているみたい。
でも一人でされているようで、あまり進んでいないみたい。
http://qt.linux-life.net/4/doc/ja/index.html
899デフォルトの名無しさん:2009/09/26(土) 23:10:22
かわりに翻訳して下さい・・・。
900デフォルトの名無しさん:2009/09/27(日) 10:34:14
>>899
40人集めましょう。
htmldocでA4にフォーマットしてみると20,175ページ。
翻訳期間を見積もってみると、1日A4/5ページ、1年200日の翻訳
をするとして、20年かかります。40人集れば、半年でできます。
バージョンアップは、10ヶ月前後毎なので、一度翻訳ができれば、
10〜20人が維持できれば、バージョンアップにも付いて行けそうです。

901デフォルトの名無しさん:2009/09/27(日) 11:42:31
>>899
翻訳者を募集するフォーム、意見を交換できるフォームを用意すればいいんじゃない。

例えば、SourceForge.jp見たいなところにプロジェクトを立ち上げるのもいいかも。
902デフォルトの名無しさん:2009/09/27(日) 12:03:38
自分が英語を勉強するのが一番良いのではないでしょうか

と言ってみるテスト
903デフォルトの名無しさん:2009/09/27(日) 12:59:12
>>902
英語苦手だという人や、取り合えず早く知りたい、
誤解せず理解したい(誤訳があったらあれだけど)などのときには
たとえ英語が多少分かっても、翻訳版はありがたく感じると思う。

それに、それがいいことかどうかは別だけど、
ユーザーを増やすためには、必要なような気がする。
904デフォルトの名無しさん:2009/09/27(日) 13:09:41
読むのに苦労はするけれど、翻訳すると検索して調べ難くなるので、元の英文のままの方がよいです。
905デフォルトの名無しさん:2009/09/27(日) 13:23:02
>>901と同じだけど、どっかにプロジェクトとして登録してほしい。
画面上でいきなり翻訳できるのも便利かもしれないけど、
いきなり翻訳するのはけっこう勇気がいる。

あと、今のはバージョン管理がどうなっているのか分かりにくい。
906デフォルトの名無しさん:2009/09/27(日) 13:41:56
http://doc.trolltech.com/4.6-snapshot/
次の4.6のリファレンス、がらっと構成が変わっている。
907デフォルトの名無しさん:2009/09/27(日) 14:30:46
英語が分からんから、変わったかどうか、よく分からん。
908デフォルトの名無しさん:2009/09/27(日) 14:51:40
これで違いが分からんとか英語以前の問題
909デフォルトの名無しさん:2009/09/27(日) 21:33:36
2万ページの翻訳ってプロにやらせたらいくらくらいするんだろうな
数千万は行きそう
910デフォルトの名無しさん:2009/09/27(日) 21:49:59
trolltechは 釣りのテク という意味でよろしかったのでしょうか?
911デフォルトの名無しさん:2009/09/27(日) 22:47:02
>>909
1ページいくらだろうな?
ちょっとググってみてよ誰か。

って言ってみるテスト。
912デフォルトの名無しさん:2009/09/27(日) 22:52:34
1word 30円程度だそうだ
913デフォルトの名無しさん:2009/09/27(日) 22:53:33
フリーランスだと10〜15円
914911:2009/09/27(日) 22:57:55
1wordが10〜30円・・・だと!?
高いw

しかもプログラミングの知識が必要だろうから
その辺、特殊な技術料とか取られそうな予感。
915デフォルトの名無しさん:2009/09/28(月) 02:03:03
LGPL版を使う場合、プラグイン(DLLでの動的リンク)にQtを使うのはまずいんかね。
ホストアプリケーションにリバースエンジニアリング禁止条項がある場合、LGPLに抵触する?
916デフォルトの名無しさん:2009/09/28(月) 02:14:46
問題ないよ。


・・・ってレスが2chに書かれたら安心して使うの?
917デフォルトの名無しさん:2009/09/28(月) 02:31:05
ちゃんとした解釈か前例があれば使う
918デフォルトの名無しさん:2009/09/28(月) 02:48:28
ホストアプリケーションを自分で書いていない以上
ホストのリバースエンジニアリング禁止が理由で
プラグイン開発者が訴えられる可能性はなくね?
919デフォルトの名無しさん:2009/09/28(月) 02:53:41
すれち
【殺しの】ライセンス【道で拾った】
http://pc12.2ch.net/test/read.cgi/tech/1045006087/
920デフォルトの名無しさん:2009/09/28(月) 16:09:00
ドキュメントを翻訳して公開するのってライセンス的にどうなの?
921デフォルトの名無しさん:2009/09/28(月) 16:17:24
問題ないよ。


・・・ってレスが2chに書かれたら安心して使うの?
922デフォルトの名無しさん:2009/09/28(月) 16:22:03
Qtのドキュメントはソースコードにコメント形式で書かれているから
ソースと同じライセンスだと思う。ドキュメントの翻訳もソースコードの
再配布と同じでしょ。
923デフォルトの名無しさん:2009/09/28(月) 16:50:46
>>921
大丈夫と書かれても安心できないが、>>922のように根拠や付帯情報も
付け加えられる場合が多い。
そういうわけで、質問してその答えに対して検討していくスタイルも
有効ではないだろうか?
924デフォルトの名無しさん:2009/09/28(月) 20:00:16
>>918
そもそもLGPLedなアプリケーションとのリンク自体がNGなんじゃね?
925デフォルトの名無しさん:2009/09/29(火) 08:00:28
926デフォルトの名無しさん:2009/09/29(火) 11:21:17
qtcreator日本化されません
Fedora11でyum install qtcreatorしただけです。
環境変数LANGはja_JP.UTF-8にセットしてあります。
他何か悪そうなところはありますか
927デフォルトの名無しさん:2009/09/29(火) 13:38:39
>>926
Windowsを使っていないから
928デフォルトの名無しさん:2009/09/29(火) 13:43:37
Windows版しか日本語化できないよ。
929デフォルトの名無しさん:2009/09/29(火) 13:47:15
>>926
821(必要なら804,805,807,811,816,819も見て)は見た?
930デフォルトの名無しさん:2009/09/29(火) 13:47:17
>>926
・Qt Creator v1.2以降じゃない
・Qtの翻訳ファイルがない or 見つからない

のどちらかが原因と思われます
931デフォルトの名無しさん:2009/09/29(火) 14:50:18
>>927-928
Linuxで使っているけど、ちゃんと日本語化されてるよ。
932デフォルトの名無しさん:2009/09/29(火) 16:07:55
>>931
ということは、日本語のリファレンスなどもあるのか?
933デフォルトの名無しさん:2009/09/29(火) 16:16:57
>>932
ない。

一部翻訳中のものならある。987以降で議論されている通り。
http://pc12.2ch.net/test/read.cgi/tech/1239996587/897n-
934デフォルトの名無しさん:2009/09/29(火) 16:19:02
>>933
訂正
987は897の間違い。
935デフォルトの名無しさん:2009/09/29(火) 17:29:01
いやいや、間違いとか言わずに>>987以降で議論しようぜ。
936デフォルトの名無しさん:2009/09/29(火) 17:41:57
>>935
速攻終わるぜw
937デフォルトの名無しさん:2009/09/29(火) 18:07:47
>>926
Qt Creator が日本語を表示するには
qtcreator_ja.qm と qt_ja_JP.qm の両方が必要なんだけど、
Fedora11 の qt-creator パッケージには qtcreator_*.qm が含まれてないので
日本語が表示できない。
qt.nokia.com から Qt Creator のパッケージを取ってきて $HOME の下に
インストールする方が早いと思う。
938デフォルトの名無しさん:2009/09/29(火) 23:37:27
939デフォルトの名無しさん:2009/09/30(水) 00:47:32
>>938
使ってみました。素晴らしい。
940デフォルトの名無しさん:2009/09/30(水) 20:59:40
Designerで
ウィンドウやボタンの色を換えるには?
941デフォルトの名無しさん:2009/09/30(水) 23:00:09
プロパティー > Pallet
942デフォルトの名無しさん:2009/09/30(水) 23:00:32
>>940
ウインドウのタイトルバーとはかスタイルを変えないとダメなのかもしれないけれど、
ウインドウの中とか、ボタンなどはpaletteという属性で選択できる。

でも個人的には、ソースコードを書いてスタイル切り替えるとかした方がいいような気がする。
あるいはカスタムスタイルクラスを定義するのも手かもしれない。
その方が統一がとれるしいいと思う。
943942:2009/09/30(水) 23:03:12
ちなみに、スタイルを切り替えてのプレビューはできるよ。
メニューの”フォーム”の”スタイルを指定してプレビュー”を選べばよい。
944デフォルトの名無しさん:2009/10/01(木) 15:37:39
QT Creatorってどうやって、シグナルとスロットをつなげてるの?

たとえば、pushButtonを一つ置いて、go to slotメニューからclickedスロットを作ったとき
それを呼び出す、どこにコードが書かれているのかがわからない。
生成されたmocにはコードは書かれているが、これってヘッダファイルから自動作成だろ?

残った考えられる方法としては、pushButtonという名前のオブジェクトの
clickedスロットは、on_pushButton_clickedという名前になるって
決め打ちしか考えられないんだが、そういうことなんだろうか?

あと、あとからpushButtonからpushButton2に名前を変更したとき、
コードの方は自動的に変わってくれないし、スロットとの接続は切れてしまうのな。

名前きめ打ちということなら、スロットとの接続が切れるのは理解できる。
これを正しく元のようにつなげるには、スロットの定義と実装の名前を変えれば良いんだよね。
945940:2009/10/01(木) 18:25:54
Qt Designerでpalletの色を変更して、スタイルを指定してプレビューすると変更されました。
でも、Createrからリビルドして実行してのもとのままです???
それと、Createrからuiを選んでDesignerを開くとメニュー>フォームが見当たらないんですが?

946デフォルトの名無しさん:2009/10/01(木) 18:34:02
>>942
ウィンドウのタイトルバーは、アプリケーションではなくて、ウィンドウシステムか
ウィンドウマネージャが表示しているので、アプリケーションからは変えられないですよ。
947デフォルトの名無しさん:2009/10/01(木) 18:40:39
>>944
on_* のスロットに繋げているのは、uic から生成される ui_*.h の中の QMetaObject::connectSlotsByName() です。
948デフォルトの名無しさん:2009/10/01(木) 18:50:05
>>944
947の人が答えたけど、補足する。
>QT Creatorってどうやって、シグナルとスロットをつなげてるの?
下記リファレンスに書いてあるけど、”on_オブジェクト名_シグナル名(Object* object)”
に当てはまるスロットが定義してあると、自動的につないでくれる。
http://doc.trolltech.com/4.5/qobject.html#auto-connection
http://doc.trolltech.com/4.5/qmetaobject.html#connectSlotsByName

>たとえば、pushButtonを一つ置いて、go to slotメニューからclickedスロットを作ったとき
>それを呼び出す、どこにコードが書かれているのかがわからない。
>生成されたmocにはコードは書かれているが、これってヘッダファイルから自動作成だろ?
GUIを定義したファイルであるフォームファイル(.ui)をソースコードに変換するツール
User Interface Compiler(uic)がメークファイルから呼ばれてui_の接頭文字がついた
ヘッダファイルが生成される。
http://doc.trolltech.com/4.5/uic.html#uic
949948:2009/10/01(木) 18:51:44
948のつづき
>>944
>残った考えられる方法としては、pushButtonという名前のオブジェクトの
>clickedスロットは、on_pushButton_clickedという名前になるって
>決め打ちしか考えられないんだが、そういうことなんだろうか?
上記の通りon_...に当てはまるスロットは自動的に接続してくれる。

>あと、あとからpushButtonからpushButton2に名前を変更したとき、
>コードの方は自動的に変わってくれないし、スロットとの接続は切れてしまうのな。
その場合、確かに自動的に切り変わってくれないし、自動的に接続ができない。

>名前きめ打ちということなら、スロットとの接続が切れるのは理解できる。
>これを正しく元のようにつなげるには、スロットの定義と実装の名前を変えれば良いんだよね。
ソースでスロットの名前定義、connect()による接続をすればいい。
実装の名前を変える、ってどういう意味?
950デフォルトの名無しさん:2009/10/01(木) 18:53:07
>>946
>ウィンドウのタイトルバーは、アプリケーションではなくて、ウィンドウシステムか
>ウィンドウマネージャが表示しているので、アプリケーションからは変えられないですよ。
勉強になりました。ありがとう。
951デフォルトの名無しさん:2009/10/01(木) 19:35:48
>>945
こちらの環境(LInux/X11)で確認したけど、Qt DesignerでもQt Createrに組み込まれた
Qt DesignerでもちゃんとPalletの変更が反映されたけど。

>...、スタイルを指定してプレビューすると変更されました。
Qt Designerのスタイルプレビュー機能は、あくまでプレビューするだけの機能で、
そこで選んだスタイルがファイルに適応されるわけではない。

>でも、Createrからリビルドして実行してのもとのままです???
コントロールなどの色が変わったのならば適応されていることになる。
952デフォルトの名無しさん:2009/10/01(木) 19:36:25
>>947-948
レスありがと。
ウェブの情報とか見てるとconnectでの接続の仕方は、QTの基礎だよって
感じで詳しく説明してあるのに、自動生成コードに無くて迷ったわw

最近のはずいぶんと変わっているんだな。関数名を見るとはスクリプト言語的だね。
connectSlotsByNameの実装ってどうなっているんだろう?
RTTIはつかわないようなことが書いてあったし、mocの
qt_meta_data_MainWindowとかqt_meta_stringdata_MainWindowが秘密の鍵なのかな。

> 実装の名前を変える、ってどういう意味?
開発中にオブジェクトの名前だけを変更したくなったとき
コードが自動で変わらないのであれば、どこを修正すればいいかという話。

関数名を見ているだけとわかったので、定義(ヘッダファイル)と実装(cppファイル)の
関数名を変えればいい。が答えだね。
953951:2009/10/01(木) 19:36:29
つづき
>>945
>それと、Createrからuiを選んでDesignerを開くとメニュー>フォームが見当たらないんですが?
ただ、フォームファイル(*.ui)ファイルをQt Creatorで開けば、組み込まれたDesignerが起動する。

でも、それをビルドするにはプロジェクトに登録する必要がある。
まず、プロジェクトファイルを開く。つぎに
ウインドウの左側に縦長に”モードセレクタ”と呼ばれるソースエディタとかデバッグ画面とかをきりかえる
ための領域があり、そこの”編集”を選んでエディタモードにする。
そしてそのモードセレクタのすぐ右にプロジェクトファイルやそこに登録されたファイルを表示するための
”サイドバー”という領域があるはず(無ければメニューの”ウインドウ”の”サイドバーを表示(Alt+0:ゼロ)”を選ぶか
画面したの四角くて白っぽく、中が四角く黒いくなっているアイコンをクリックする)。
表示されるプロジェクトファイルツリーのプロジェクト名の上で右クリック。
表示されるメニューの中から「既存のファイルを追加」を選んでフォーム定義ファイル(.ui)を
プロジェクトに追加する。
そして、そこに追加されたファイルをダブルクリックすれば、組込みのQt Designerでそのファイルを開いてくれる。
954951:2009/10/01(木) 19:37:21
つづき
>>945
注意しなければならないのは、どうもuiファイルの更新をちゃんと見てくれていない時があるので、
そのような時は、注意してMakefileやui_*.*などを削除してビルドし直せば良い
(大きいプロジェクトの場合は注意:ビルドし直しの時間がかかるから)。

あとは左下の”すべてをビルド”ボタンや”実効”ボタンを適宜押して
ビルドするなり、実行するなりすれば良い。
955951:2009/10/01(木) 19:46:28
つづき
>そのような時は、注意してMakefileやui_*.*などを削除してビルドし直せば良い
上記のui_*.*は、uicで自動的に生成されたファイルの方だから。

間違えてフォームのデータ*.uiを消さないように!!!!!!
956デフォルトの名無しさん:2009/10/01(木) 19:47:41
いや、もう全部消しちゃえ!!!!!
957945:2009/10/01(木) 20:03:06
メインウィンドウを選択してpalletを変更すると、色を変更できまいした。
でも、ボタンのpalletを変更しても色が変わりません?

958デフォルトの名無しさん:2009/10/01(木) 20:07:13
>>945
>注意しなければならないのは、どうもuiファイルの更新をちゃんと見てくれていない時があるので、

.proから生成されたMakefileが依存関係を見ているので、.uiの更新をちゃんと見てくれないというのはあり得ないでしょう。
そういうことが起きるとしたら、保存をし忘れているのでないでしょうか。
959デフォルトの名無しさん:2009/10/01(木) 20:17:08
>>957
>メインウィンドウを選択してpalletを変更すると、色を変更できまいした。
>でも、ボタンのpalletを変更しても色が変わりません?
QMainWindowもウイジットだし、QPushButtonなので、
対象をアクティブにして(右上のツリーからオブジェクトを選択または
配置されている対象オブジェクトをクリック)から右側下に表示されるQWidget内の
Paletteを変更すればいい。
960デフォルトの名無しさん:2009/10/01(木) 20:21:20
>>958
>.proから生成されたMakefileが依存関係を見ているので、.uiの更新をちゃんと見てくれないというのはあり得ないでしょう。
>そういうことが起きるとしたら、保存をし忘れているのでないでしょうか。
原因側からないんだけど、こちらでは確かに反映されないときがある。
*.uiちゃんと保存をしているのにビルド結果に反映されない。
961959:2009/10/01(木) 20:32:05
>>959
ごめん。訂正。
>QMainWindowもウイジットだし、QPushButtonなので、
QMainWindowもウイジットだし、QPushButtonもウィジットなので、
962デフォルトの名無しさん:2009/10/01(木) 20:43:29
>>957
Windowsですか。
963957:2009/10/01(木) 21:15:35
>>962 Ubuntuです。
やはり、Buttonを選択しプロパティのQWidgetのpalletのパレットの変更をクリック
簡易設定で、色を選んでるんですが、変わりませ
MainWindowの場合は、OKを押した段階で色が変わります?
964デフォルトの名無しさん:2009/10/01(木) 22:59:38
>>963
子Widgetは背景は基本的に親と同じのことが多いので、
自動的には描画しない。
autoFillBackground プロパティを true にすると反映されるはず。
ttp://qt.nokia.com/doc/4.5/qwidget.html#autoFillBackground-prop

それでだめならパレットのどれを変えたかを教えてクレイ。
965デフォルトの名無しさん:2009/10/01(木) 23:00:48
966デフォルトの名無しさん:2009/10/01(木) 23:14:03
qtってシグナルとスロットで、疎な結合になっている点はいいんだが、
そのせいで、このシグナルでどこのコードが実行されるのか
コードが追いにくいわw
967デフォルトの名無しさん:2009/10/02(金) 00:20:11
>>963
こちらはUbuntuのベースになっているDebian GNU/Linuxなんだけれど、
ちゃんと色が変わるよ。

ちなみに、Qt CreatorやQt Designerはどうやってインストールしたの?
パッケージ、ソースからビルド、Qtのビルド済みのもの、
それともSDKに含まれているやつ ?

こちらはソースからビルドしたものと、ビルド済みのQt Creator 1.2.1を
使っているけど。
968デフォルトの名無しさん:2009/10/02(金) 00:40:13
ヘルプでホイールが使えないんだけど(怒)
969デフォルトの名無しさん:2009/10/02(金) 01:13:56
>>968
何のヘルプ?
Qt Creatorでドキュメントを表示した時に、
マウスホイールでスクロールできないということ?
970デフォルトの名無しさん:2009/10/02(金) 01:15:43
>>969
そういうこと。Windows。
フォントもここだけ汚いし。
971デフォルトの名無しさん:2009/10/02(金) 02:29:15
>>970
Windows日本語版は、なぜか知らないけれど、デフォルトでアンチエイリアス機能が
効いていないからフォントが汚い。
972971:2009/10/02(金) 02:40:21
>>971
Qt Creatorの所為ではなく、OSがそうなっているという意味で。
973963:2009/10/02(金) 07:59:47
>>964 967
Ubuntu 9.04 Qt4.5.2 Creater1.2.1
さっき気づいたんだけど、パレットを変更ダイアログで
全てのパレットを変更をチェックして、全ての項目に色を
設定しても、下のプレビューウィンドウのPushButtonのテキストの背景も
変化してませんでした。
autoFillBuckgroundをチェックしても変わりませんでした。
palletの項目からはPushButtonのテキスト、背景色を変更できない?
974デフォルトの名無しさん:2009/10/02(金) 08:19:16
>>966
以前からのコールバックより追い難くなるとは思えないけれど、
他の追い易いのを具体的に教えてもらえますか。
975デフォルトの名無しさん:2009/10/02(金) 09:02:20
>>973
>Ubuntu 9.04 Qt4.5.2 Creater1.2.1
環境は分かった。

一回整理すると、

*やりたいことは
Windowやそこに配置されたPushButtonの色を変えたい。
paletteを変更して変える。

*状況は
WindowもPushButtonも色が変わらない。

これであってる?

976975:2009/10/02(金) 09:20:24
>>973
回答したことの訂正というか補足がある。

メインウインドウを作成した場合、デフォルトでメインウインドウと
それ以外のセントラルウィジット、メニュー、ツールバー
などが配置されている。
メインウインドウも含めて、全てQWidgetを継承しているから
それぞれがpalette属性を持っている。

そして、デフォルトで親の属性は子に継承(inherited)されるから、
例えば、セントラルウィジットの中に何もない状態で
セントラルウィジットのpaletteを変え(色を変え)、
そのあとPushButtonを配置すると、そのボタンはセントラルウィジットの
palette属性の色が使われるのでPushButtonの色が変わる。
977975:2009/10/02(金) 09:24:01
>>975
繰り返しになって悪いんだけど、
palette属性が複数個存在していることは理解している?
978975:2009/10/02(金) 09:25:49
>>975
ごめん訂正。975は973の間違い。

>>973
繰り返しになって悪いんだけど、
palette属性が複数個存在していることは理解している?
979973:2009/10/02(金) 10:09:46
>>978
Mainwindow>CentralWidget>PushButtonとそれぞれがPalletを属性を継承しながら
独自の属性を持ってる、でそれぞれの属性はアクティブ、非アクティブ、無効時
の属性が選択できるってことですよね
現状では、CentralWidgetの属性を変更後、PushButtonを配置すると属性は継承されてます。
でも、DesignerでCentralWidgetの属性を変更して背景色を変更すると、色は変わりますが
パレットの変更ダイアログのプレビュウィンドウのPushButtonは変化せず
なおかつ、リビルド実行するとセントラルウイジェットの色も元のまま
と言う状況です。
980デフォルトの名無しさん:2009/10/02(金) 12:15:36
>>979

>でも、DesignerでCentralWidgetの属性を変更して背景色を変更すると、色は変わりますが
>パレットの変更ダイアログのプレビュウィンドウのPushButtonは変化せず
centralWidgetのpalette属性を継承させて、その中に配置された
PushButtonの色を反映させたいときは、
centralWidgetのpalette属性の色役割の”Button”というところが
変わっていなければならないんだけれど、そうなっている?

>なおかつ、リビルド実行するとセントラルウイジェットの色も元のまま
プロジェクトフォルダの中のどこかにできるui_で始まるファイルを
削除してからリビルドするとどうなる?
こちらの環境では、このファイルが更新されないときがある(原因不明だけど)。
(注意!!!)*.uiファイルにあらず、ui_でファイル名が始まるほう。
981979:2009/10/02(金) 15:30:43
>>980
>centralWidgetのpalette属性の色役割の”Button”というところが
変わっていなければならないんだけれど、そうなっている?

ここも変更しています。
と、ui_mainwindowh何ですが、削除してリビルドしても反映されません
いろいろご指導いただいてありがとうございました。
この件については断念
来世でまたお会いしましょう
982デフォルトの名無しさん:2009/10/03(土) 01:47:45
4.5.3
983デフォルトの名無しさん:2009/10/03(土) 08:52:09
qtcreatorでスプリッターを配置するためのボタン(Lay out Horizontally in Splitter)が
暗くなったまま選択できないのですが、どうすれば選択できるようになるのでしょうか?
984デフォルトの名無しさん:2009/10/03(土) 09:18:39
>>983
複数のウィジェットを選択してからならできます。
985デフォルトの名無しさん:2009/10/03(土) 19:11:05
できました。ありがとうございました。
986デフォルトの名無しさん:2009/10/03(土) 20:54:35
VC以外のコンパイラ使うのは初めてなんですが、ソースコード中にマルチバイト文字を使うにはどうすればいいんでしょう?
VCでいうところのTEXTマクロのようなものはありますか?
987デフォルトの名無しさん:2009/10/03(土) 21:53:51
>>986
コンパイラは何?
MinGWのgccとか?
988デフォルトの名無しさん:2009/10/03(土) 22:34:19
>>986
というかそういうことは
C++相談室 part72
ttp://pc12.2ch.net/test/read.cgi/tech/1251773567/
で聞いてくれないかな?
989デフォルトの名無しさん:2009/10/03(土) 22:40:20
>>988
言葉が足りないだけで、QStringに変換する方法を聞きたかったのかも。
どうなのか分からないけど。
990デフォルトの名無しさん:2009/10/03(土) 22:41:16
>>987
そうです
win32-g++を指定しています

ソースコードの文字コードをUTF8にしてQObject::tr()を使うってことでいいんでしょうか?
その場合QtCreatorがデフォルトで使用する文字コードはどこで指定すればいいんでしょう?
メニューバーからファイル毎に変更する方法は分かったのですが…
991デフォルトの名無しさん:2009/10/03(土) 22:43:59
すいません書き込む前にリロードしてませんでした
Qtとは関係ない問題なんでしょうかね…出直してきます
992デフォルトの名無しさん:2009/10/04(日) 01:29:09
>>991
Qtに関係ある問題だと思うから出直さなくていい。
993デフォルトの名無しさん:2009/10/04(日) 02:53:22
>>990
プロジェクトごとの設定なら、プロジェクトを開いてから、左のモードセレクタから
プロジェクトをクリックし、プロジェクト設定をしたあと、
エディタの設定のところにデフォルトの文字コードを指定するところがある。
テンプレートから作成したプロジェクトに含まれるファイルがそれに対応するか否かはたしかめていないけど。
でも新しく作るファイルは対応するんじゃないかな。
Qt Creator全体のデフォルトは知らない。もしかしたら上の方法で切り替わるのかもしれないけど。
994993:2009/10/04(日) 02:54:54
>>933
訂正
>プロジェクトをクリックし、プロジェクト設定をしたあと、
プロジェクトをクリックし、プロジェクト設定を表示したあと、
995993,987:2009/10/04(日) 02:57:54
>>986, 990
QStringもtr()もQTextCodecを使ってコーデックしている(ユニコードに変換している)。
そこで、QTextCodecのこのデフォルト値を変えればよい。main()関数などで、
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
または、
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("EUC-JP"));
などすればよい。すると、QStringのコンストラクターなどは、ふつうに日本語を含むchar*を
正しくエンコード(ユニコードに)変換して、内部で保持してくれる。
たとえば、
const char* const sampleCString = "日本語を含む文字列";
QString sampleString(sampleCString);
tr()についてのみそうしたいならば、下記のようにしてもよい。
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
または、
QTextCodec::setCodecForTr(QTextCodec::codecForName("EUC-JP"));
また、その都度指定するならば、QStringのstatic関数を呼んでもいい。
QString sampleString = QString::fromLocal8Bit("日本語を含む文字列");
996993,987:2009/10/04(日) 02:59:11
続き、

>>3
も読んでおくといいよ。
とくに、qDebug()のところ。
4月の話だけど、多分変わってないと思う。

リファレンス:
http://doc.trolltech.com/4.5/qtextcodec.html#details
http://doc.trolltech.com/4.5/qstring.html#details
http://doc.trolltech.com/4.5/qtextcodec.html
997デフォルトの名無しさん:2009/10/04(日) 10:13:24
998デフォルトの名無しさん:2009/10/04(日) 12:21:00
>>997 書いてあった。

デフォルトではLatin-1扱いなので日本語を直接書いたらだめ。
Qt内部の文字コードはUCS2(サロゲートペア対応)なので
Latin-1の文字ならUCS2変換されて格納されるが、それ以外の文字コードでは正しく変換できない。
日本語を使いたければ、tr(ASCII文字列)とし、翻訳機能で翻訳するのが基本。
(Qt Assistant http://doc.trolltech.com/4.5/assistant-manual.html 参照)

どうしても使いたい場合は、main()のQApplecationインスタンス作成直後に
QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "SJIS" ) );
のようにすれば、ソースコードをSJISにして、ソースコード内に直接書くことができる。
例 QString nameString( "名前" );

逆に言うのなら、ソースコードにマルチバイト文字を使いたいのなら
マルチバイトを使ってソースコードを書き、そのソースコードの文字コードを
QTextCodec::setCodecForCStrings( QTextCodec::codecForName("文字コード ) ); と指定する。
999デフォルトの名無しさん:2009/10/04(日) 12:22:56
次スレ

【RAD統合環境】 Qt 総合スレ 5 【Win/Mac/Linux】
http://pc12.2ch.net/test/read.cgi/tech/1254366507/


RADに進化させました!
1000デフォルトの名無しさん:2009/10/04(日) 12:23:57
1000取った記念にオレもQt使ってみようかな
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。