首页 > 代码库 > 【Qt学习笔记】10.主窗口 The Main Window

【Qt学习笔记】10.主窗口 The Main Window

一、工具栏和菜单


只有主框架窗口(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