gpt4 book ai didi

c++ - QSocketNotifier : Can only be used with threads started with QThread error

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:34 40 4
gpt4 key购买 nike

我正在尝试使用 QLocalServer 作为 ipc 解决方案。 qt的版本是4.6

这是我的 main.cpp:

int main(int argc, const char*argv[]) {  
QServer test();

while (true) {
}
}

这是我的 QServer 类:

class QServer : public QObject
{
Q_OBJECT

public :
QServer ();

virtual ~QServer();

private :
QLocalServer* m_server;
QLocalSocket* m_connection;


private slots:
void socket_new_connection();
};

QServer::QServer()
{
m_server = new QLocalServer(this);
if (!m_server->listen("DLSERVER")) {
qDebug() << "Testing";
qDebug() << "Not able to start the server";
qDebug() << m_server->errorString();
qDebug() << "Server is " << m_server->isListening();
}

connect(m_server, SIGNAL(newConnection()),
this, SLOT(socket_new_connection()));
}

void
QServer::socket_new_connection()
{
m_connection = m_server->nextPendingConnection();

connect(clientConnection, SIGNAL(readyRead()),
this, SLOT(newData(clientConnection)));
}

这一切都可以编译,但是在运行时,当我尝试连接 newConnection() 时,我得到一个 QSocketNotifier: Can only be used with threads started with QThread 错误。

我已经尝试将整个事情包装在 QThread 中,但我仍然遇到同样的错误。

任何人都可以解释我做错了什么或者为什么甚至涉及一个线程?

最佳答案

错误信息具有误导性。您需要 Qt 事件循环才能使用 QSocketNotifier。在您的应用程序中执行此操作的适当方法是创建一个 QApplication(或者如果您不想要任何图形内容,则创建一个 QCoreApplication)。你的主要应该是这样的:

int main(int argc, char** argv)
{
QCoreApplication app(argc, argv);
QServer test();
app.exec();
return 0;
}

QCoreApplication::exec() 启动事件循环(替换您的 while (true) {} 循环)。

关于c++ - QSocketNotifier : Can only be used with threads started with QThread error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888061/

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