QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread怎么解决
时间: 2024-02-12 22:30:40 浏览: 364
这个错误是由于在另一个线程中尝试启用或禁用 QSocketNotifier 导致的。在 Qt 中,QSocketNotifier 只能在创建它的线程中启用或禁用。
为了解决这个问题,你需要确保只在创建 QSocketNotifier 的线程中启用或禁用它。如果你需要在另一个线程中启用或禁用它,你可以使用信号和槽来通信。例如,当需要启用或禁用 QSocketNotifier 时,可以发出一个信号,然后在创建 QSocketNotifier 的线程中连接到这个信号,并在相应的槽中启用或禁用 QSocketNotifier。
示例代码:
```cpp
// 在创建 QSocketNotifier 的线程中定义信号和槽
class MySocket : public QObject {
Q_OBJECT
signals:
void enableSocketNotifier();
void disableSocketNotifier();
public slots:
void onEnableSocketNotifier() {
socketNotifier->setEnabled(true);
}
void onDisableSocketNotifier() {
socketNotifier->setEnabled(false);
}
private:
QSocketNotifier* socketNotifier;
};
// 在另一个线程中发出信号
emit enableSocketNotifier();
// 在创建 QSocketNotifier 的线程中连接信号和槽
MySocket mySocket;
connect(&mySocket, &MySocket::enableSocketNotifier, &mySocket, &MySocket::onEnableSocketNotifier);
connect(&mySocket, &MySocket::disableSocketNotifier, &mySocket, &MySocket::onDisableSocketNotifier);
```