0
I했습니다 다음 코드를 가지고 :QML의 C++ 신호 슬롯
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()));
신호 슬롯이 제대로 연결
MAIN.CPP.
QML 파일을 (QObject를이 : "TRUE"을 리턴를 연결) :
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:
....
}
을 마우스 영역을 클릭하면 "클릭 한 버튼"이 표시되지만 "슬롯이 작동 중"은 아닙니다. QtQuick 1.1과 함께 Qt 4.8.4를 사용합니다. 내 실수는 어디 갔지?
'testSig()'대신'restSig()'를 쓴 오자입니까? 그리고 사각형은'id : rectangle1'을 가지고 있습니까? – leemes
예, 오타였습니다. 방금 고쳤습니다. rectangle1은 직사각형의 ID입니다. 나는 거기에 그것을 쓰는 것을 잊어 버렸다. – shtdown
Qt가 MOC 파일을 생성하고 cpp 파일과 링크하기 때문에 BlockSlot 정의를 .cpp 파일로 이동하십시오. – Dmitry