• Qt如何读取.txt文件(将内容读到文本编辑框)


    一、单独作为一个简单的项目(可以占用QMainWindow)

    在这里插入图片描述

    //LogWidget.h (mainwindow.h)

    #ifndef LogWidget_H
    #define LogWidget_H
    
    #include <QMainWindow>
    #include <QDebug>
    #include <QFile>
    
    namespace Ui {
    class LogWidget;
    }
    
    class LogWidget : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit LogWidget(QWidget *parent = 0);
        ~LogWidget();
    
    private slots:         //槽函数
        void on_pushButton_clicked();
    
    private:
        Ui::LogWidget *ui;
    };
    
    #endif // LogWidget_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    //LogWidget.cpp (mainwindow.cpp)

    #include "LogWidget.h"
    #include "ui_LogWidget.h"     //uic工具自动由xx.ui生成ui_xxx.h
    
    //构造函数
    LogWidget::LogWidget(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::LogWidget)
    {
        ui->setupUi(this);
    }
    
    //析构函数
    LogWidget::~LogWidget()
    {
        delete ui;
    }
    
    void LogWidget::on_pushButton_clicked()
    {
        QString displayString;
        QFile file("C:\\Users\\zwc11\\Yeecoh\\log.txt");            //目标文件路径
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            qDebug()<<"Can't open the file!";
        }
        while(!file.atEnd())
        {
            QByteArray line = file.readLine();
            QString str(line);
            qDebug()<< str;
            displayString.append(str);
        }
           ui->textEdit->clear();
           ui->textEdit->setPlainText(displayString);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    //LogWidget.ui (xml格式) (mainwindow.ui)

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>LogWidget</class>
     <widget class="QMainWindow" name="LogWidget">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>1179</width>
        <height>640</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>LogWidget</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <widget class="QTextEdit" name="textEdit">
        <property name="geometry">
         <rect>
          <x>10</x>
          <y>90</y>
          <width>1151</width>
          <height>491</height>
         </rect>
        </property>
       </widget>
       <widget class="QPushButton" name="pushButton">
        <property name="geometry">
         <rect>
          <x>390</x>
          <y>20</y>
          <width>301</width>
          <height>51</height>
         </rect>
        </property>
        <property name="text">
         <string>读取日志</string>
        </property>
       </widget>
      </widget>
      <widget class="QMenuBar" name="menuBar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>1179</width>
         <height>22</height>
        </rect>
       </property>
      </widget>
      <widget class="QToolBar" name="mainToolBar">
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <widget class="QStatusBar" name="statusBar"/>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections/>
    </ui>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    // fileRead.pro

    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = fileRead            //.pro文件名
    TEMPLATE = app
    
    DEFINES += QT_DEPRECATED_WARNINGS
    
    SOURCES += main.cpp\
            LogWidget.cpp
    
    HEADERS  += LogWidget.h
    
    FORMS    += LogWidget.ui
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    //main.cpp

    #include "LogWidget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        LogWidget w;
        w.show();
    
        return a.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11



    二、大项目中作为菜单栏的一个功能(只能用QDialog)

    //LogWidget.h

    #ifndef LogWidget_H
    #define LogWidget_H
    
    #include <QDialog>
    #include <QDebug>
    #include <QFile>
    
    namespace Ui {
    class LogWidget;
    }
    
    class LogWidget : public QDialog    //区别只有这里换成继承自QDialog类
    {
        Q_OBJECT
    
    public:
        explicit LogWidget(QWidget *parent = 0);
        ~LogWidget();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::LogWidget *ui;
    };
    
    #endif // LogWidget_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    //LogWidget.cpp

    #include "LogWidget.h"
    #include "ui_LogWidget.h"
    
    LogWidget::LogWidget(QWidget *parent) :
        QDialog(parent),                     //区别就是这里换成QDialog
        ui(new Ui::LogWidget)
    {
        ui->setupUi(this);
    }
    
    LogWidget::~LogWidget()
    {
        delete ui;
    }
    
    void LogWidget::on_pushButton_clicked()
    {
        QString displayString;
        QFile file("C:\\Users\\zwc11\\Yeecoh\\log.txt");
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            //qDebug()<<"Can't open the file!";   //如果qDebug()内容一边写入log.txt,一边读取到文件末尾,则会死循环不停地写入
        }                                        //日志文件会在几秒里扩充到上百MB
        while(!file.atEnd())
        {
            QByteArray line = file.readLine();
            QString str(line);
            //qDebug()<< str;                
            displayString.append(str);
        }
           ui->textEdit->clear();
           ui->textEdit->setPlainText(displayString);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    //LogWidget.ui:与上文完全相同

    //YeecohWindow.cpp (mainwindow.cpp)

    void YeecohWindow::log()
    {
        QString fileName = QFileDialog::getOpenFileName(
                    this,
                    tr("打开详细日志"),                   //打开文件窗口名称
                    "C:\\Users\\zwc11\\Yeecoh",         //默认搜索路径
                    tr("txt(*.txt);;All files(*.*)"));  //过滤器
    
        if (fileName.isEmpty()) {
            QMessageBox::warning(this, "Warning!", "Failed to open the log.txt !     ");
        }
        else{  //重点设计一下这里
            LogWidget win;
            win.exec();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    (附源码)springboot流浪动物救助系统 毕业设计 180920
    从零开始搭建仿抖音短视频APP-开发评论业务模块(1)
    基于web的招标投标系统的设计与实现-计算机毕业设计源码+LW文档
    【git】新电脑(Windows)中Git配置SSH公钥
    物联网仪表ADW300接入ONENET平台介绍
    【CANoe】文件处理_hex文件读取解析
    Roson的Qt之旅#107 QML ListView
    PyTorch学习笔记-完整训练模型的方法
    windows/linux命令行操作快捷方式
    Kafka 的应用场景
  • 原文地址:https://blog.csdn.net/Edward1027/article/details/125463999