qt 如何设置 QToolBar > QToolButton 溢出按钮的样式?

qt How to style a QToolBar > QToolButton overflow button?

我想知道如何在样式表中访问 "overflow button" 并设置其样式,当显示带有一堆 QToolButton 的 QToolBar 时出现,因为并非所有按钮都适合 window.

示例:

"button" 是一个 QToolBarExtension,因此您可以 select 在 QSS 中使用那个 class 名称。

示例:

QToolBarExtension {
    background-color: black;
}

这将是结果:

在 QSS 中 selecting 一个对象的另一个方法是通过它的对象名称。所以 QToolBarExtension#qt_toolbar_ext_button 也可以。

Qt 似乎没有提供一种直接的方法来根据其方向设置扩展按钮的样式,我将尝试提供一种解决方法来解决您的问题。

继承 QToolBar 创建一个工具栏,当方向改变时更新扩展按钮名称。

mytoolbar.h

#ifndef MYTOOLBAR_H
#define MYTOOLBAR_H

#include <QToolBar>

class MyToolBar : public QToolBar
{
    Q_OBJECT
public:
    explicit MyToolBar(QWidget *parent = 0);

signals:

private slots:
    void updateOrientation(Qt::Orientation orientation);

private:
    QObject *extButton;
};

#endif // MYTOOLBAR_H

mytoolbar.cpp

#include "mytoolbar.h"

MyToolBar::MyToolBar(QWidget *parent) :
    QToolBar(parent),
    extButton(0)
{
    // Obtain a pointer to the extension button
    QObjectList l = children();
    for (int i = 0; i < l.count(); i++) {
        if (l.at(i)->objectName() == "qt_toolbar_ext_button") {
            extButton = l.at(i);
            break;
        }
    }

    // Update extension nutton object name according to current orientation
    updateOrientation(orientation()); 

    // Connect orientationChanged signal to get the name updated every time orientation changes
    connect (this, SIGNAL(orientationChanged(Qt::Orientation )),
             this, SLOT(updateOrientation(Qt::Orientation)));
}

void MyToolBar::updateOrientation(Qt::Orientation orientation) {
    if (extButton == 0)
        return;
    if (orientation == Qt::Horizontal)
        extButton->setObjectName("qt_toolbar_ext_button_hor"); // Name of ext button when the toolbar is oriented horizontally.
    else
        extButton->setObjectName("qt_toolbar_ext_button_ver"); // Name of ext button when the toolbar is oriented vertically.
    setStyleSheet(styleSheet()); // Update stylesheet
}

现在您可以这样设置按钮的样式:

QToolBarExtension#qt_toolbar_ext_button_hor {
background-color: black;
}

QToolBarExtension#qt_toolbar_ext_button_ver {
background-color: red;
}

其中 qt_toolbar_ext_button_hor 表示工具栏水平方向时的按钮,qt_toolbar_ext_button_ver 垂直方向时的按钮。