一、環境:Qt5.9 + MinGM
二、步驟
【1】建立一個Qt Widgets Application工程
【2】.pro檔案中添加
QT += core gui quickwidgets 3dextras 3dcore 3drender 3dinput 3dquick 3dlogic qml quick 3dquickextras
【3】在界面檔案中添加QQuickWidget
【4】建立Resource File
【5】工程檔案中添加QML File
qml檔案會放在resource檔案的根目錄下。
【6】qml檔案中寫simple qml example中的内容
參考資料:qml 3d場景加載的兩種方式(https://my.oschina.net/urlove/blog/1808185)
【7】qml檔案與widget的互動
參考資料:QquickWidget與QML互動 ,自定義信号(https://blog.csdn.net/qq_16628589/article/details/79564397)
采用自定義信号的方式。實作點選按鈕之後球的大小變化。
qml檔案:
// qml
Item {
width: 800
height: 600
property int r: 4
signal sig_test(double rr);
function setr(rr){
r = rr
}
Component.onCompleted: sig_test.connect(setr)
……
SphereMesh {
id: sphereMesh
radius: r
}
……
}
.h檔案:
// .h檔案
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
signals:
void sendData(double );
};
#endif // MAINWINDOW_H
.cpp檔案:
// .cpp檔案
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->quickWidget->setSource(QUrl("qrc:/Quick1.qml"));
connect((QObject*)this, SIGNAL(sendData(double)), (QObject*)ui->quickWidget->rootObject(), SIGNAL(sig_test(double)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
emit sendData(ui->lineEdit->text().toDouble());
}
三、最終效果:
四、其他
但其實還可以用qml寫界面檔案,這樣界面也更美觀。