QtQuick与QWidget嵌套使用

采用Qml编写的界面程序,如何才能QWidge界面相互嵌套使用呢,有这样一个控件可以帮助你QQuickWidget,使用该控件需要在工程目录中添加:

QT += quickwidgets 
直接上代码:

test.qml

import QtQuick 2.0
import QtQuick 2.2
import QtMultimedia 5.0

Rectangle {
     id: page
     width: 500; height: 200
     color: "lightgray"

     Text {
         id: helloText
         text: "Hello world!"
         y: 30
         anchors.horizontalCenter: page.horizontalCenter
         font.pointSize: 24; font.bold: true
     }
 }
MyQuickWidget.h

<pre style="margin-top: 0px; margin-bottom: 0px;"><!--StartFragment--><span style=" color:#000080;">#ifndef</span><span style=" color:#c0c0c0;"> </span>MYQMLWIDGET_H
#define MYQMLWIDGET_H
 
 
#include <QWidget>
#include <QQuickWidget>
#include <QHBoxLayout>
 
 
// 该界面是继承QWidget的,这样才能与QWidghet的UI界面相结合使用
class MyQmlWidget : public QWidgetQtQuick与QWidget嵌套使用_第1张图片
{
    Q_OBJECT
 
 
public:
    MyQmlWidget(QWidget *parent = 0);
    ~MyQmlWidget();
 
 
private:
    QQuickWidget *quickwidget;
    QHBoxLayout *horlayout;
signals:
    void signalQmlQuit();
private slots:
    void SltQmlQuit();
};
 
 
#endif // MYQMLWIDGET_H
 
 
 .cpp文件 
 

#include "myqmlwidget.h"
#include <QQmlEngine>
#include <QDebug>

MyQmlWidget::MyQmlWidget(QWidget *parent)
    : QWidget(parent)
{
    quickwidget = new QQuickWidget();
    // 加入qml界面
    quickwidget->setSource(QUrl("qrc:///test.qml"));
    quickwidget->show();

    horlayout = new QHBoxLayout(this);
    horlayout->setContentsMargins(10, 10, 10, 10);
    horlayout->addWidget(quickwidget);

    // 还可以接受qml中的信号
//    connect(quickwidget->engine(), SIGNAL(quit()), this, SLOT(SltQmlQuit()));
}

MyQmlWidget::~MyQmlWidget()
{

}

void MyQmlWidget::SltQmlQuit()
{
    qDebug() << "qml is quit";
    emit signalQmlQuit();
}
此时在任何QWidget中都可以使用该qml完成的界面,但是该功能目前还不支持android平台,期望下一个版本可以发布到android平台上就好了。



你可能感兴趣的:(QtQuick与QWidget嵌套使用)