本文共 3183 字,大约阅读时间需要 10 分钟。
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 Application 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);
}
转载地址:http://osdko.baihongyu.com/