0
我有以下代码:QML C++信号&槽
的main.cpp
QDeclarativeView *qmlView = new QDeclarativeView();
qmlView->setSource(QUrl("qrc:/nav.qml"));
ui->nav->addWidget(qmlView);
Blockschaltbild bild;
QObject *value = qmlView->rootObject();
QObject::connect(value, SIGNAL(testSig()), &bild, SLOT(BlockSlot()));
的信号和槽正确连接。 (的QObject ::连接返回 “真”)
QML文件:
Rectangle {
id: rectangle1
....
signal testSig()
MouseArea{
id: mousearea
anchors.fill: parent
onEntered: parent.color = onHoverColor
onExited: parent.color = parent.buttonColor
onClicked: {
rectangle1.testSig()
console.log("Button clicked")
}
}
}
这是插槽位于:
Blockschaltbild.h
class Blockschaltbild: public QObject
{
Q_OBJECT
public slots:
void BlockSlot(){
cout << "Slot is working" << endl;
}
public:
....
}
如果我点击鼠标区域,控制台显示“按钮点击”,但不显示“插槽正在工作”。 我使用Qt 4.8.4和QtQuick 1.1。我的错误在哪里?
这是你写错了'restSig()'而不是'testSig()'的错字吗?矩形是否有'id:rectangle1'? – leemes
是的,这是一个错字。我只是纠正它。 rectangle1是矩形的id。我忘了写在那里。 – shtdown
尝试将BlockSlot定义移动到.cpp文件,因为Qt将生成MOC文件并将其与cpp文件链接。 – Dmitry