简单文档应用实例
这是Qt示例里面的一个,大家可以对照下图在Qt示例里面查找
所需插图
界面布局:readSettings()(阅读设置)
document.h
#ifndef DOCUMENT_H
#define DOCUMENT_H
#include
#include
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
void readSettings(); // 阅读设置
};
#endif // DOCUMENT_H
document.cpp
#include
#include “document.h”
MainWindow::MainWindow()
// : textEdit(new QPlainTextEdit)
{
readSettings();
}
void MainWindow::readSettings()
{
QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
const QByteArray geometry = settings.value(“geometry”, QByteArray()).toByteArray();
if (geometry.isEmpty()) {
const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
move((availableGeometry.width() - width()) / 2,
(availableGeometry.height() - height()) / 2);
} else {
restoreGeometry(geometry);
}
}
document/main.cpp
#include
#include
#include
#include “document.h”
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QCoreApplication::setOrganizationName("QtProject"); //保存编写此应用程序的组织的名称
QCoreApplication::setApplicationVersion(QT_VERSION_STR); //此属性保存此应用程序的版本
QCommandLineParser parser; //命令行解析器 parser.setApplicationDescription(QCoreApplication::applicationName());
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("file", "The file to open."); //位置参数
parser.process(app);
MainWindow mainWin;
mainWin.show(); //显示用户可见窗体
return app.exec();
}
标题设置可编写文档的文本框(这里是纯文本框)
document.h
#ifndef DOCUMENT_H
#define DOCUMENT_H
#include
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
QPlainTextEdit *textEdit;
};
#endif // DOCUMENT_H
document.cpp
#include “document.h”
-
MainWindow::MainWindow()
-
textEdit(new QPlainTextEdit)
{
setCentralWidget(textEdit); //设置中央小部件,可编辑的文本窗体
}
main.cpp
#include
#include “document.h”
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show(); //显示用户可见窗体
return app.exec();
}
设置标题(标题为untitled.txt)
document.h
#ifndef DOCUMENT_H
#define DOCUMENT_H
#include
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
void setCurrentFile(const QString &fileName); //设置当前文件
QPlainTextEdit *textEdit;
QString curFile; //当前文件
};
#endif // DOCUMENT_H
document.cpp
#include
#include “document.h”
-
MainWindow::MainWindow()
-
textEdit(new QPlainTextEdit)
{
setCurrentFile(QString());
}
void MainWindow::setCurrentFile(const QString &fileName)
{
curFile = fileName;
QString shownName = curFile; //当前文件窗体名
if (curFile.isEmpty())
shownName = “untitled.txt”;
setWindowFilePath(shownName); //如果当前文件不为空,窗体名就为文件名,setWindowFilePath:设置窗口文件路径
}
document/main.cpp
#include
#include “document.h”
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show(); //显示用户可见窗体
return app.exec();
}
优化1:添加文本框
在……中添加
setCentralWidget(textEdit); //设置中央小部件,这样可编辑文档
优化2:为标题添加*号
private:
void documentWasModified(); //文件被修改
void setCurrentFile(const QString &fileName); //设置当前文件
QString shownName = curFile; //当前文件窗体名
if (curFile.isEmpty())
shownName = “untitled.txt”;
setWindowFilePath(shownName); //如果当前文件不为空,窗体名就为文件名,setWindowFilePath:设置窗口文件路径
connect(textEdit->document(), &QTextDocument::contentsChanged,
this, &MainWindow::documentWasModified);
void MainWindow::documentWasModified() //为标题添加*号
{
setWindowModified(textEdit->document()->isModified());
}
设置菜单栏
File
新建一个File菜单
document.h
#ifndef DOCUMENT_H
#define DOCUMENT_H
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
void createActions();
};
#endif // DOCUMENT_H
document.cpp
#include //#include
#include “document.h”
MainWindow::MainWindow()
// : textEdit(new QPlainTextEdit)
{
createActions();
}
void MainWindow::createActions()
{
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
}
document/main.cpp
#include
#include “document.h”
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show(); //显示用户可见窗体
return app.exec();
}
优化:为File添加一个工具栏(可移动)
#include
//在createActions()函数里面添加
QToolBar *fileToolBar = addToolBar(tr(“File”));
在File里面建New(新建)控件
document.h
#ifndef DOCUMENT_H
#define DOCUMENT_H
#include
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
void createActions();
};
#endif // DOCUMENT_H
document.cpp
#include
#include
#include “document.h”
MainWindow::MainWindow()
{
createActions();
}
void MainWindow::createActions()
{
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
QToolBar *fileToolBar = addToolBar(tr(“File”));
QAction *newAct = new QAction(tr("&New"), this);
fileMenu->addAction(newAct); //为菜单栏添加newAct这个操作,不添加此代码我们在图形化窗体界面上看不到该部件
}
document/main.cpp
#include
#include “document.h”
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show(); //显示用户可见窗体
return app.exec();
}
优化1:添加new.png图标
1、这里需要添加资源new.png(下面有如何插入资源教程)
2、这里给菜单栏和工具栏都进行了添加操作,因为QAction是不可见的,我们需要将用QAction创建的对象
void MainWindow::createActions()
{
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
QToolBar *fileToolBar = addToolBar(tr(“File”));
const QIcon newIcon = QIcon::fromTheme(“document-new”, QIcon(":/images/new.png"));
//QAction是表示一个用户操作的对象,将图标进行可视化(插入菜单栏、工具栏中)
QAction *newAct = new QAction(newIcon, tr("&New"), this); //newAct:新行为
fileMenu->addAction(newAct); //为菜单栏添加newAct这个操作
fileToolBar->addAction(newAct); //为工具栏添加newAct这个操作
}
优化2:为New添加快捷键
newAct->setShortcuts(QKeySequence::New); //键序列与QAction对象一起