我在自定义的QToolButton小部件中使用多个QGridLayout。这些按钮被设置为基于指定的默认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(),并为除标签之外的所有东西调用样式。
发布于 2015-02-20 13:51:18
正如我在回答你的另一个问题时建议的那样。https://stackoverflow.com/a/28630318/1917249不使用QToolButton,只需使用QPushButton,并在需要时添加弹出菜单。
然后,您将不会有不同大小的QToolButton
和QPushButton
小部件。你会有居中的图标和文字。
弹出菜单可以很容易地添加到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
和QToolButton
大小相同的文本。
关于复杂的例子,请看我的答案:https://stackoverflow.com/a/28630318/1917249
https://stackoverflow.com/questions/28516012
复制相似问题