jjzjj

c++ - 我怎样才能让 QThread 在不泄漏的情况下发出堆分配的 QObject?

我的情况是我有一个QWidget派生类MyWidget,它将创建一个QThread派生类(WorkerThread)以在其run()方法中执行一些不间断的阻塞工作。其结果是QObject派生类(DataClass)的堆分配实例,然后由MyWidget接收和处理。不过,MyWidget是一个临时小部件,可能会在WorkerThread仍在运行时因用户操作而被删除。下面是一些伪代码来说明这一点:#include#includeclassDataClass:publicQObject{Q_OBJECTpublic://containssomecomplexdata};classWorkerT

c++ - 如何安全地销毁 QThread?

我想在Qt5.3中正确地销毁一个QThread。到目前为止我有:MyClass::MyClass(QObject*parent):QObject(parent){mThread=newQThread(this);QObject::connect(mThread,SIGNAL(finished()),mThread,SLOT(deleteLater()));mWorker=newWorker();//inheritsfromQObjectmWorker->moveToThread(mThread);mThread->start();}MyClass::~MyClass(){mThread

c++ - Qt GUI 数学应用程序在计算时挂出 GUI

我的应用程序有一个简单的GUI=我必须为我的数学函数设置一些输入参数,然后单击“计算”按钮,函数启动。数学函数是用纯C语言编写的,因此没有对象,只有函数。看起来像这样:#include"mymath.h"classmyMath:publicQMainWindow{Q_OBJECT//...voidcompute();};voidmyMath::compute(){//getparametersfromguicall_C_fun();//saveresultstoGUI}此代码的主要问题是,当我单击“计算”时(它会进行大量计算,最多需要5分钟左右)它会挂起我的GUI,所以我不能做任何其他

c++ - 在 Qt 中,当事件循环线程拥有的 QObject 上的槽正在执行时,QThread 的事件循环是否会阻塞?

我想确认我认为Qt中工作线程的一个简单方面。假设我创建了一个QThread,它的目的是管理其对应线程中的耗时工作。此外,假设我通过调用QThread上的start()允许该线程的相应事件循环运行。工作本身由QThread的started()信号发出信号的成员函数(槽)执行。即(从https://stackoverflow.com/a/11039216/368896复制):classTask:publicQObject{Q_OBJECTpublic:Task();~Task();publicslots:voiddoWork(){//verytime-consumingcodeisexec

c++ - 当应用程序在没有适当的 wait() 调用的情况下关闭时 QThread 会发生什么?

在下面的示例中(在QtGUI应用程序中)启动了一个新线程(带有一个事件循环,我希望在其中完成一些工作):voiddoWork(){QThread*workerThread=newQThread();Worker*worker=newWorker();worker->moveToThread(workerThread);connect(workerThread,SIGNAL(started()),worker,SLOT(startWork()));connect(worker,SIGNAL(finished()),workerThread,SLOT(quit()));connect(wo

c++ - 如何在单独的线程上设置 QSerialPort?

按照官方文档,我正在尝试这样做:MainWindow::MainWindow(QWidget*parent):QMainWindow(parent){QThread*thread=newQThread;Worker*worker=newWorker();worker->moveToThread(thread);//initconnectionsthread->start();}worker构造函数:Worker::Worker(QObject*parent):QObject(parent){serial=newQSerialPort(this);//passingtheparent,w

c++ - 在 QThread 的上下文中调用方法

在我的应用程序中有主线程和工作线程(QThread)。我想从主线程调用我的工作线程的一个方法并让它在线程的上下文中运行。我试过使用QMetaObject::invokeMethod并给它QueuedConnection选项,但它不起作用。我还尝试从主线程(连接到工作线程的插槽)发出信号,但也失败了。这是我尝试过的大致片段:classWorker:publicQThread{Q_OBJECTpublic:Worker(){}voidrun(){qDebug()使用QMetaObject方式:intmain(intargc,char*argv[]){QCoreApplicationa(ar

c++ - Qt中正确的线程方式

我有耗时的图像加载(图像很大),并且在加载时对其进行了一些操作。我不想阻止应用程序GUI。我的想法是在另一个线程中加载图像,发出图像已加载的信号,然后使用该图像重绘View。我的方法:voidWindow::loadImage(){ImageLoader*loaderThread=newImageLoader();connect(loaderThread,SIGNAL(imageLoaded()),this,SLOT(imageLoadingFinished());loaderThread->loadImage(m_image,m_imagesContainer,m_path);}vo

c++ - 如何处理 QThread 上的事件?

通常,如果我在处理密集型函数中,我可以调用QCoreApplication::processEvents()或QEventLoop::processEvents()以确保我的处理不会阻止其他信号和插槽。但是,如果我创建一个新的QThread并将一个worker移动到该线程,那么我就没有QCoreApplication或QEventLoop调用processEvents()。根据我的研究,似乎我应该能够在我创建的新QThread上安装一个QEventLoop,然后我可以调用processEvents()在那个QEventLoop上。但是,我不知道该怎么做。我认为它可能看起来像这样:QTh

c++ - 在 OpenCV 中加快将图像写入硬盘的速度

我正在使用一个50fps的相机(在Ubuntu环境和Qt框架中)并且每20毫秒我得到一个帧来处理。我写了一段代码来从相机中读取图像,然后将它们存储在硬盘中。while(3.14){cv::MatCamera_Image=Capture_Image();doubleT1=(double)cv::getTickCount();cv::imwrite(STORE_ADDRESS,Camera_Image);T1=(((double)cv::getTickCount()-T1)*1000)/cv::getTickFrequency();print(T1);}当我看到输出时,对于2048*108