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
垂直方向时的按钮。
我想知道如何在样式表中访问 "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
垂直方向时的按钮。