我需要为一个按钮提供多个快捷方式。例如,Ctrl+W
和Enter
以及Return
(Enter
和Return
在Qt中有所不同),其中任何一个都会导致点击该按钮。这该怎么做?如果按钮为QAction
,我会拨打setShortcuts()
(请参阅Two shortcuts for one action这不是重复的。它不同,与QAction
而非QPushButton
有关。)但QPushButton
只有setShortcut()
(单数),似乎不允许这样做。您建议使用什么解决方案或黑客?
答案 0 :(得分:0)
好的,我有一个不那么黑的解决方案。我可以创建QPushButton
和QAction
,然后使用QAction
为QAction::setShortcuts()
设置多个快捷方式,并将此操作连接到QPushButton::animateClick()
。起初这个解决方案没有用,因为我打电话给connect(action, &QAction::triggered, button, &QPushButton::animateClick);
。问题在于隐形默认参数。 QAction::triggered
发送true
/ false
,表示是否已检查操作。但是QPushButton::animatedClick
期望在视觉上保持毫秒数并且按下#{1}}。因此,它仍然受到了压力。仅为0或1毫秒,这是不足以注意到它(参数的默认值是100毫秒)。这可以使用lambda解决,因此:
// 'this' refers to a parent widget
auto action = new QAction(this);
action->setShortcuts({ tr("Ctrl+W"), tr("Return"), tr("Enter") });
this->addAction(action);
auto button = new QPushButton(tr("Hey, click me!"));
connect(action, &QAction::triggered, [button](){ button->animateClick(); });
就是这样。