【发布时间】:2026-02-12 07:05:02
【问题描述】:
我试图弄清楚如何从 QML 代码中获取信号并将其连接到位于 C++ 类中的插槽。
我从这个answer 和屏幕上显示的控件获取代码,但我无法获得信号。
以下是相关代码:
test.qml:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
Switch{
id: swt;
checked:true;
onCheckedChanged: swt.qmlSignal();
}
menu.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: 对象 Switch_QMLTYPE_4(0x291ac70) 的属性 'qmlSignal' 不是函数
【问题讨论】:
-
在 qmlSignal 之后删除 () - 您正在尝试分配属性,而不是调用函数
-
@Hcorg 我删除了它,现在我没有收到错误但仍然没有触发插槽。连接语句正确吗?
-
这能回答你的问题吗? How to bind C++ property to QML property?