如何在 qt 中使用线程
How to use threads in qt
我是QT的新手。我需要出于某种目的使用线程。我搜索了很多关于QT线程的信息,但所有的文章和视频都使用相同的示例。他们使用对话框并放置一个带有 2 个按钮的标签,以在标签上打印一些数据。我想在 MainWindow 中使用线程。我的应用程序包括读取串行数据,然后在标签上显示相关信息。该信息包含一个字符串和一个音频文件。字符串和音频文件需要同时播放。我有一个连接的信号用于串行读取,如下所示:
connect(&Serial, SIGNAL(readyRead()), this, SLOT(SerialRead()));
QString MainWindow::SerialRead()
{
word Words; //
QString serialData = Serial.readAll(); //Reading Serial Data
//Now here I want to start the two threads
//Thread 1 to display string
//Thread 2 to play audio
return 0;
}
我怎样才能完成上述任务。任何人都可以向我推荐一些有用的链接或文章。谢谢
虽然我强烈建议您使用std::thread
而不是QThread,但这是您的决定。但是,在QThread的Qt文档页面上,有一个非常好的例子,完全符合您的需求。这是:
class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork(const QString ¶meter) {
QString result;
/* ... here is the expensive or blocking operation ... */
emit resultReady(result);
}
signals:
void resultReady(const QString &result);
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller() {
Worker *worker = new Worker;
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &Controller::operate, worker, &Worker::doWork);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const QString &);
signals:
void operate(const QString &);
};
基本上,在这个例子中,Controller
是你的主窗口,Controller
的构造函数是你的MainWindow::SerialRead()
。但是,如果要这样做,请小心内存和线程管理,因为该Controller
是在存在时销毁事物,而不是在线程完成时销毁。
因此,您要么按原样使用该控制器(只需在MainWindow::SerialRead()
中实例化它(,要么将其更改为将其部分包含在MainWindow
中。
您可能不需要使用 2 个线程来执行此类操作。 只需发出一个连接到setText(const QString&(的信号,另一个信号连接到插槽以播放音频。 串行数据的大小是多少?
相关文章:
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 将对象传递给多线程对象 Qt
- Qt 在另一个线程中无限循环
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt::D irectConnection在多线程环境中使用时如何工作?
- 如何在Qt中合并/追加/添加两个用于线程的模型?
- 在 C++ 的 Qt 中使用 WINAPI 线程时出现问题
- Qt - 如何从线程创建 QFuture
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 谷歌语音识别不起作用,因为冲突线程Qt C++
- 信号/插槽多线程 Qt
- 无法在另一个线程-QT中向对象发送已发布的事件
- 无法为处于不同线程(Qt)中的父级创建子级
- 如何同时运行两个线程?Qt C++
- 多线程Qt应用程序在退出时不会停止
- 在单独的线程 Qt 中渲染屏幕外小部件
- 我如何在另一个线程Qt显示MessageBox