#include "widget.h"
#include "ui_widget.h"
#include<QQuickItem>
Widget* Widget::p_Instance=NULL;
QMutex Widget::m_mutex;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget *Widget::GetInstance()
{
if(Q_NULLPTR==p_Instance)
{
m_mutex.lock();
if(Q_NULLPTR==p_Instance)
{
p_Instance=new Widget();
m_mutex.unlock();
}
}
return p_Instance;
}
Widget::~Widget()
{
delete ui;
if(Q_NULLPTR!=p_Instance)
{
delete p_Instance;
}
}
void Widget::on_pushButton_clicked()
{
QUrl source("qrc:/qmlTest.qml");
ui->quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView );
ui->quickWidget->setSource(source);
ui->quickWidget->setClearColor(QColor(Qt::transparent));
QQuickItem *item=ui->quickWidget->rootObject();
connect(item,SIGNAL(sendToWidget(QString)),this,SLOT(qmlToWidgetSlot(QString)));
// connect(this,SIGNAL(sendSignalToXml(QString)),item,SIGNAL(receFromWidget(QString))); //1..................
}
void Widget::on_pushButton_2_clicked()
{
emit sendSignalToXml(ui->lineEdit->text()); //信号 //1.................. //2.................. 两种方法都需要发送信号
//C++调用QML方法
// QQuickItem *item=ui->quickWidget->rootObject(); //3..................
// if(item)
// QMetaObject::invokeMethod(item,"load",Q_ARG(QVariant,ui->lineEdit->text()));
}
void Widget::qmlToWidgetSlot(const QString &str)
{
ui->lineEdit->setText(str);
}