7月21日(土) に開催された Qt 勉強会 @ Nagoya #18 - connpass に参加しました。
そのまとめなどです。
Qt Quick での文字列の多言語対応
qsTr()
で囲う。
ToolButton
ToolButton タイプで利用できる各種プロパティが QtQuick.Controls 1.x と QtQuick.Controls 2.x とで全然違うのでメモ
version | QtQuick.Controls 1.x | QtQuick.Controls 2.x |
---|---|---|
派生 | Button | AbstractButton |
アイコン | iconName プロパティ | icon.name プロパティ |
ツールチップ | tooltip プロパティ | ToolTip QML Type |
要素押下時に表示 | 不明 | ToolTip.visible: down |
要素クリック時に表示 | 不明 | ToolTip.visible: pressed |
要素ホバー時に表示 | 不明 | ToolTip.visible: hovered |
QML で参照のみ可能なプロパティをできるだけ簡素に定義
Q_PROPERTY(QString hoge MEMBER m_hoge CONSTANT)
new するときとか、C++側からのみアクセスできる setter で値は代入する。
QML で実行可能な関数を定義
Q_INVOKABLE inline int hoge() {
return 10;
}
トラブルシューティング
Invalid import qualifier ID
Invalid import qualifier ID (訳: インポート修飾識別子が無効)
エリアスの頭は大文字でないとダメらしい。
- import "xxx" as my
+ import "xxx" as My
depends on non-NOTIFYable properties: XXXXX:YYYYY
depends on non-NOTIFYable properties: XXXXX:YYYYY (訳: 通知できないプロパティに依存)
読み取り専用の場合は CONSTANT
をつければ良い。
:
- Q_PROPERTY(QString title MEMBER m_title)
+ Q_PROPERTY(QString title MEMBER m_title CONSTANT)
:
Type XXXX unavailable
Type XXXX unavailable (訳: タイプ XXXX は利用できません)
XXXX をちゃんと定義しているはずなのに出る場合は、 XXXX の中でエラーになってるかも? その場合は、該当ファイルを対象としたエラーが出ている。
Qt Creator 上でのエラー注釈表示
QtQuick.Controls 2 を利用しているのに QtQuick.Controls 1 のエラーが表示される
どうやら Qt 5.11 を利用すれば大丈夫な様子。
Qt Quick と C++ とのやりとり
カスタムタイプの登録
※ HogeType
クラスは QObjct
から派生
:
qmlRegisterType<HogeType>("net.example.foo", 1, 0, "HogeType");
QQmlApplicationEngine engine;
:
qml では次のように利用
import net.example.foo 1.0
:
ApplicationWindow {
:
HogeType {
id: hoge
}
:
}
コンテキストに登録
※ AppData
クラスは QObjct
から派生
:
AppData data;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("appData", &data);
:
qml では次のように利用
:
Window {
:
Text {
text: appData.getTextFromCpp()
:
}
}
懇親会
もぐもぐ♪
参考
- Button QML Type | Qt Quick Controls 5.11
- AbstractButton QML Type | Qt Quick Controls 2 5.11
- [Solved] import js file - Invalid import qualifier ID - Sailfish Developers - Jolla & Sailfish OS Forum
- Integrating QML and C++ | Qt QML 5.11
- QMLとC++のバインディング - Qiita
- Qt Quick での C++ × QML バインディングについてまとめてみた - 凹みTips
- qt - Warning about non-NOTIFYable properties in QML - Stack Overflow