gpt4 book ai didi

c++ - 将信号从 QML 连接到 Qt 5.1

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:56 24 4
gpt4 key购买 nike

我想使用 qt 5.1 将 qml 信号连接到 qt 插槽。我不能在这个版本的 qt 中使用 DeclarativeView。我的 qml 元素是一个简单的矩形,在 onClicked 事件上启动信号。

Rectangle{
id:test
width: 200
height: 50
x: 10
y: 10
signal qmlSignal()
MouseArea {
hoverEnabled: false
anchors.fill: parent
onClicked: {

console.log("geklickt")
test.qmlSignal()


}
}

我有一个带有此 header 的 SignalslotlistView 类:

class SignalslotlistView: public QObject{
Q_OBJECT
public slots:
void cppSlot(const QString &msg);

};

和.cpp

void SignalslotlistView::cppSlot(const QString &msg) {

qDebug() << "Called the C++ slot with message:" << msg;}

然后在 MainWindow 类中我尝试设置连接:

view->setSource(QUrl::fromLocalFile("main.qml"));
QObject *object = (QObject *)view->rootObject();
QObject *rect = object->findChild<QObject*>("test");

SignalslotlistView myClass;
QObject::connect(rect, SIGNAL(qmlSignal()),
&myClass, SLOT(cppSlot()));

View 来自 QQuickView 类型。

但是什么也没有发生。谢谢。

最佳答案

Claudia,你的主要问题是 QML 信号类型与插槽类型不兼容。我已经使用 signal qmlSignal(string msg)main.cpp 修复了它:

QObject *rect = dynamic_cast<QObject*>(view->rootObject());
SignalslotlistView myClass;
QObject::connect(rect, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));

现在我可以在 C++ 端接收 QML 信号。

关于c++ - 将信号从 QML 连接到 Qt 5.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19593124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com