1. 从零开始搭建Qt文本编辑器框架
第一次用Qt Creator创建项目时,我盯着空白的MainWindow界面发呆了十分钟——菜单栏、工具栏、状态栏这些常见元素到底该怎么布局?后来发现Qt早就帮我们规划好了主窗口的经典结构。新建Qt Widgets Application项目时,勾选"Generate form"选项会自动创建带UI文件的主窗口框架。这个框架已经包含了QMainWindow的所有基础组件容器,就像装修好的毛坯房,我们只需要往里面摆放家具。
建议在项目根目录下新建resources文件夹,专门存放图标素材。我习惯用SVG格式的矢量图标,缩放不会失真。最近在做一个Markdown编辑器时,从开源项目里扒了一套Material Design风格的图标,统一放在resources/icons目录下。记得在.pro文件里添加RESOURCES += resources.qrc,这样编译时才会打包资源文件。
cpp复制// mainwindow.h 基础框架
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
private:
void createMenuBar();
void createToolBars();
void createStatusBar();
};
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 菜单栏的实战技巧
很多新手会卡在菜单栏的层级关系上。Qt的菜单系统其实就三层结构:菜单栏(QMenuBar)→菜单(QMenu)→菜单项(QAction)。我在开发音乐播放器时,主菜单栏包含"文件"、"播放"、"视图"三个顶级菜单,其中"视图"菜单下又有"全屏模式"、"播放列表"两个子菜单。
创建菜单项时有个实用技巧:给每个QAction设置快捷键和状态栏提示。比如"文件→打开"菜单项可以这样配置:
cpp复制QAction *openAct = new QAction(QIcon(":/icons/open.png"), tr("&打开"), this);
openAct->setShortcut(QKeySequence::Open);
openAct->setStatusTip(tr("打开现有文档"));
connect(openAct, &QAction::triggered, this, &MainWindow::openFile);
最近帮同事调试时发现一个典型问题:中文菜单显示乱码。这是因为Qt默认使用UTF-8编码,而部分Windows系统默认编码是GBK。解决方法是在main函数开头加:
cpp复制QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
3. 打造可定制的工具栏
工具栏的灵活性比菜单栏高很多。我的代码编辑器项目里有五个工具栏:文件操作、编辑、视图、调试和帮助。每个工具栏都可以拖动停靠,这个特性用一行代码就能实现:
cpp复制fileToolBar->setMovable(true); // 允许拖动
工具栏按钮的图标大小适配是个痛点。在高分屏上,默认16x16的图标会显得很小。我的解决方案是动态调整:
cpp复制// 根据DPI缩放比例调整图标大小
int iconSize = qApp->primaryScreen()->logicalDotsPerInch() >
