一个按钮的两个或多个快捷方式

时间:2018-04-12 10:28:05

标签: c++ qt

我需要为一个按钮提供多个快捷方式。例如,Ctrl+WEnter以及ReturnEnterReturn在Qt中有所不同),其中任何一个都会导致点击该按钮。这该怎么做?如果按钮为QAction,我会拨打setShortcuts()(请参阅Two shortcuts for one action这不是重复的。它不同,与QAction而非QPushButton有关。)但QPushButton只有setShortcut()(单数),似乎不允许这样做。您建议使用什么解决方案或黑客?

1 个答案:

答案 0 :(得分:0)

好的,我有一个不那么黑的解决方案。我可以创建QPushButtonQAction,然后使用QActionQAction::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(); });

就是这样。