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

标签 c++ qt signals qt-signals

我正在 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/

相关文章:

c - 如何使用 C 中的信号将多个值从子进程传递到父进程?

c - 在 Linux 上处理多线程断管情况的服务器端套接字最佳实践是什么?

c++ - exit() 在应该返回引用的函数内部调用

c++ - 为什么二维数组访问比一维数组访问快?

c++ - 为什么右值不能绑定(bind)左值引用?

C++/Qt获取指向指针的指针的值

c++ - 如何与 Eigen 进行逐元素比较?

c++ - Qt C2665 :connect error

c++ - 如何为QPushButton 重新添加按下/单击效果?

python - 一键激活 TreeView 行