Qt Creator 多线程读取文件到程序显示
利用QT Creator多任务读取一个文档到程序里
为了防止直接读取文件里的内容太大而发生卡顿,于是多线程读取将更高效的解决这个问题。
效果图如下:
其中pro文件无需改动,默认就好,头文件h里面的内容为
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MyObj;
class MyObj : public QObject
{
Q_OBJECT
public:
MyObj(); //新的线程
signals:
void toLine(QString line);
private slots:
void doWork();
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void appendText(QString); //定义一个槽
private:
Ui::MainWindow *ui;
QThread *t;
MyObj *obj;
};
#endif // MAINWINDOW_H
而MAIN主文件的内容为了防止中文乱码做了如下修改:
#include "mainwindow.h"
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置中文字体 防止乱码
a.setFont(QFont("Microsoft Yahei", 9));
//设置中文编码
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("GBK");
#else
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
#endif
MainWindow w;
w.show();
return a.exec();
}
接下来重点来了,源文件CPP里为
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
t = new QThread(); //QThread
obj = new MyObj();
obj->moveToThread(t);
qDebug()<<"main thread:"<
1