Qt 第三章 创建主窗口--实现File菜单
{
Q_OBJECT
public:
MainWindow();
private slots:
void newFile();
void open();
void save();
void saveAs();
void openRecentFile();
void about();
private:
void createActions();
void createMenus();
void createToolBars();
void createStatusBar();
void saveFile(const QString &fileName);
void loadFile(const QString &fileName);
void setCurrentFile(const QString &fileName);
void updateRecentFileActions();
QString strippedName(const QString &fullFileName);
QString curFile;
QTextEdit *textEdit;
QLabel *locationLabel;
QMenu *fileMenu;
QMenu *recentFilesMenu;
QMenu *helpMenu;
QToolBar *fileToolBar;
QAction *newAction;
QAction *openAction;
QAction *saveAction;
QAction *saveAsAction;
QAction *exitAction;
QAction *aboutAction;
QAction *aboutQtAction;
QAction *separatorAction;
enum { MaxRecentFiles = 5 };
QAction *recentFileActions[MaxRecentFiles];
};
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);
createMenus();
createToolBars();
createStatusBar();
resize(500, 400);
}
{
MainWindow *other = new MainWindow;
other->show();
}
{
QString fileName = QFileDialog::getOpenFileName(this);
if (!fileName.isEmpty())
loadFile(fileName);
}
void MainWindow::save()
{
if (curFile.isEmpty())
saveAs();
else
saveFile(curFile);
}
{
QString fileName = QFileDialog::getSaveFileName(this);
if (fileName.isEmpty())
return;
}
{
QAction *action = qobject_cast<QAction *>(sender());
if (action)
loadFile(action->data().toString());
}
{
QMessageBox::about(this, tr("About Recent Files"),
tr("The <b>Recent Files</b> example demonstrates how to provide a "
"recently used file menu in a Qt application."));
}
void MainWindow::createActions()
{
newAction = new QAction(tr("&New"), this);
newAction->setIcon(QIcon(":/images/new.png"));
newAction->setShortcut(tr("Ctrl+N"));
newAction->setStatusTip(tr("Create a new file"));
connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));
openAction->setIcon(QIcon(":/images/open.png"));
openAction->setShortcut(tr("Ctrl+O"));
openAction->setStatusTip(tr("Open an existing file"));
connect(openAction, SIGNAL(triggered()), this, SLOT(open()));
saveAction->setIcon(QIcon(":/images/save.png"));
saveAction->setShortcut(tr("Ctrl+S"));
saveAction->setStatusTip(tr("Save the document to disk"));
connect(saveAction, SIGNAL(triggered()), this, SLOT(save()));
saveAsAction->setStatusTip(tr("Save the document under a new name"));
connect(saveAsAction, SIGNAL(triggered()), this, SLOT(saveAs()));
recentFileActions[i] = new QAction(this);
recentFileActions[i]->setVisible(false);
connect(recentFileActions[i], SIGNAL(triggered()),
this, SLOT(openRecentFile()));
}
exitAction->setShortcut(tr("Ctrl+Q"));
exitAction->setStatusTip(tr("Exit the application"));
connect(exitAction,SIGNAL(triggered()),qApp,SLOT(closeAllWindows()));
aboutAction->setStatusTip(tr("Show the application's About box"));
connect(aboutAction, SIGNAL(triggered()),this,SLOT(about()));
aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));
connect(aboutQtAction,SIGNAL(triggered()),qApp,SLOT(aboutQt()));
}
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAction);
fileMenu->addAction(openAction);
fileMenu->addAction(saveAction);
fileMenu->addAction(saveAsAction);
separatorAction = fileMenu->addSeparator();
for (int i = 0; i < MaxRecentFiles; ++i)
fileMenu->addAction(recentFileActions[i]);
fileMenu->addSeparator();
fileMenu->addAction(exitAction);
helpMenu->addAction(aboutAction);
helpMenu->addAction(aboutQtAction);
}
{
fileToolBar = addToolBar(tr("&File"));
fileToolBar->addAction(newAction);
fileToolBar->addAction(openAction);
fileToolBar->addAction(saveAction);
}
{
locationLabel = new QLabel(" ready ");
locationLabel->setAlignment(Qt::AlignHCenter);
locationLabel->setMinimumSize(locationLabel->sizeHint());
statusBar()->addWidget(locationLabel);
{
QFile file(fileName);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Recent Files"),
tr("Cannot read file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return;
}
QApplication::setOverrideCursor(Qt::WaitCursor);
textEdit->setPlainText(in.readAll());
QApplication::restoreOverrideCursor();
statusBar()->showMessage(tr("File loaded"), 2000);
}
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Recent Files"),
tr("Cannot write file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return;
}
QApplication::setOverrideCursor(Qt::WaitCursor);
out << textEdit->toPlainText();
QApplication::restoreOverrideCursor();
statusBar()->showMessage(tr("File saved"), 2000);
}
{
curFile = fileName;
if (curFile.isEmpty())
setWindowTitle(tr("Recent Files"));
else
setWindowTitle(tr("%1 - %2").arg(strippedName(curFile))
.arg(tr("Recent Files")));
QStringList files = settings.value("recentFileList").toStringList();
files.removeAll(fileName);
files.prepend(fileName);
while (files.size() > MaxRecentFiles)
files.removeLast();
MainWindow *mainWin = qobject_cast<MainWindow *>(widget);
if (mainWin)
mainWin->updateRecentFileActions();
}
}
{
QSettings settings("Trolltech", "Recent Files Example");
QStringList files = settings.value("recentFileList").toStringList();
QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i]));
recentFileActions[i]->setText(text);
recentFileActions[i]->setData(files[i]);
recentFileActions[i]->setVisible(true);
}
for (int j = numRecentFiles; j < MaxRecentFiles; ++j)
recentFileActions[j]->setVisible(false);
}
{
return QFileInfo(fullFileName).fileName();
}
Qt 第三章 创建主窗口--实现File菜单相关推荐
- PyCharm PyQt5创建主窗口源代码
一.PyCharm PyQt5创建主窗口基本过程: 1.打开PyCharm,新建工程MyMainTest. 2.按照Tools-External Tools-QtDesigner,打开QT设计界面,创 ...
- Chapter34 创建主窗口/实现应用程序功能
Chapter3&4 创建主窗口/实现应用程序功能 第三章和第四章,书里介绍了一个很复杂的应用程序,叫做Spreadsheet,最终实现了一个类似于Excel的表格软件.我试着写了一下,非常的 ...
- Unix/Linux下的Curses库开发指南——第三章curses库窗口
第3 章 curses 库窗口 3 .1 curses 窗口简介 3.1.1窗口概念 窗口是 curses 库中最重要的一个组件,它实际上是屏幕上的一块矩形区域,在上面我们可以进行各种输出以及操作. ...
- CreateMainWindow 创建主窗口属性
MiniGUI 中的主窗口没有窗口类的概念,应通过初始化一个MAINWINCREATE 结构, 然后调用CreateMainWindow 函数来创建一个主窗口.MAINWINCREATE 结构的成员解 ...
- Qt的MDI中多个子窗口响应一个菜单事件的优雅实现(动态slot)
问题: 用过MFC的人都知道,MDI中,某个菜单或者按钮,在视图中可以添加响应函数,在文档中也可以添加响应函数,在框架中也可以添加它的响应函数,优先级分别是视图.文档.框架,而且MFC自动将消息发给当 ...
- linux. qt信号崩溃,【创龙AM4379 Cortex-A9试用体验】之I/O中断异步通知驱动程序+QT捕获Linux系统信号+测试信号通知...
2.驱动程序 安装字符设备驱动程序开发流程开发. 2.1资源定义 定义按键I/O端口号.I/O中断号,以及字符设备的主设备号变量: #define GPIO_KEY1_PIN_NUM (3*32 + ...
- Qt学习之对话框与主窗口的创建
Qt中的信号与槽机制 qt中槽和普通的C++成员函数几乎是一样的--可以是虚函数,可以被重载,可以是共有的,保护的或者私有的. 槽可以和信号连接在一起,在这种情况下,每当发射这个信号的信号,就会自动调 ...
- 在Qt Designer中创建主Windows
在Qt Designer中创建主Windows 在Qt Designer中创建主Windows 菜单Menus 创建菜单 创建菜单项 工具栏 创建和删除工具栏 添加和删除工具栏按钮 动作Actio ...
- 计算机word窗口的组成,推计算机等级考试题库:一级MS Office第三章“Word窗口及其组成”(一)...
小编所收集到的相关计算机等级考试题库:一级MS Office第三章"Word窗口及其组成"的资料 大家要认真阅读哦! Word窗口由标题栏.快速访问工具栏.文件选项卡.功能区.工作 ...
最新文章
- 动易SiteFactory CMS自动采集器 V2.0
- 【Android】Service几个重要的方法运行在哪个线程
- 英文词频统计预备,组合数据类型练习
- Hive自定义UDF和聚合函数UDAF
- Codeforces Good Bye 2016 题解
- SAP Spartacus如何启用B2B feature
- rabbitmq实战_RabbitMQ 实战系列之:消息传递
- 基于 C# 的 ETL 大数据并行编程
- python 笔记(三) 断言(assert)
- linux系统sudoers文件夹权限777以及/etc/profile文件修改后无法进入系统问题
- 使用EasyRecovery来恢复丢失的视频
- OFFICE 2007 SP3后续补丁微软官方下载地址
- 6678手册阅读记录
- php uv pv,PHP網站流量統計--[pv,uv,ip及$_SERVER]說明
- 2020年 Web 开发的最佳编程语言
- 《Gans in Action》第一章 对抗神经网络介绍
- JavaWeb—静态网页HTML
- 笔记本更换内存条图解步骤
- [总结]高效能人士的七个习惯
- OR青年 | 分布鲁棒优化研究报告
热门文章
- python如何返回多个值_python- 如何返回多个值 | 学步园
- pe常用软件_验证U盘PE系统,有几款纯净好用
- 不符合核销规则条件_1136家建筑企业资质核查不符合条件,复查合格率仅50
- java 对象怎么序列化,java对象序列化总结
- stm32cubemx生成不了keil工程文件_STM32CubeMX系列教程03_创建并生成代码工程
- php框架是不是累赘,PHP框架,伤不起啊,伤不起
- 与太原工业学院商讨第十七届全国大学生智能车华北赛区承办事宜
- 第十六届全国大学生智能车竞赛全部比赛胜利结束了
- Carmaer 500W 逆变器初步测试
- 2021年春季学期-信号与系统-第四次作业参考答案-第一小题