带有图标+文本的QToolButton:如何将两者居中?

2024-01-12

我正在使用多个Q工具按钮 http://doc.qt.io/qt-5/qtoolbutton.htmls 在一个自定义QGrid布局 http://doc.qt.io/qt-5/QGridLayout.html小部件。这些按钮设置为根据分配的默认 QAction 显示图标 + 文本。唯一的问题是内容(图标+文本)始终左对齐。

内容(图标+文本,在屏幕截图中标记为红色框)应位于按钮的中心(由蓝色框表示)。

对于大多数情况,这很好,因为 Qt 自动尝试以最小尺寸渲染该按钮。不过,我正在拉伸按钮以使其很好地适合我的 QGridLayout。

QToolButton* pButton = new QToolButton(0);
pButton->addDefaultAction(pAction);
pButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
pButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);

QGridLayout *pActionAreaLayout = new QGridLayout;
pActionAreaLayout->addWidget(pSomeOtherWidget, 0, 0, 1, 2);
pActionAreaLayout->addWidget(pButton , 1, 0, 1, 1);

有没有办法强制内容在按钮中居中?

PS:我发现下面的评论另一个论坛 http://www.qtcentre.org/threads/60893-Align-text-and-icon-of-QToolButton-on-center?p=269529#post269529,然而这似乎相当具有侵入性,而且我还不太清楚:

您可以尝试使用样式表进行水平对齐,但您可能必须实现 QStyle 代理并为 QStyle::CE_ToolButtonLabel 重新实现drawControl() 或者从 QToolButton 派生,覆盖 PaintEvent() 并为除标签之外的所有内容调用样式。


正如我在回答你另一个问题时所建议的那样。https://stackoverflow.com/a/28630318/1917249 https://stackoverflow.com/a/28630318/1917249不要使用 QToolButton,仅使用 QPushButton,并根据需要添加弹出菜单。

那么你就不会有不同尺寸的QToolButton and QPushButton小部件。您将拥有居中的图标和文本。

Popupmenu可以轻松添加到QPushButton(只有小箭头不会显示)

QPushButton *pushButton = new QPushButton(toolAction->icon(), "PushButton", window);
// window - widget where button is placed ( to get correct QMenu position )
QObject::connect(pushButton, &QPushButton::released, [window, pushButton, action](){
    QMenu menu;
    menu.addAction(action);
    QPoint pos = window->mapToGlobal(pushButton3->pos());
    pos += QPoint(0, pushButton->height());
    menu.exec(pos);
 });

或者你可以子类化QPushButton并在那里添加弹出菜单处理。更好的是尝试将带有图标的文本居中QToolButton或具有相同尺寸的QPushButton and QToolButton

复杂的例子请看我的回答:https://stackoverflow.com/a/28630318/1917249 https://stackoverflow.com/a/28630318/1917249

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有图标+文本的QToolButton:如何将两者居中? 的相关文章

随机推荐