qt5-入门-工具栏toolBar介绍+实例-实现

时间:2024-03-23 10:57:31

首先在设计页面,新增一个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);

}