一、开发环境
archlinux 更新到最新版
Qt 5.15.2+kde+r171-2
qt creator 4.14.2-1
二、项目实现
这个项目完全是 《Qt及Qt Quick开发实战精解》第一章的内容,主要记录一些编程过程中遇到的问题。除此之外,还学习qt自己的示例mdi项目。
1.界面设计
新建项目,基类选择QMainWindow。
(1) 添加资源文件
菜单的图标通过资源来保存。
(2) 逐一添加菜单项
我这里遇到一个问题,就是菜单中分割线显示不出来。但是将项目拷贝到windows的中进行打开,分割线是可以显示的,可能是新版本的bug。
设置图标的方法
创建一个工具栏,在MainWindow上右键添加工具栏
工具栏上的菜单就是直接从下面 Action Editor 中拖需要的菜单到工具栏就可以了。
2.创建子窗口类
添加一个类,参考书中代码编写即可。
有一个好用的快捷键:Alt + Enter
可直接在头文件函数声明的地方自动创建函数定义的框架,提高编码效率。除此之外,还可以在需要包含头文件的代码出,自动出现包含头文件的菜单。
3.实现菜单功能
大部分代码和书中相同,有一个地方不太一样:UpdateWindowMenu 这个函数用来在窗口菜单中选择并激活已经创建的文档。这里参考的就是示例程序中mdi项目中代码。
for (int i = 0; i < windows.size(); ++i)
{
QMdiSubWindow *mdi_sub_window = windows.at(i);
MdiChild *child = qobject_cast<MdiChild *>(mdi_sub_window->widget());
QString text;
if (i < 9)
{
text = tr("&%1 %2").arg(i + 1).arg(child->UserFriendlyCurrentFile());
}
else
{
text = tr("%1 %2").arg(i + 1).arg(child->UserFriendlyCurrentFile());
}
QAction *action = ui->menuWindow->addAction(text, mdi_sub_window, [mdi_sub_window, this]() {
ui->mdiArea->setActiveSubWindow(mdi_sub_window);
});
action->setCheckable(true);
action->setChecked(child == ActiveMdiChild());
}
4.完善程序功能
这部分代码也是照书上编写就可以。
三、项目的源代码
链接: https://pan.baidu.com/s/1FgVd0OiGWwFipltW7W5IUA
提取码: p5v9