一、工具栏和菜单
只有主框架窗口(QMainWindow)才能够添加菜单和工具栏
QAction 命令
步骤:
1、添加action (动作编辑器) (在Qt Designer 界面的右下角))
2、把action拖动到菜单或工具栏里
3、在代码里加上响应处理函数
示例代码:
Test10_1a_12_11::Test10_1a_12_11(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); assert( connect( ui.actionAct1, SIGNAL(triggered()), this, SLOT(OnHelpButton()) ) ); } int Test10_1a_12_11::OnHelpButton() { return 0; }
接下来实现一个简单的应用。
二、单文档程序
单文档程序(Single Document):
只能编辑一个文档,如: Notepad、Word
多文档程序(Multiple Document):
可同时编辑多个文档,如:Notepad++,UltraEdit , 使用选项卡,每页代表一个文档
做一个简单的文本编辑器,实现以下功能:
1、打开文件
2、编辑文件
3、保存文件
程序示例:
Test10_1a_12_11::Test10_1a_12_11(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); assert( connect( ui.actionNew, SIGNAL(triggered()), this, SLOT(OnBtnNew()) ) ); assert( connect( ui.actionSave, SIGNAL(triggered()), this, SLOT(OnBtnSave()) ) ); assert( connect( ui.actionOpen, SIGNAL(triggered()), this, SLOT(OnBtnOpen()) ) ); } int Test10_1a_12_11::OnBtnNew() { ui.plainTextEdit->setEnabled(true); return 0; } int Test10_1a_12_11::OnBtnSave() { QString FilePath = QFileDialog::getSaveFileName(this, AfGbk::ToUnicode("保存在...")); if (FilePath.length() == 0) { return -1; } //保存文件 string FileName = AfGbk::FromUnicode(FilePath); string text = AfGbk::FromUnicode(ui.plainTextEdit->toPlainText()); //内容 FILE* fp = fopen(FileName.c_str(), "wb"); fwrite(text.c_str(), 1, text.length(), fp); fclose(fp); //状态栏显示 ui.statusBar->showMessage(AfGbk::ToUnicode("保存成功..."), 3000); //状态 显示3秒 return 0; } int Test10_1a_12_11::OnBtnOpen() { QString FilePath = QFileDialog::getOpenFileName(this, AfGbk::ToUnicode("打开文件...")); if (FilePath.length() == 0) { return -1; } //读取文件内容 string FileNameStr = AfGbk::FromUnicode(FilePath); FILE* fp = fopen(FileNameStr.c_str(), "rb"); char buf[1024]; int n = fread(buf, 1, sizeof(buf), fp); buf[n] = ‘\0‘; //显示到界面中 QString text = AfGbk::ToUnicode(buf); ui.plainTextEdit->setPlainText(text); ui.plainTextEdit->setEnabled(true); return 0; }
界面:
三、可停靠窗口 QDockWidget
在Qt中,可停靠窗口作为一种容器类型的控件
【Qt学习笔记】10.主窗口 The Main Window
原文地址:http://zhweizhi.blog.51cto.com/10800691/1881748