天天看點

【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寫界面檔案,這樣界面也更美觀。

繼續閱讀