【问题标题】:Adding menu on QPushButton using QComboBox使用 QComboBox 在 QPushButton 上添加菜​​单
【发布时间】:2014-02-26 00:18:24
【问题描述】:

我正在尝试使用 QComboBox 弹出功能在 QPushButton 上实现弹出菜单。

当我单击按钮时,会出现一个菜单,但它们是按钮和菜单之间的一些空间。如何删除它?

当我将鼠标悬停在菜单中的某个项目上时,我还希望文本颜色保持固定。

我该怎么做?

我已经尝试解决此问题 3 天,但没有通过 CSS 或任何 QComboBox 函数获得任何解决方案。

谢谢。

【问题讨论】:

  • 您能否详细说明一下您是如何将QPushButtonQComboBox 完美结合的?顺便说一句,为什么使用QToolButtonpopupMode - MenuButtonPopup 和使用setMenu 来实现这个对你不利?
  • 我正在实现 QComboBox *combo = new QComboBox(ui.mUploadButton);没试过QToolButton 不熟悉QT中的很多类
  • 老实说,您所做的并不是一个好习惯,因为您试图将小部件放置在甚至不是容器小部件的小部件中(您可以在 Qt 中查看容器小部件列表例如设计师),这至少很可能会导致您创建非直观的用户控件。我建议使用或多或少标准的菜单尝试 QToolButton。顺便说一句,为什么您需要文本颜色在悬停时保持固定?使用默认的 windows 背景悬停颜色文本将变得几乎不可见,如果它保持黑色。
  • 它要求为什么我需要一种方法来使悬停文本颜色保持固定
  • 好吧,我不确定这是否是您真正想要的,但您可以查看answer 关于您的第二个问题

标签: c++ html css qt user-interface


【解决方案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 的多个实例添加到 toolButton。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 2022-11-04
    • 2021-06-28
    • 1970-01-01
    • 2017-04-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多