#include "Widget.h"
#include <QQuickView>
#include <QVBoxLayout>
#include <QQuickWidget>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
resize(300, 300);
// 方式一
// QQuickView *pView = new QQuickView();
// QWidget *pWidget = QWidget::createWindowContainer(pView, this);
// pView->setResizeMode(QQuickView::SizeRootObjectToView);
// pView->setSource(QUrl("qrc:/main.qml"));
// 方式二
QQuickWidget *pWidget = new QQuickWidget();
pWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
pWidget->setSource(QUrl("qrc:/main.qml"));
m_pButton = new QPushButton(this);
m_pButton->setText("Qt Widgets...");
QVBoxLayout *pLayout = new QVBoxLayout();
pLayout->addWidget(pWidget);
pLayout->addWidget(m_pButton);
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);
pLayout->setMargin(0);
// QML 与 Qt Widgets 通信
// QObject *pRoot = (QObject*)pView->rootObject();
QObject *pRoot = (QObject*)pWidget->rootObject();
if (pRoot != NULL) {
connect(pRoot, SIGNAL(qmlSignal()), this, SLOT(receiveFromQml()));
connect(m_pButton, SIGNAL(clicked(bool)), pRoot, SIGNAL(cSignal()));
}
}
void Widget::receiveFromQml()
{
static int i = 0;
i ++;
m_pButton->setText(QString("Call Slot %1 times").arg(i));
}