如何获得禁用的 QAction 元素的触发信号?

Posted

技术标签:

【中文标题】如何获得禁用的 QAction 元素的触发信号?【英文标题】:How can I get trigger signal for disabled QAction element? 【发布时间】:2017-10-16 09:32:48 【问题描述】:

我已禁用 QAction 菜单元素:

QAction *item = new QAction(itemTitle);
item->setEnabled(false);

我使用 SLOT 连接在按下元素后调用函数,但它仅适用于启用的元素

QObject::connect(item, SIGNAL(triggered()), this, SLOT(func()));

我的问题是如何为禁用的 QAction 元素触发某些功能

Qt 5.9.2,MSVC2017 64位编译器

【问题讨论】:

【参考方案1】:

setEnabled() 属性保存小部件是否启用。

一般来说,启用的小部件会处理键盘和鼠标事件;一种 禁用的小部件不会。 QAbstractButton 例外。

当一个小部件被禁用时,所有鼠标和键盘事件也被禁用。

更多信息:http://doc.qt.io/qt-4.8/qwidget.html#enabled-prop

【讨论】:

所以没有办法做到这一点?如果以某种方式使用 QT 样式表模拟禁用的 QAction 元素,而不是 setEnabled() 本身,这种方式是否可行? CSS 禁用是一样的。也许你可以改变backcolorborderreimplement events 来模拟禁用。否则不可能。 我建议你换一种方式,为什么你需要触发禁用的小部件? 这个想法是我有一些文件名列表,如果没有下载文件,它会显示为禁用。如果使用单击禁用元素,则文件开始下载。通常,下载的文件在菜单中处于活动状态,未下载的文件处于禁用状态。 您对如何模拟禁用按钮的看法。也许这对你有帮助。 QColor color = ui->btnDisable->palette().button().color();ui->btnEnable->setStyleSheet("background-color:" + color.name() +";");

以上是关于如何获得禁用的 QAction 元素的触发信号?的主要内容,如果未能解决你的问题,请参考以下文章

QSignalMapper 和 QAction 的问题永远不会触发 Slot

防止 QMenu 在其 QAction 之一被触发时关闭

通过 QtGui.QAction 将参数传递给触发的方法

pyqt pyside QAction 代码中触发

识别 QAction 的触发器

防止 QMenu 在其 QAction 之一未触发时关闭