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

时间:2015-06-08 17:41:46

标签: qt qtstylesheets

我想知道如何在样式表中显示当显示带有一堆QToolButtons的QToolBar时出现的“溢出按钮”,因为并非所有按钮都适合窗口。

示例:

example 1

example 2

1 个答案:

答案 0 :(得分:5)

“按钮”是QToolBarExtension,因此您可以使用该类名在QSS中选择它。

示例:

QToolBarExtension {
    background-color: black;
}

这将是结果:

enter image description here

在QSS中选择对象的另一个方法是它的对象名称。所以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