【问题标题】:How to add an action to the default context menu of a QSpinBox?如何向 QSpinBox 的默认上下文菜单添加操作?
【发布时间】:2022-02-15 20:33:01
【问题描述】:

我正在使用 Qt 5.7 (C++) 并希望向 QSpinBox(以及 QDoubleSpinBox 以及可能的其他一些输入小部件)添加自定义功能,例如重置选项。此功能应该可以通过上下文菜单访问。但是我不想替换默认的上下文菜单。相反,我想在现有操作之上或之下添加我的自定义操作。

我发现这个问题的答案几乎匹配:

但是,这些对我的情况没有帮助,因为它依赖于 Widget 有一个创建和返回标准上下文菜单的方法(如 QLineEdit::createStandardContextMenu())。旋转框没有这种方法。

我还尝试以便宜的方式直接从源代码(https://github.com/qt/qtbase/blob/5.7/src/widgets/widgets/qabstractspinbox.cpp 第 1249 行)复制创建默认选项的代码。这也不是很令人满意,因为它使用了底层行编辑的私有成员。

是否有(标准)方法可以重用和扩充Q(Double)SpinBox 或任何QWidget 的默认上下文菜单?还是我必须手动重新实现默认行为?

【问题讨论】:

    标签: c++ qt qt5 contextmenu


    【解决方案1】:

    https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/widgets/qabstractspinbox.cpp#n1315

    是的,我们似乎没有任何简单的“钩子”来定制它(如果你愿意,你可以提出功能请求); OTOH,复制的代码并不多,因为大多数菜单项都是由 QLineEdit::createStandardContextMenu() 添加的

    【讨论】:

    • 我最终通过添加一个 WithStandardMenu 混合类来“解决”它,该混合类专门针对我想要为其增加标准菜单的每个小部件。在那个 mixin 类中,我尽可能地重新创建原始上下文菜单。然后我可以透明地使用 createStandardContextMenu() 而不管基本小部件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2012-05-06
    • 2019-11-21
    • 2015-06-24
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多