几乎要搜索几个小时我对多线程概念感到更加困惑,我需要帮助理解和实现它。在搜索之后,我进入了以下实现
的main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <mythread1.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
mythread abc;
abc.start();
abc.wait();
return a.exec();
}
在上面的代码mythread.h
是我为多线程创建的头文件,下面是mythread1.h的代码
mythread1.h
#ifndef MYTHREAD1_H
#define MYTHREAD1_H
#include <QtGui>
#include <windows.h>
class mythread : public QThread
{
public:
void run();
};
void mythread::run()
{
}
#endif // MYTHREAD_H
现在我的问题是
QFile::copy("pathtomytargetfile","targetpath");
但是没有用:O并且它没有复制那个文件但是当我用主线程中的Push按钮连接它然后它得到了成功复制了,为什么会这样?谢谢
答案 0 :(得分:1)
首先:运行方法应该受到保护!
其次,你的意思是“我只定义了一个函数run()”。你定义了方法,而不是功能。 abc.start()
表示mythread的abc实例将启动并使用它的入口点方法void run()
。您不能使用相同的签名声明多个方法。如果您想知道它是如何调用您的run()
而不是QThread::run()
那么您需要阅读有关C ++中虚拟方法的内容
广告。 3:我们如何判断为什么你的文件没有复制?检查QFile为您提供的错误。改变你的代码:
QFile f("pathtomytargetfile");
if( ! f.copy("targetpath") )
{
qDebug() << f.errorString();
}
它将为您提供一些有用的信息
答案 1 :(得分:1)
我的回答可能会让您更加困惑,但我认为以下链接值得一读:
QThread
课程的工程师的文章。他为建议继承QThread
是可行的方法而道歉。QThread
继承也会起作用,它在设计上并不那么好。)HTH