QT示例之实现简易文本编辑器

2019-12-24  本文已影响0人  advanced_slowly

1.实现简易文本编辑器

1.效果图如下:
2.标准警告对话框的实现

效果如图:

image.png
//QMessageBox::StandarButton是一个标准按钮的枚举
    const QMessageBox::StandardButton ret
        = QMessageBox::warning(this, tr("Application"),
                               tr("The document has been modified.\n"
                                  "Do you want to save your changes?"),
                               QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
    switch (ret) {
    //如果用户点击了Cancel按钮,那么保存用户对文件内容的修改
    case QMessageBox::Save:
        return save();
        //如果用户点击了Cancel按钮,那么maybeSave()函数返回false.
        //然后不进行保存
    case QMessageBox::Cancel:
        return false;
    default:
        break;
    }
3.标准关于对话框的实现

效果如图:

image.png
 //关于对话框的实现,注意换行中字符串的拼接。使用"".
   QMessageBox::about(this, tr("About Application"),
            tr("The <b>Application</b> example demonstrates how to "
               "write modern GUI applications using Qt, with a menu bar, "
               "toolbars, and a status bar."));
4.状态栏的实现

效果如图:

image.png
//创建状态栏
void MainWindow::createStatusBar()
{
    //如果一个窗口应用程序中不存在状态栏,statusBar函数创建空的状态栏;
    //显示给定的信息
    statusBar()->showMessage(tr("Ready"));
}
5.在一个菜单栏上新建一个菜单,在菜单上添加菜单项,将菜单项添加到工具栏上。

效果如图:(带有图标的菜单项)

image.png
示例:创建一个菜单栏,在菜单栏添加菜单项;创建一个工具栏,在工具栏上添加一个菜单项.
 //menuBar创建一个空的菜单栏
    //addMennu函数Appends a new QMenu with title to the menu bar
    QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
    //创建工具栏
    QToolBar *fileToolBar = addToolBar(tr("File"));
    //创建一个有关于new这个菜单项的图标
    const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/images/new.png"));
    
    //添加菜单项
    QAction *newAct = new QAction(newIcon, tr("&New"), this);
    //New是QKeySequence中定义的一个快捷键之一
    //为菜单项创建快捷键
    newAct->setShortcuts(QKeySequence::New);
    //设置在状态栏提示信息
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, &QAction::triggered, this, &MainWindow::newFile);

    //给菜单栏中的一个菜单File添加菜单项
    fileMenu->addAction(newAct);
    //给工具栏添加一个动作
    fileToolBar->addAction(newAct);

总结步骤如下:
1.menuBar函数创建一个空菜单栏,addToolBar函数创建一个工具栏
2.addMenu函数往菜单栏添加一个菜单
3.QIcon::fromTheme函数创建菜单项的图标
4.添加菜单项
5.为菜单项设置快捷键
6.设置点击菜单项后的状态栏提示信息
7.将菜单项添加进菜单中和工具栏中

6.设置打开记事本默认的文件名
    QString shownName = curFile;
    if (curFile.isEmpty())
        shownName = "无标题.txt";
//设置文件名
    setWindowFilePath(shownName);
//获取文件名
    QString name = this->windowFilePath();
    qDebug() << name;
7.读取文件内容
void MainWindow::loadFile(const QString &fileName)
{
    QFile file(fileName);
    //打开成功返回true,失败返回false
    //打开模式是一个枚举,QIODevice::OpenModeFlag

    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        QMessageBox::warning(this, tr("Application"),
                             tr("Cannot read file %1:\n%2.")
                             .arg(QDir::toNativeSeparators(fileName), file.errorString()));
        return;
    }

    //文本流读取文件信息
    QTextStream in(&file);
    //setPlainText函数将readAll函数读取到的内容全部作为textEdit的内容
    textEdit->setPlainText(in.readAll());

    //更改当前文件名
    setCurrentFile(fileName);
    //状态栏显示“file loaded”这条信息2秒钟
    statusBar()->showMessage(tr("File loaded"), 2000);
}

8.向文件写入内容
void MainWindow::loadFile(const QString &fileName)
{
    QFile file(fileName);
    //打开成功返回true,失败返回false
    //打开模式是一个枚举,QIODevice::OpenModeFlag

    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        //警告提示框
        QMessageBox::warning(this, tr("Application"),
                             tr("Cannot read file %1:\n%2.")
                             .arg(QDir::toNativeSeparators(fileName), file.errorString()));
        return;
    }

    //构造一个操作文件的文本流对象
    //文本流读取文件信息
    QTextStream in(&file);
    textEdit->setPlainText(in.readAll());

    //更改当前文件名
    setCurrentFile(fileName);
    //状态栏显示“file loaded”这条信息2秒钟
    statusBar()->showMessage(tr("File loaded"), 2000);
}

上一篇 下一篇

猜你喜欢

热点阅读