我正在 Qt 4.7 中开发一个项目,其中有一个 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
最佳答案
从基类QWidget
实现虚函数keyPressEvent
:
void YourWidget::keyPressEvent(QKeyEvent *event)
{
if( event->key() == Qt::Key_F2 )
{
emit F2isPressed(/* some signature */); // connected elsewhere
}
}
OP 注意:虽然对于我试图弄清楚的特定情况(按下 F2 键),这个答案并不完全正确,但它确实有效对于几乎所有将触发该功能的 other 键(例如其他 Fx 键等)。事实证明,F2 对于 Qt 来说是一个非常奇怪的情况,需要一些解决方法才能开始工作。想看原帖自己是怎么解决的以及这个问题的发帖者可以在聊天里看here .我将把这个答案标记为已接受,因为虽然它不适用于这个特定案例,但它通常是此类问题的正确答案。
关于c++ - Qt - 有没有办法在键入特定键时发出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137187/