Qt - 键入特定键时有没有办法发出信号?

时间:2014-04-17 15:27:24

标签: c++ qt signals qt-signals

我正在研究Qt 4.7中的一个项目,其中a QListWidget需要在选择列表中的项目时执行某个功能。具体功能在这里并不重要,因此对于这个例子,我们说它是将值打印到std::cout。我现在就拥有它,以便在双击一个值时执行此操作,如下所示:

connect(ui->myList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(printChoice(QModelIndex))); ... void MyClass::printChoice(QModelIndex index) { std::cout << ui->myList->model()->data(index).toString(); }

此代码完美无缺。但是,我的项目主管表示,当用户点击 F2 键时,他们希望它进入此插槽,以便当前选择列表中的任何行。我不知道为这些键发出的任何信号,并且环顾网络并没有多大帮助。有谁知道这样做的方法?谢谢!

编辑:我发现在选择值时按 F2 会自动将该行置于编辑模式(必须内置到Qt中)但我仍然需要知道如何发生这种情况时会触发一个插槽。

编辑2:我越来越近了。我发现我可以在MyClass中创建一个名为keyPressEvent(QKeyEvent *event)的插槽,只要某些键被击中就会注册,包括fX键。但是,我仍然找不到区分哪个键触发它的方法,以及如何确保它是 F2

2 个答案:

答案 0 :(得分:2)

从基类keyPressEvent实现虚拟函数QWidget

void YourWidget::keyPressEvent(QKeyEvent *event)
{
    if( event->key() == Qt::Key_F2 )
    {
        emit F2isPressed(/* some signature */); // connected elsewhere
    }
}

OP注意:虽然这个答案对于我试图找出的特定情况(按下 F2 键)没有正常工作,但它 几乎可以用于触发该功能的任何其他键(例如其他Fx键等)。事实证明 F2 是Qt的一个非常奇怪的案例,需要一些解决方法才能开始工作。要查看我自己和这个问题的海报如何解决原始帖子,您可以查看聊天here。我将这个答案标记为已被接受,因为虽然它对于这个特定情况并不起作用,但对于这类问题通常是正确的答案。

答案 1 :(得分:1)

您可以使用QShortcut来调用广告位:

QShortcut * shortcut = new QShortcut(QKeySequence(Qt::Key_F2),this,SLOT(printChoice()));
shortcut->setAutoRepeat(false);

在广告位printChoice()中,您可以打印所选行的内容。