【RAD統合環境】 Qt 総合スレ 9 【Win/Mac/Linux】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/12/14(火) 22:42:28ライブラリの機能は、フォーム、ボタンなどの各種ウィジェットからネットワーク、マルチスレッド、
グラフィックス(OpenGL)や各種コンテナ、XMLパーサー、組み込み JavaScript など、非常に多岐に渡ります。
公式の統合開発環境「Qt Creator IDE」を使えば、クロスプラットフォーム対応のRAD開発が可能です。
また、EclipseやVisual Studio上で開発したい人のためのアドインも用意されています。
■主な対応プラットフォーム(デスクトップ用途の場合)
Windows XP, Vista, 7
Mac OS X 10.4, 10.5, 10.6
Linux
■ライセンス
・オープンソース版(Open-source version)
LGPL 2.1 または GPL 3.0 のうちどちらかを利用者が選べます。
LGPL を選んだ場合はソースコード非公開のままでの商用利用が可能です(いくつか制限あり)。
※正確には通常「LGPL+商用利用向きの例外条項」を選ぶことにな7ります(Qtインストール先の「LGPL_EXCEPTION.txt」を参照)。
ちなみにGPLでも商用利用が不可能というわけではありません、念のため。
・商用版(Commercial version)
こっちはNokia社か日本の代理店(SRA社)とライセンス契約(年間30万くらい?)を結んで使います
■Qt を使って作られたソフト例
KDE、Adobe Photoshop Elements、Google Earth、Skype、DAZ Studio など
■前スレ
【RAD統合環境】 Qt 総合スレ 8 【Win/Mac/Linux】
http://hibari.2ch.net/test/read.cgi/tech/1280950209
0153デフォルトの名無しさん
2010/12/25(土) 00:31:42いや、無理だったからダウンも試してみたってことだよ
0154デフォルトの名無しさん
2010/12/25(土) 01:00:47ってできなかったけ?
0155デフォルトの名無しさん
2010/12/25(土) 02:23:40http://doc.trolltech.com/4.7/qabstractitemmodel.html#rowsInserted
0156デフォルトの名無しさん
2010/12/25(土) 02:39:49あーそゆことね。bool QAbstractItemModel::insertRows() が virtual で何もしてないそうだから、
オーバーライトしないとだめそうね。
0157デフォルトの名無しさん
2010/12/25(土) 12:14:090158デフォルトの名無しさん
2010/12/25(土) 12:17:27QWidget::update() じゃないの?
0160デフォルトの名無しさん
2010/12/25(土) 14:01:200161デフォルトの名無しさん
2010/12/25(土) 14:10:20MDIのサンプルもWebkitを使ったブラウザのサンプルもあるから、
組み合わせるだけで作れるわけで、作るだけなら難しくないさ。
0162デフォルトの名無しさん
2010/12/25(土) 14:11:20細かいこと言わなければ楽勝だよ
0163160
2010/12/25(土) 14:25:45ありがとう><; 細かいことはいいません。
MDIのサンプルもブラウザのサンプルもあるんですね><;
C#でつくろうとしたら、新しいドキュメントを開くときに
IEが開いてしまい。。
Qtってすごい使いやすいですね。C#やMFCよりずっといいです。
元C#つかいでQt歴2週間です。
これから、頑張って作ります><;
0164デフォルトの名無しさん
2010/12/25(土) 14:47:57これ見てQt触ってみてるんだけど、「QWebView」ってのがどこにあるのかわかりません
画像のなんとかLineの下には「QtDeclaratibeView」ってのになってます
使ってるのはLinux版のQt4.70、Qtcreator2.01
0165デフォルトの名無しさん
2010/12/25(土) 14:57:40Linux使いを名乗るなら、人に聞く前にソースコードをgrepする習慣をつけよう。
src/3rdparty/webkit/WebKit/qt/Api/qwebview.h
にそのままずばりのヘッダファイルがあるじゃないか。
Webkitの一部のようだな。
それから、4.7.0と4.70は全然違う。
4.70というのはパッチバージョンが70ということになる。
0166デフォルトの名無しさん
2010/12/25(土) 15:43:02>StandardItemModelのアイテムの追加・削除のシグナルは自分で作らないとだめなの?
rowsInsertedなどのシグナルがそのまま使えます。
>connect(a,SIGNAL(rowsInserted ( const QModelIndex & parent, int start, int end )),SLOT(updateDirTree()));
connectの書き方が正しくありません。こうすれば行を追加するとスロットが呼出されます。
connect(a, SIGNAL(rowsInserted(const QModelIndex&, int, int)), SLOT(updateDirTree()));
このようにしてもconnectできて、スロットが呼出されます。
connect(a, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(updateDirTree()));
connect(a, SIGNAL(rowsInserted(const QModelIndex, int, int)), SLOT(updateDirTree()));
0167デフォルトの名無しさん
2010/12/25(土) 15:45:520168デフォルトの名無しさん
2010/12/25(土) 15:47:57QStandarItemModelだから呼出されるよ。やってみな。
0169デフォルトの名無しさん
2010/12/25(土) 15:51:13モデルなんだから行の追加で、rowsInsertedが呼出されないというのはありえないよ。
0170デフォルトの名無しさん
2010/12/25(土) 15:51:26>>155
0172デフォルトの名無しさん
2010/12/25(土) 16:11:17Note: Components connected to this signal use it to adapt to
changes in the model's dimensions.
It can only be emitted by the QAbstractItemModel implementation,
and cannot be explicitly emitted in subclass code.
俺様的超訳
注意:このシグナルに接続されたコンポーネントは、モデルの次元の変化
に適合するために使われる。
QAbstractItemModel の実装によってのみ emit され、派生クラスのコード
にて明確に emit されることはない。
Qt Assistant を見ればこう書いてあるんだけど、このドキュメント文が間違ってるの?
0173デフォルトの名無しさん
2010/12/25(土) 16:34:580174デフォルトの名無しさん
2010/12/25(土) 16:35:40派生クラスのコードにて明確に emit されることはないけど、QAbstractItemModel の実装によって emit されるので
rowsInsertedシグナルはemitされる
0175デフォルトの名無しさん
2010/12/25(土) 16:42:460176デフォルトの名無しさん
2010/12/25(土) 16:50:12どうやれば・・・
0177デフォルトの名無しさん
2010/12/25(土) 16:58:03Q_DECL_EXPORTとQ_DECL_IMPORTでシンボルを外部から扱えるようにすること
この2つでできます。詳しくは、qmakeと*DECL*のドキュメント。
0178デフォルトの名無しさん
2010/12/25(土) 16:59:01connectが間違っているだけ。
0179デフォルトの名無しさん
2010/12/25(土) 17:29:18余程のことがない限りは派生クラスで派生元のメソッドやスロットは普通に呼び出せるよ。
なので >155,156 は誤り。
>166 の指摘通りだと思うよ。
QStandardItemModelか……。こんな便利なクラスがあったんだな。
うっかり自分でモデルクラスを一式定義しちゃったよ。
slot使ってないからview側と相互参照しちゃって非常によくない設計w
QStandardItemModel → QStandardItemはQVariantが入るんだけど、
ここにユーザー定義クラスは入れられるのかな?
それならQStandardItemModel仕様に自作のアプリをそっくり書き換えちゃうんだけど。
0180デフォルトの名無しさん
2010/12/25(土) 17:37:55合っている。QStandardItemModelもこの記述を守っている。
beginInsertRows()を呼び出し、endInsertRows()を呼出しているから、
endInsertRows()の呼び出しによってQAbstractItemModelのrowsInserted()シグナルがemitされる。
0181デフォルトの名無しさん
2010/12/25(土) 18:03:17>QStandardItemModelか……。こんな便利なクラスがあったんだな。
本格的にモデルを作る前に試すのにはよいです。
しかし、データを全部抱え込んでしまうので、モデルを作る方が効率を考えた拡張ができる余地を残せます。
>QStandardItemModel → QStandardItemはQVariantが入るんだけど、
>ここにユーザー定義クラスは入れられるのかな?
setData()? QVariantはユーザー定義クラスも拡張して追加できます。
0182デフォルトの名無しさん
2010/12/25(土) 19:25:02qmakeで*.proファイルに
QT += script
CONFIG += uitools
と記述すると、[QT]に関しては共有ライブラリへのリンク、
CONFIGに関してはスタティックライブラリのリンク、
そしてinclude PATHの追加解決が行われるようです。
qt-4.7.1 + vs2008 の場合、[QT]に関する設定はプロジェクト初期設定時にできるけど、
CONFIGに関する設定は全部手動なのかしら?
*.libの追加はともかく、include PATHの追加が面倒。
qmakeとの互換性は今のところ気にしてないけど……うーん。
0183デフォルトの名無しさん
2010/12/25(土) 19:29:180185デフォルトの名無しさん
2010/12/25(土) 20:18:270186デフォルトの名無しさん
2010/12/25(土) 20:19:150187デフォルトの名無しさん
2010/12/25(土) 20:47:27ありがとうございます。プログラミングについていまいち理解していないようで申し訳ないです。
言いたかったのは、その解説ページの流れ通りにやっていたところQtCreatorのデザインの左のところに
QWebViewが表示されていなかったため、どうすればいいのかわからなくなったということです。
一応外部からエディタつかって編集することでQWebView使うことが出来ました。
この記事が書かれた時からのアップデートで表示内容が変わったということなんですかね
0188デフォルトの名無しさん
2010/12/25(土) 21:31:40メンバ関数の登録の仕方→直接はできない
なので、staticメンバ関数を用意して、自分自身のインスタンスを問い合せて
改めてメンバ関数を呼び出す形になる。
class ByteArrayClass : public QObject, public QScriptClass{
public:
ByteArrayClass(QScriptEngine *engine);
QScriptValue newInstance(int size = 0);
private:
static QScriptValue construct(QScriptContext *ctx, QScriptEngine *eng);
};
ByteArrayClass::ByteArrayClass(QScriptEngine *engine)
: QObject(engine), QScriptClass(engine) {
// ...
ctor = engine->newFunction(construct, proto);
ctor.setData(qScriptValueFromValue(engine, this));
}
QScriptValue ByteArrayClass::construct(QScriptContext *ctx, QScriptEngine *) {
ByteArrayClass *cls = qscriptvalue_cast<ByteArrayClass*>(ctx->callee().data());
// ...
return cls->newInstance(size);
}
0189デフォルトの名無しさん
2010/12/25(土) 21:36:23Bug #674367 in qtwebkit-source (Ubuntu): “QWebView widget missing in designer.”
https://bugs.launchpad.net/ubuntu/+source/qtwebkit-source/+bug/674367
0190デフォルトの名無しさん
2010/12/25(土) 21:48:50Ubuntuです。ありがとうございました。
0192デフォルトの名無しさん
2010/12/25(土) 22:31:15>>160
↓
>>166
0193デフォルトの名無しさん
2010/12/25(土) 23:43:23MFCだとタスクバー 非表示あたりで、検索できるのにorz
0194デフォルトの名無しさん
2010/12/26(日) 00:45:27OS標準の動きから外れるようなことは……別に不可能じゃないだろうけど。
Jane Styleみたいに、元がタスクバー無しのアプリに
後から無理やりタスクバーの部分を表示するような
間抜けな仕様になることもあるけどねw
0195デフォルトの名無しさん
2010/12/26(日) 01:03:53こういうこと?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent,Qt::Tool),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindowのコンストラクタにて、QMainWindowに渡す引数の2つめに
「Qt::Tool」を追加する。
0196193
2010/12/26(日) 01:05:33こんなメモ帳アプリを作っているんですが、
タスクバーに色々と表示されると邪魔なのでタスクバーから削除したんです
ttp://up3.viploader.net/desktop/src/vldesk003429.png
0197193
2010/12/26(日) 01:16:20QMainWindow(parent,Qt::Tool)をやってみたのですが、少し動作がおかしいみたいです
これをやってみて思った通りに動かなかったので、質問をしてみました
zipをアップロードしたのでご覧ください
ttp://www1.axfc.net/uploader/Sc/so/187544.zip
0198デフォルトの名無しさん
2010/12/26(日) 01:16:30今のところPython + Qt + Javascriptという誰得のアーキテクチャになっている。
Javascript側の実装をPythonに移植すれば
QtScriptよりも大規模な開発で使えるようになる、かもしれないという希望込みで。
http://knivez.homelinux.org/~spro/python/dist.zip
0199デフォルトの名無しさん
2010/12/26(日) 01:32:21他のOSで動かす場合も、環境が整っていればソースコードのコピーだけで済むし
0200デフォルトの名無しさん
2010/12/26(日) 07:00:28そういうアプリならトレイに入れるんでないかな
ttp://doc.trolltech.com/4.7-snapshot/desktop-systray.html
0201デフォルトの名無しさん
2010/12/26(日) 07:07:21うーん?
0202デフォルトの名無しさん
2010/12/26(日) 07:23:33でタスクバーから消えた
0203193
2010/12/26(日) 12:09:26そうそう、タスクバーからは消えるんだよね
ミクはちゃんと表示されているんだけど、コメントを書くwidgetがちゃんと表示されない
コメントを書くwidgetは表示されるんだけど、かなり遅れて表示されるorz
0204デフォルトの名無しさん
2010/12/26(日) 12:51:26Ubuntu 10.10で試すと、コメントを書くwidgetがすぐ表示されました。
0205デフォルトの名無しさん
2010/12/26(日) 16:40:26WindowsXP SP3でビルドしてみたけどどっちのWidgetもすぐ表示されたよ
ところで随分楽しそうな卒研だね
0206193
2010/12/26(日) 18:32:22ありがとうございます
>>205
友達が卒研作っているらしいので、なんとなく一緒にプログラミングしてます
でも、自分は職業プログラマ(.net/vb6)です
0207デフォルトの名無しさん
2010/12/26(日) 18:58:00QMainWindowから独立したQWidgetを表示するにはどうすればおk?
コンストラクタの引数を消せば別ウィンドウになったけど
setWindowModality(Qt::WindowModal);
モーダルが有効にならない。
0208デフォルトの名無しさん
2010/12/26(日) 19:12:190209デフォルトの名無しさん
2010/12/26(日) 19:19:29オライリーのQt 4プログラミング入門を最初からじっくりと読んで勉強した方がよいですよ。
0210デフォルトの名無しさん
2010/12/26(日) 20:00:29世の中エスパーはそんなにいないぞ。
>>207
QWidget *w = new QWidget(this,Qt::FramelessWindowHint)
こういうこと?
0211210
2010/12/26(日) 20:02:010212デフォルトの名無しさん
2010/12/26(日) 20:16:28モーダルならQDialogじゃねぇの?
0213207
2010/12/26(日) 20:51:440214デフォルトの名無しさん
2010/12/26(日) 21:00:510215デフォルトの名無しさん
2010/12/26(日) 21:02:17誰か書けば小銭になるのになQt本
0216デフォルトの名無しさん
2010/12/26(日) 21:03:36内容はしらないけど
0217デフォルトの名無しさん
2010/12/26(日) 21:06:02SRA作ってくれー
0218デフォルトの名無しさん
2010/12/26(日) 21:46:472009年に発売したみたいだから、qt4が対象なんだろうと思うけど
Qtは簡単じゃないだろwwww
0219デフォルトの名無しさん
2010/12/26(日) 22:15:04その本、VSアドインのことしか載ってないからQt Creatorのことはわからいんだよね。
0220デフォルトの名無しさん
2010/12/26(日) 22:32:05「Qt4プログラミング入門」よりもひどい
0221デフォルトの名無しさん
2010/12/26(日) 23:03:25読みきれないほどの分量というわけでもないし。
0222デフォルトの名無しさん
2010/12/26(日) 23:13:450223デフォルトの名無しさん
2010/12/26(日) 23:40:050224デフォルトの名無しさん
2010/12/27(月) 00:41:560225デフォルトの名無しさん
2010/12/27(月) 03:52:250226デフォルトの名無しさん
2010/12/27(月) 04:20:05ヘルプ中で引っかかるサンプルプログラムと
Qt Createrで呼び出せるサンプルとの関連が非常に分かりにくい点を除けば。
0227198
2010/12/27(月) 04:25:43Qt + ui + PySideで電卓アプリが作れることを確認したよ。
QtScriptの場合と違ってメソッドの呼び方の流儀が違うところでちょっと引っかかったくらい。
# 例えばlineEdit.text = "abc" と書けたのが
# lineEdit.setText("abc") と書く形になるとか。
# PySideの方がQt本来の記述法に近いか。
Portable-PythonにPySideを入れて持ち歩けば、
スクリプトだけでさくさくGUIアプリが作れるエコシステムができてしまうな。
従来のPython/Tkよりよほどナウい(死語)んじゃね?w
0228デフォルトの名無しさん
2010/12/27(月) 07:46:030229デフォルトの名無しさん
2010/12/27(月) 12:05:59Pythonだけで作るならそっちの方がいいかもだけど、
C++で作る部分も少なからずでてくるので、やっぱりQtがいいかなと。
なまじPythonだけで作れてしまうからどこからをC++にするかは迷いどころだけどね。
0230デフォルトの名無しさん
2010/12/27(月) 13:45:49C++で書いたクラスをPythonで使えるようにしたり、
Pythonで書いたクラスをC++で使えるようにする簡単な方法ってあるの?
0231デフォルトの名無しさん
2010/12/27(月) 13:51:480232デフォルトの名無しさん
2010/12/27(月) 14:08:270233デフォルトの名無しさん
2010/12/27(月) 14:42:180234デフォルトの名無しさん
2010/12/27(月) 16:11:40Pythonは決まった形式のC関数しか読まない仕組みなので、
C++で書いたライブラリ自身がネイティブで対応する場合以外は
C/C++によるラッパーが必要。
準備を整えたC++ライブラリをPythonで使うのは非常に簡単。
import imp
example = imp.load_dynamic("example", "example.dll")
Pythonで実装したクラスをC++で扱えるようにするのは
不可能ではないけど非常に面倒なのでやらないほうが無難。
スレ違いなのでこの限りにしておきます。
0235デフォルトの名無しさん
2010/12/27(月) 16:48:49C++とPythonの中を仲介してくれるいいライブラリがあったよな。
Boost.Python
だ。
0236デフォルトの名無しさん
2010/12/27(月) 17:29:400237デフォルトの名無しさん
2010/12/27(月) 17:37:37swig使ったら、*.iのインターフェイス定義(≒C++)だけ書いたら、
あとはsetup.pyをコピペででっちあげてpythonから実行したら、
ラッパー全部作ってくれたwww これは楽www
スレ違いスマソ
0238デフォルトの名無しさん
2010/12/27(月) 19:56:050239デフォルトの名無しさん
2010/12/27(月) 21:50:18Nokia公式には、その役割を果すのはQMLではないかと
0240デフォルトの名無しさん
2010/12/27(月) 22:18:040241デフォルトの名無しさん
2010/12/27(月) 23:11:450242デフォルトの名無しさん
2010/12/27(月) 23:18:570243デフォルトの名無しさん
2010/12/28(火) 00:51:000244デフォルトの名無しさん
2010/12/28(火) 00:54:14ちょっと触ってみた。
JavaScriptとPythonを融合したような構文になっていて、
ソースコードがモジュール化できる。
単独では起動できなくてQML Viewerというツールの中で動作する。
なんだかSilverlightっぽい感じ。モバイル向けだそうで、用途も似通ってるわな。
0245デフォルトの名無しさん
2010/12/28(火) 16:17:22横は伸縮可能で
縦は固定にするにはどうすればいい?
0246デフォルトの名無しさん
2010/12/28(火) 16:18:22真ん中が、ウィンドウサイズを変えると縦まで伸びてしまう
右が、理想
0247デフォルトの名無しさん
2010/12/28(火) 16:27:190248デフォルトの名無しさん
2010/12/28(火) 17:29:52setFixedHeight() で一気に指定してもいい。
0249デフォルトの名無しさん
2010/12/28(火) 17:43:15QLabel自体は固定されたが、理想の状態にはならず(分かりやすいように背景を灰色に)
右の図はレイアウトの構造。
0250デフォルトの名無しさん
2010/12/28(火) 17:46:18上のラベル3つの追加するときストレッチを1にして
プログレスバーとボタンのストレッチを10にしても変わらず
0251デフォルトの名無しさん
2010/12/28(火) 18:15:450252デフォルトの名無しさん
2010/12/28(火) 18:26:19>もう時代にマッチしてないわな
追加された機能については書かれいてないが、書かれていることはQtを使う上で必要なことばかりだよ。
■ このスレッドは過去ログ倉庫に格納されています