一、工具栏和菜单
只有主框架窗口(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