首先在设计页面,新增一个toolbar。这里我起名叫serviceToolBar。
下面开始给工具栏做布局。
首先,如果在mainwindow上新建两个toolBar,那么即使将两个的方向都设置为vertical,第二个也会是水平的(我考虑过给两个toolBar分别做垂直布局,让一个setAlignment(Qt::AlignTop),一个AlignBottom,很不幸,第二个toolBar还是水平)。所以这里我干脆只使用一个toolBar,难点就在于如何在中间制造一段空白。
制造空白的思路就是做一个QAction,里面包含一个可以扩展高度的spacer,那么spacer后添加的QAction,自然可以沉到底部。
下面是代码,注释很清楚了,不再多说。其中:
- 各个QAction都是已经实现好的功能
-
createToolBars()
放置在MainWindow的构造函数之中,ui->setupUi(this);
之后。
void MainWindow::createToolBars() {
// 上面的action
ui->serviceToolBar->addAction(ui->actionSynoOnline);
ui->serviceToolBar->addAction(ui->actionDNAStudioOnline);
ui->serviceToolBar->addAction(ui->actionToolsOnline);
ui->serviceToolBar->addAction(ui->actionOrderSysOnline);
// 中间制造一些空间
QWidget* customWidget = new QWidget();
// 创建布局
QBoxLayout* layout = new QVBoxLayout(customWidget);
layout->setContentsMargins(0, 0, 0, 0);
// 参数说明:第一个参数是Spacer的宽度,第二个是高度,单位像素
// 第三个参数是Spacer在水平方向上、调整大小时使用的策略
// Preferred表示占用常规的空间
// 第四个参数是Spacer在垂直方向上、调整大小时使用的策略
// Expanding表示可以扩展以填充多余的空间
layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Preferred, QSizePolicy::Expanding));
// 将QWidget包装成一个QAction
QWidgetAction* widgetAction = new QWidgetAction(this);
widgetAction->setDefaultWidget(customWidget);
// 再将QAction添加到QToolBar
ui->serviceToolBar->addAction(widgetAction);
// 添加一个隔断
ui->serviceToolBar->addSeparator();
// 添加剩余的几个action
ui->serviceToolBar->addAction(ui->actionContact);
ui->serviceToolBar->addAction(ui->actionSettings);
}