QPushButton 和快捷键

4

我有一个关于Qt 4.6.0和QPushButtons快捷键的问题:

我想在用户点击button时,在QTextEdit中显示特定的文本,但只有当button被按下时才会显示,一旦松开,我希望另一个文本出现。

一切都正常,但现在我想添加一个快捷键(比如说F1),以执行完全相同的操作,当我按下F1时,它会在QTextEdit中显示特殊内容,直到我释放key。我该如何实现这个?

我在我的button上添加了快捷键,但是当我按下F1时,它会闪烁,就好像只要我按下F1,就会发出很多signals... 我希望我的QTextEdit在我按下F1时改变,然后在我释放key时改回来...

希望我的问题清楚明白!

非常感谢您提前的建议!

2个回答

4

我认为解决这个问题最简单的方法是在父对象(窗口)上使用installEventFilter(),并过滤掉QEvent::MouseButtonPressQEvent::MouseButtonRelease事件。

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
 if (obj == textEdit) {
     if (event->type() == QEvent::KeyPress) {
         QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
         qDebug() << "Ate key press" << keyEvent->key();
         return true;
     } else {
         return false;
     }
 } else {
     // pass the event on to the parent class
     return QMainWindow::eventFilter(obj, event);
 }
}

嘿,谢谢你的回答!你是对的,我最终选择了这个解决方案,但有些事情让我觉得这不是一个适当的做法...问题是,QPushButton已经设置好了以响应我的应用程序中的其他事件,而我必须“复制”这些反应到我的快捷方式上...我认为这违反了DRY原则,我并不是很喜欢它...例如,在某个时刻,我的QPushButton被禁用了,我不想做任何工作来禁用快捷方式,因为快捷方式应该是QPushbutton的属性,因此,当QPushButton关闭时,快捷方式也应该关闭。 - Andy M
1
你说得对,这种行为确实不太自然,但我认为这种自定义行为与QPushButton的本质有些奇特(用户期望单击一次时它会执行某些操作,而不是在按下鼠标键时就有任何反应)。我想只要你不必为几百个按钮做这件事,并且它并不遍布整个应用程序,那么这是一种干净、易于阅读的方式来使你的按钮按照你的意愿进行操作。 - BastiBen
是的,我想这是正确的,QPushButton并不具备基本行为... 不管怎样,我会采用那个解决方案... 感谢你的帮助! - Andy M

1
一个推按钮在被鼠标、空格键或键盘快捷键激活时会发出clicked()信号。你需要处理按键和释放键来实现你想要的功能。

基本上这就是我之前在回答中提出的建议(请参见下文)。 - BastiBen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接