C++ 如何访问/修改QObject,如何在Qt5和库之间进行互操作
我创建了一个命令行程序。现在我想在上面添加一个Qt5 GUI包装器。(我对QT5 C++编程非常新)以前程序简单地显示命令行输出,现在我想它显示QT5窗口上的输出。(我已将CLI程序的核心代码转换为库) 我的Qt5程序(继承QMainWindow的类)在新的STD线程中启动我的库。(使用STD线程正确吗?)在执行我的库时(可能需要几个小时),它会在回调函数中返回输出。在这些回调函数中,我希望在QTextEdit实例中显示这些输出;所以我的Qt5总是崩溃(控制台总是说“分段错误(内核转储)”),因为这一定是修改QObject的错误方式C++ 如何访问/修改QObject,如何在Qt5和库之间进行互操作,c++,qt5,C++,Qt5,我创建了一个命令行程序。现在我想在上面添加一个Qt5 GUI包装器。(我对QT5 C++编程非常新)以前程序简单地显示命令行输出,现在我想它显示QT5窗口上的输出。(我已将CLI程序的核心代码转换为库) 我的Qt5程序(继承QMainWindow的类)在新的STD线程中启动我的库。(使用STD线程正确吗?)在执行我的库时(可能需要几个小时),它会在回调函数中返回输出。在这些回调函数中,我希望在QTextEdit实例中显示这些输出;所以我的Qt5总是崩溃(控制台总是说“分段错误(内核转储)”),因
我该怎么做?在线程函数中访问/修改QObject实例的正确方法是什么?(我想在另一个线程中运行我的库(在多线程下),因为我不想冻结我的Qt5窗口)我需要锁定互斥锁吗?也许我应该使用队列结构,收集队列的任何输出,并读取队列以更新QMainWindow中的QTextEdit实例(但现在我需要一个循环函数)?我希望,一位善良的专家能给我建议。我自己已经找到了解决办法
WorkerThread *workerThread = new WorkerThread(this);
connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
-调用:
workerThread->start();
emit resultReady(result);
在我的例子中,回调函数使用thread变量调用这个函数
emit workerThread->resultReady(result);
因此,无论何时调用“ResulterDay”,都会调用“HandlerResults”函数。在我的例子中,“handleResults”函数是在继承“myMainWindow”类的QMainWindow中定义的
无论如何,谢谢你。XD在新线程中启动库意味着什么?Qt UI应该由单个线程(运行UI本身的同一线程)修改。您应该使用信号和插槽在不同线程之间进行通信。信号和插槽?AlrightMy Qt5程序启动一个新的STD线程来运行我的代码(库)。如果我在同一个线程中运行它(即,没有多线程),那么我的Qt5程序将在等待library.signals和Slot进程完成时冻结。。。那么,在运行的STD线程中仍然可以访问/修改QObject实例吗?我必须锁定互斥锁吗?
void QMainWindow::handleResults(const QString &s){
// Finally I can access/modify the QTextLine instances XDDD
}