我试图找出如何从 QML 代码获取信号并将其连接到位于 C++ 类中的插槽。
我从这个 answer 中获取代码和屏幕上显示的控件,但我收不到信号。
相关代码如下:
测试.qml:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
Switch{
id: swt;
checked:true;
onCheckedChanged: swt.qmlSignal();
}
菜单.cpp:
Menu::Menu(QWidget *parent) :
QWidget(parent),
ui(new Ui::Menu)
{
ui->setupUi(this);
QQuickView *view = new QQuickView();
QWidget *container = QWidget::createWindowContainer(view, this);
container->setMaximumSize(50, 20);
QObject::connect(container, SIGNAL(qmlSignal()),
this, SLOT(receiveFromQml()));
view->setSource(QUrl("qrc:/test.qml"));
ui->verticalLayout->addWidget(container);
}
void Menu::receiveFromQml()
{
qDebug() << "Called the C++ slot with message:" ;
}
我看过示例 here但我无法让它工作。
这是我得到的错误:
qrc:/test.qml:10: TypeError: Property 'qmlSignal' of object Switch_QMLTYPE_4(0x291ac70) is not a function
最佳答案
简单,标记为slot
似乎你有一个 C++ 对象,你需要调用一个插槽,所以将函数标记为 插槽
,然后它会自动公开。在 C++ 中不需要奇怪的 connect()。
// Seems Switch is a QML Item
Switch{
id: swt;
checked:true;
onCheckedChanged: myCppObj.slot(); // calls the object's slot
}
还有其他方法可以做到这一点,但这似乎涵盖了您的情况。如果没有,请详细说明,我们会对其进行完善。
关于c++ - 从qml获取信号到Qt中的c++类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728098/