QVector with Qthreads
QVector with Qthreads
您好,我正在尝试构建QThread
对象的QVector
,但是当我尝试构建时,'QObject::QObject' : cannot access private member declared in class 'QObject'
出现此错误。有人可以告诉我为什么我会收到这个错误以及如何克服它或指出我答案的方向。谢谢你的时间。
主要。.CPP
#include <QCoreApplication>
#include "thread.h"
#include <QDebug>
#include <QThread>
main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
unsigned long long startingNumberAnswer = 0;
unsigned long long totalIterationsAnswer = 0;
int numberOfThreads = 10;
QVector<Thread> threads(numberOfThreads);
for(int l = 0; l < threads.size(); l++ ){
threads[l].setPriority(QThread::TimeCriticalPriority);
}
for(int i = 1; i< 2000000; i+=numberOfThreads){
qDebug() << "Longest iteration Number = " << startingNumberAnswer;
qDebug() << "Number of iterations for " << startingNumberAnswer << " is " << totalIterationsAnswer;
qDebug() << "Running # " << i;
system("CLS");
}
qDebug() << "Longest iteration Number = " << startingNumberAnswer;
qDebug() << "Number of iterations for " << startingNumberAnswer << " is " << totalIterationsAnswer;
return a.exec();
}
线。H
#ifndef THREAD_H
#define THREAD_H
#include <QObject>
#include <QThread>
class Thread : public QThread
{
Q_OBJECT
public:
explicit Thread();
unsigned long long getloops();
unsigned long long getnumber();
signals:
public slots:
void run(unsigned long long value);
private:
unsigned long long largestNumber;
unsigned long long loops;
unsigned long long number;
};
#endif // THREAD_H
线。.CPP
#include "thread.h"
Thread::Thread()
{
}
void Thread::run(unsigned long long value)
{
unsigned long long n = value;
unsigned long long counter = 0;
while ( n > 1){
if(n%2 == 0){
n = n/2;
} else {
n = (3*n) + 1;
}
counter++;
}
loops = counter;
number = value;
}
unsigned long long Thread::getloops(){
return loops;
}
unsigned long long Thread::getnumber(){
return number;
}
简单地说,QObject 对象不可复制或分配 - 检查官方文档:
没有复制构造函数或赋值运算符
QObject既没有复制构造函数,也没有赋值运算符。 这是设计使然。实际上,它们是声明的,但是在私人中 部分包含宏 Q_DISABLE_COPY()。事实上,所有Qt类 派生自 QObject(直接或间接) 使用此宏声明 它们的复制构造函数和赋值运算符是私有的。这 推理可以在Qt上关于身份与价值的讨论中找到 "对象模型"页。
主要后果是你应该使用指向 QObject 的指针(或 你的 QObject 子类),否则你可能会想在其中使用 您的 QObject 子类作为值。例如,没有副本 构造函数,您不能使用 QObject 的子类作为要的值 存储在其中一个容器类中。必须存储指针。
因此,您需要使用 QVector<Thread*>
来存储线程(不要忘记在使用它们之前创建对象)。
在QVector的文档中也指出:
QVector 的值类型必须是可分配的数据类型。这涵盖了大多数常用的数据类型,但编译器不会允许您将 QWidget 存储为值;相反,存储一个 QWidget *。一些功能有额外的要求;例如,indexOf() 和 lastIndexOf() 期望值类型支持 operator==()。这些要求是按功能记录的。
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- DLL Made with CMake 使程序崩溃
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- specialized std::default_delete with QQmlComponent
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- Inference pytorch C++ with alexnet and cv::imread image
- QImage with QThreads
- QVector with Qthreads