一、环境: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写界面文件,这样界面也更美观。