【发布时间】:2016-07-17 16:47:13
【问题描述】:
我使用的是 QT 5.7。
我的main.qml 文件的根元素是'ApplicationWindow'(顺便说一句,即使它们有效,它也总是将可见、宽度和高度下划线作为无效属性。我想知道它的修复方法或正确的方法,因为我可以' t 在设计器中编辑它)。
这是它的代码:
ApplicationWindow {
visible: true
width: 640
height: 480
Rectangle{
signal mSend()
anchors.fill: parent
Button{
id: bSend
onClicked: {
parent.mSend()
}
}
}
}
现在我正在尝试以这种方式将mSend 信号绑定到 CPP 插槽:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QDebug>
#include <QObject>
#include <QQuickView>
#include <QQuickItem>
class Chat: public QObject{
Q_OBJECT
public Q_SLOTS:
void sendMessage(){
qDebug() << "CPP SLOT sendMessage called";
}
};
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
QQuickView view(&engine, Q_NULLPTR);
QObject *item = view.rootObject();
Chat chat;
if(item){
qDebug() << "Item found";
QObject::connect(item, SIGNAL(mSend()), &chat, SLOT(sendMessage()));
}else{
qDebug() << "item is null";
}
return app.exec();
}
#include "main.moc"
但结果是Item is null。我一直在关注这个guide,但我无法在 QML 中修改 QMLApplicationEngine 和 ApplicationWindow。
TIA
注意:我正在使用Q_SLOTS,因为我也在使用 Boost 来合并 Socket IO 库。
【问题讨论】:
标签: c++ qt qml signals-slots