#《Qt学习之路》学习之路(2)#MainWindow简介->简单文本编辑器实现

2018.4.26

网上大概翻了一些教程,对比一下发现Qt学习之路2的学习推进方式更适合我一些,为了防止自己遗忘,在这里分享一些学习的要点,我记的知识要点可能偏个人一些,大概率思维会比较跳跃,建议参考博主原文和查看官方API理解。


MainWindow的布局(后面代码会用到):



QAction动作:

Qt 使用QAction类作为动作,该类抽象出了窗口的一个动作,把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。


简单文本编辑器实现:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void open();
    void save();

    QAction *openAction;
    QAction *saveAction;
    QTextEdit *textEdit;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include <QAction>
#include <QMenuBar>
#include <QMessageBox>
#include <QStatusBar>
#include <QToolBar>
#include <QTextEdit>
#include <QFileDialog>
#include <QTextStream>

#include "mainwindow.h"
#include "ui_mainwindow.h"
/*
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
*/
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //文本使用tr()函数,这是一个用于 Qt 国际化的函数,tr()函数里面一般会是英文文本
    setWindowTitle(tr("Main Window"));

    //文件打开动作
    //QAction第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。
    openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this);
    //使用QT内置QKeySequence类来添加键盘快捷键
    openAction -> setShortcuts(QKeySequence::Open);
    //鼠标滑过时会在主窗口下方的状态栏显示相应的提示
    openAction -> setStatusTip(tr("Open an existing file"));


    //文件保存动作
    saveAction = new QAction(QIcon(":/images/doc-save"), tr("&Save..."), this);
    saveAction->setShortcuts(QKeySequence::Save);
    saveAction->setStatusTip(tr("Save a new file"));


    connect(openAction, &QAction::triggered, this, &MainWindow::open);
    connect(saveAction, &QAction::triggered, this, &MainWindow::save);

    //创建并返回菜单栏
    QMenu *file = menuBar() -> addMenu(tr("&File"));
    file -> addAction(openAction);
    file -> addAction(saveAction);
    //创建并返回工具栏
    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar -> addAction(openAction);
    toolBar -> addAction(saveAction);
    //创建输入栏
    textEdit = new QTextEdit(this);
    //可以将一个组件作为窗口的中心组件,放在窗口中央显示区。
    setCentralWidget(textEdit);

    //创建并返回状态栏
    statusBar();
}

void MainWindow::open(){
    //QFileDialog文件对话框
    //QFileDialog::getOpenFileName()返回值是选择的文件路径,参数顺序:父窗口(模态),对话框标题,默认打开目录(.表示当前目录),过滤器
    QString path = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                ".", tr("Text Files(*.txt)"));
    if(!path.isEmpty()){
        QFile file(path);
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
            QMessageBox::warning(this, tr("Read File"), tr("Cannot open file:\n%1").arg(path));
            return;
        }
        //使用QTextStream::readAll()读取文件所有内容,然后将其赋值给QTextEdit显示出来。最后不要忘记关闭文件。
        QTextStream in(&file);
        //如果数据量过大readAll会直接使程序崩溃
        textEdit -> setText(in.readAll());
        file.close();
    }else{
        QMessageBox::warning(this, tr("Path"), tr("You did not select any file."));
    }

}

void MainWindow::save(){

    QString path = QFileDialog::getSaveFileName(this, tr("Open File"),
                                                ".", tr("Text Files(*.txt)"));
    if(!path.isEmpty()){
        QFile file(path);
        if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
            QMessageBox::warning(this, tr("Write File"), tr("Cannot open file:\n%1").arg(path));
            return;
        }
        QTextStream out(&file);
        //将QTextEdit的内容输出到一个文件中
        out << textEdit->toPlainText();
        file.close();
    }else{
        QMessageBox::warning(this, tr("Path"), tr("You did not select any file."));
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

mian.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

res.qrc

具体添加步骤为:工程-右键-添加新文件-Qt Resource File;(编辑框下方)添加前缀-“/images”-添加文件-“自己准备好的图标.png”-别名-“体现在代码中的名称”(为了方便替换文件后的代码更改)。


若对Resource文件进行了更新,需要重新构建项目-执行qmake-编译-运行,才能看到更新后的效果。


运行效果:


可以进行简单的文件编辑、保存和txt打开显示。


猜你喜欢

转载自blog.csdn.net/qq_20304723/article/details/80091805
今日推荐