++ У меня есть следующий код:QML с сигналом и слоты
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 - это идентификатор прямоугольника. Я просто забыл написать там. – shtdown
Попробуйте переместить определение BlockSlot в файл .cpp, потому что Qt будет генерировать MOC-файл и связывать его с файлом cpp. – Dmitry