在Qt Gui中嵌入QML
測試環境: Qt 5.5.1 msvc2010
新建VS工程, Qt Gui專案(專案名字這裡是QtFirst)
UI介面
設計ui介面, 如圖
因為是雙向測試, 所以先來個按鈕, 把pushButton的clicked訊號連線到QtFirst的槽
專案程式碼
QtFirst.h
class QtFirst : public QMainWindow
{
Q_OBJECT
public:
QtFirst(QWidget *parent = 0);
~QtFirst();
private:
Ui::QtFirstClass ui;
protected slots:
void slot1();// 響應pushButton的clicked訊號
void onTest1(QString str);// 響應QML的test1訊號
signals:
void test2(QVariant str);// 觸發QML的onTest2槽
};
QtFirst.cpp
QtFirst::QtFirst(QWidget *parent) : QMainWindow(parent)
{
ui.setupUi(this);
QQuickView *QuickView = new QQuickView(QUrl("qrc:/qml/main.qml"));
QWidget *ViewContainer = QWidget::createWindowContainer(QuickView, this);
ViewContainer->setGeometry(0, 0, 300, 200);
QQuickItem* rootObject = QuickView->rootObject();
connect(rootObject, SIGNAL(test1(QString)), this, SLOT(onTest1(QString)));
connect(this, SIGNAL(test2(QVariant)), rootObject, SLOT(onTest2(QVariant)));
}
QtFirst::~QtFirst()
{
}
void QtFirst::onTest1(QString str)
{
qDebug() << str;
}
void QtFirst::slot1()
{
test2("abcdef");
}
main.qml
import QtQuick 2.5
Rectangle {
id: frame
x: 0
y: 0
width: 300
height: 200
color: "steelblue"
signal test1(string str);
function onTest2(str) {
textInput1.text = str;
}
MouseArea {
x: 0
y: 90
width: 80
height: 20
cursorShape: Qt.IBeamCursor
TextInput {
id: textInput1
anchors.fill: parent
text: qsTr("Text Input")
Keys.onReturnPressed: {
frame.test1(this.text);
}
}
}
}
程式碼解釋
1. QML
QML中的訊號用signal宣告, 槽用function宣告
特別的, 槽函式的宣告沒有變數型別, 因為QML類似JS, 只有值有型別, 變數沒有型別
2. C++
使用QQuickView動態建立QML檢視, 之所以不用QQuickWidget控制元件, 是因為中文輸入有問題(有知道如何解決的朋友可以說一下)
通過rootObject方法取得最頂層物件, 即id為frame的那個Rectangle, 測試時發現通過findchild拿不到(即使設定了objectName)
使用connect連線訊號/槽
3. 其他
QML的訊號, 變數有型別
QML的槽, 變數沒有型別, C++的訊號在宣告時引數統一用QVariant型別
完結
本人也是剛接觸這一塊, 如果哪裡不對, 請及時指出
相關文章
- 29.qt quick-在QML中呼叫C++類QTUIC++
- Qt QML之 JavaScript Host EnvironmentQTJavaScript
- 27.Qt Quick QML-State、TransitionQTUI
- QT QML模組與C++的互動QTC++
- QT QML模組的程式設計藝術QT程式設計
- Qt 介面美化教程 QSS QML Qt自繪方式優缺點對比QT
- 在Qml 中定義訊號並如何觸發
- 在Linux中,什麼是 GUI?LinuxGUI
- 在原生App中嵌入FlutterAPPFlutter
- 在Flutter中嵌入原生ViewFlutterView
- 透視Matplotlib核心功能和工具包 - GUI中嵌入圖GUI
- QT QML模組的程式設計挑戰與解決方案QT程式設計
- Qt 程序間通訊,Qt子程序嵌入主程序QT
- 關於嵌入式QML dict_pinyin.dat的編譯更新編譯
- 26.Qt Quick QML-RotationAnimation、PathAnimation、SmoothedAnimation、Behavior、PauseAnimation、SequentialAnimation和ParallelAnimationQTUINaNParallel
- OSG嵌入QT的簡明總結QT
- QML::qml與c++混編C++
- 24.Qt Quick QML-Canvas和Context2D詳解QTUICanvasContext
- 使用CefSharp在.NET中嵌入Google kernelGo
- 在JavaFX程式中嵌入Swing內容Java
- QML::ListViewView
- Qt 嵌入式圖形開發大全和QT開發手冊QT
- 基於Python與Qt的快速GUI程式設計PythonQTGUI程式設計
- 在WPF中嵌入WebBrowser視覺化頁面Web視覺化
- 在Word中嵌入已有的Excel工作表(轉)Excel
- 嵌入式裝置(T507)執行qml程式提示module is not installed
- 跨平臺GUI--Qt ACER Aspire on Linux 開發環境安裝配置(QT + GCC )GUIQTLinux開發環境GC
- 量子機器學習 (QML)機器學習
- 在GTK+中實現嵌入式視窗
- 在Flutter中嵌入Native元件的解決方案Flutter元件
- 25.Qt Quick QML-500行程式碼實現"合成大西瓜遊戲"QTUI行程遊戲
- 在Win11的WSL中體驗IDEA等GUI程式IdeaGUI
- QT中namespaceQTnamespace
- 如何實現在react現有專案中嵌入Blazor?ReactBlazor
- 將MYSQL資料顯示在QT的tablewidget中/將QT中的資料儲存到MYSQL資料庫中MySqlQT資料庫
- jmeter在non-GUI模式下用法JMeterGUI模式
- 嵌入式QT SQL中文亂碼問題解決QTSQL
- 在Qt中使用sleepQT