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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

Qt学习笔记2.窗体Widget && 屏幕坐标 && 布局

QT学习笔记 我的第一个程序

XAML学习笔记——Layout

可能的 Qt5 错误:调用 setFixedSize() 会禁用主窗口的关闭按钮(在 Win7 下)

如何在python pyqt5中从主窗口管理第二个窗口

win10笔记本Realtek没有音效