【问题标题】:How to enable a down arrow on QPushButton?如何在 QPushButton 上启用向下箭头?
【发布时间】:2014-07-24 20:27:11
【问题描述】:

使用QPushButton,您可以使用setMenu() 方法添加一个菜单,然后它会在按钮上绘制一个向下箭头(取决于样式设置)。

是否可以通过其他方法启用相同的向下箭头的绘制?我想使用这种样式的按钮在单击时显示自定义弹出窗口小部件。

【问题讨论】:

  • 如何像@Nejat 建议的那样实现myCustomWidgetAction,然后将该小部件操作添加到QMenu,然后将其传递给setMenu() 中的QPushButton

标签: qt qpushbutton


【解决方案1】:

您可以使用QToolButton 代替QPushButton 并向QToolButton 添加操作。您应该创建您的自定义 QWidgetAction 以添加到弹出菜单。

这是一个示例QWidgetAction

#include <QWidgetAction>

class  myCustomWidgetAction: public QWidgetAction
{
    Q_OBJECT
public:
    explicit myCustomWidgetAction(QWidget * parent);

protected:
    QWidget * createWidget(QWidget *parent);

};


myCustomWidgetAction::myCustomWidgetAction(QWidget * parent):QWidgetAction(parent) {
}
QWidget * myCustomWidgetAction::createWidget(QWidget *parent){
    myCustomWidget * widget=new myCustomWidget(parent);
    return widget;
}

然后您可以将您的小部件添加到 toolButton 以显示在弹出菜单中:

myCustomWidgetAction * widgetAction   = new myCustomWidgetAction(this);

ui->toolButton->addAction(widgetAction);

您的自定义小部件可以是包含不同元素的列表,也可以是任何其他小部件。您还可以将myCustomWidgetAction 的多个实例添加到工具按钮。

【讨论】:

  • 我不想这样做,因为在 OSX 上 QToolButton 看起来与 QPushButton 不同,它有方角。我知道我可以使用样式表来更改它,但是我必须为所有按钮状态重新创建样式。
  • 我尝试了这个,但使用带有菜单的 QPushButton 并将 CustomWidgetAction 添加到菜单中,正如@Googie 所建议的那样,但我无法让它工作,因为菜单和我的弹出窗口都显示出来了。我以前能够通过从 QWidgetAction 派生我的弹出窗口来在菜单中绘制弹出窗口,但无法弄清楚如何更改菜单大小以使弹出窗口不被遮挡或菜单样式删除边框和圆角。
【解决方案2】:

我最终做的是向 QPushButton 添加一个空菜单,使其显示向下箭头,然后在 aboutToShow() 信号上显示我的弹出窗口小部件。唯一的问题是除非您单击弹出窗口,否则它不会获得焦点,这可以通过模拟鼠标点击来解决,如here 所述。

【讨论】:

  • 这是一个棘手的解决方案。我想你最好继承 QPushButton 重新实现 paintEvent 来绘制下拉箭头和 mousePressed 来处理点击箭头...
猜你喜欢
  • 2011-10-10
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多