QTtricks
QDockWidget
QDockWidget在Qt中是一个可以停靠的面板,通常用于侧边栏或者可停靠的工具窗口。
QToolBar
在 Qt Designer 中,QToolBar 并不是通过直接拖拽添加的,而是 内置于 QMainWindow 中,注意主窗口类型是否正确,因为只有QMainWindow才有内置工具栏。
set add
setAllowedAreas 限制面板只能停靠在指定区域(如左侧或右侧),避免被拖到其他位置合并。
setMinimumWidth 防止面板因窗口缩放而过小,导致内容挤压或布局错乱。
setWidget 向面板内部添加实际内容(如树控件、表单等)。
addDockWidget 将面板正式添加到主窗口的指定区域。
sketchDock->setWidget(sketchToolBar);
addDockWidget(Qt::LeftDockWidgetArea, sketchDock);
Dock->setWidget(drawingToolBar)
setMenuBar(menuBar);
addToolBar(Qt::TopToolBarArea, quickAccessToolBar)
ToolBar->addWidget(viewCombo);
statusBar()->showMessage(“保存成功”, 2000);
保存和恢复布局
在关闭并重新打开应用时,之前的浮动状态和位置能够保留。可以通过QSettings来实现,记录各个DockWidget的位置和状态。
// 保存布局状态
void MainWindow::saveLayout() {QSettings settings;settings.setValue("mainWindowState", saveState());
}// 加载布局状态
void MainWindow::loadLayout() {QSettings settings;restoreState(settings.value("mainWindowState").toByteArray());
}// 关闭事件保存布局
void MainWindow::closeEvent(QCloseEvent *event) {saveLayout();QMainWindow::closeEvent(event);
}// settingsdialog.cpp
void SettingsDialog::loadSettings() {QSettings settings;ui->checkEnable->setChecked(settings.value("EnableFeature", false).toBool());ui->comboMode->setCurrentIndex(settings.value("Mode", 0).toInt());
}
void SettingsDialog::saveSettings() {QSettings settings;settings.setValue("EnableFeature", ui->checkEnable->isChecked());settings.setValue("Mode", ui->comboMode->currentIndex());
}
可视化设计与代码协作
操作流程 | 可视化设计 | 代码增强逻辑 |
---|---|---|
创建工具栏 | 拖拽控件并设置对象名 | 通过 findChild 获取控件实例 |
设置交互逻辑 | 添加动作(Action) | 绑定信号槽(如 connect) |
布局控制 | 调整位置和尺寸 | 使用 splitDockWidget 动态分割区域 |
样式美化 | 在 Designer 中设置样式表 | 通过代码动态加载 CSS 文件 |
模态与非模态
如果设置窗口是非模态的,用户可能在主窗口和设置窗口之间来回切换,这时候需要确保数据的同步和窗口的生命周期管理。
模态对话框,用户必须先处理设置窗口才能返回主窗口,这可能更符合某些场景的需求。
模态对话框使用exec()方法实现模态阻塞,show() 实现非模态。