gpt4 book ai didi

c++ - 调用QML处理程序,但使用 “undefined” c++信号参数

转载 作者:行者123 更新时间:2023-12-02 10:22:23 24 4
gpt4 key购买 nike

我真的不知道出什么问题了。我知道我使用了正确的实例,因为我将该类设置为上下文,甚至更好地,调用了处理程序。我还将参数按值传递给c++信号。
有什么问题以及如何解决?

main.cpp

websocket_session sess;
rootContext->setContextProperty("websocketSession", &sess);
const QUrl url(QStringLiteral("qrc:/main.qml"));

main.qml
Connections {
target: websocketSession;
onLoginResponseProcessed: {
console.log(logged_in, role)
}
}

websocket_session.hpp
class websocket_session : public QObject
{
Q_OBJECT

QWebSocket websocket_;
char *buffer_;

QString url_;
bool autoConnect_;
bool rememberMe_;
QString username_;
QString password_;

public:
explicit websocket_session(QObject *parent = nullptr);
~websocket_session();

Q_INVOKABLE void send(const control_messages::Request &req);

Q_INVOKABLE void init(const QString &url, const QString &username, const QString &password);

void process_message(const std::string &data);

//Messages

Q_INVOKABLE void login(const QString &username, const QString &password);

private slots:
void onConnected();
void onDisconnected();
void onTextMessageReceived(const QString &message);
void onError();

signals:
void loginResponseProcessed(bool logged_in, RoleWrapper::Role role);
void error(const QString &error);
};

RoleWrapper.h
#ifndef ROLEWRAPPER_H
#define ROLEWRAPPER_H

#include <QObject>

namespace RoleWrapper
{
Q_NAMESPACE
enum Role {
USER,
ADMIN
};
Q_ENUM_NS(Role)
}

#endif // ROLEWRAPPER_H

我看到这个线程说它是一个错误: Qml - c++ signal parameters "undefined" in qml

main.qml打印:
qml: undefined undefined

如果问题确实是错误,那么我该如何解决呢?

更新
这是发出信号的代码:

websocket_session.cpp
case LOGIN: {
LoginResponse loginResponse;
payload.UnpackTo(&loginResponse);
auto logged_in = loginResponse.loggedin();
auto role = static_cast<RoleWrapper::Role>(loginResponse.role());

std::cout << "logged_in: " << logged_in << ", role: " << loginResponse.role() << role << Role_Name(loginResponse.role()) << std::endl;

emit loginResponseProcessed(logged_in, role);
break;
}

最佳答案

您必须注册类型:

qRegisterMetaType<RoleWrapper::Role>();

关于c++ - 调用QML处理程序,但使用 “undefined” c++信号参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537938/

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