我正在研究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
答案 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()
中,您可以打印所选行的内容。