天天看点

【Qt】添加3D场景到widget中

一、环境:Qt5.9 + MinGM

二、步骤

【1】新建一个Qt Widgets Application工程

【2】.pro文件中添加

QT += core gui quickwidgets 3dextras 3dcore 3drender 3dinput 3dquick 3dlogic qml quick 3dquickextras

【3】在界面文件中添加QQuickWidget

【Qt】添加3D场景到widget中

【4】新建Resource File

【5】工程文件中添加QML File

qml文件会放在resource文件的根目录下。

【Qt】添加3D场景到widget中

【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());

}
           

三、最终效果:

【Qt】添加3D场景到widget中

四、其他

但其实还可以用qml写界面文件,这样界面也更美观。

继续阅读