通过槽函数connect传参
您遇到的错误是因为您将一个普通变量 g_lLoginHandle
误用为信号。在 Qt 中,信号必须是定义在类中并使用 signals:
关键字声明的函数。
更正方法:
-
定义一个信号: 在您的
MainWindow
类中,添加一个信号来发射g_lLoginHandle
的值:cppclass MainWindow : public QMainWindow { Q_OBJECT signals: void loginHandleChanged(LLONG loginHandle); // 信号声明 // ... };
-
发射信号: 当您需要将
g_lLoginHandle
的值传递给TRD_SmartTHM
线程时,发射loginHandleChanged
信号:cppvoid MainWindow::someFunction() { // ... emit loginHandleChanged(g_lLoginHandle); // ... }
-
连接信号和槽: 现在可以正确连接信号和槽:
cppconnect(this, &MainWindow::loginHandleChanged, TRDSTHM, &TRD_SmartTHM::recvHandle);
完整的示例:
cpp
#include <QObject>
#include <QThread>
class TRD_SmartTHM : public QThread {
Q_OBJECT
public slots:
void recvHandle(LLONG handle) {
// ... 处理接收到的 handle ...
}
};
class MainWindow : public QMainWindow {
Q_OBJECT
signals:
void loginHandleChanged(LLONG loginHandle);
public:
// ...
MainWindow() {
// ...
// 创建 TRD_SmartTHM 线程
TRD_SmartTHM* thread = new TRD_SmartTHM();
thread->start();
// 连接信号和槽
connect(this, &MainWindow::loginHandleChanged, thread, &TRD_SmartTHM::recvHandle);
}
// ...
};
关键点:
- 确保
TRDSTHM
是TRD_SmartTHM
类的实例,并且TRD_SmartTHM
中的recvHandle
槽函数定义正确,接收LLONG
参数。 - Qt 的信号-槽机制是安全可靠地在不同对象和线程之间进行通信的强大方式。
通过这些修改,您的代码应该可以正常工作,您应该能够将 g_lLoginHandle
的值传递给 TRD_SmartTHM
线程。
如果您还有其他问题,请随时问我。