thn*_*tls 4 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我发现我可以在call中创建一个插槽keyPressEvent(QKeyEvent *event),每当按下某些键(包括 fX 键)时就会注册。但是,我仍然找不到一种方法来区分哪个键触发了它,以及如何确保它是F2
keyPressEvent从基类实现虚函数QWidget:
void YourWidget::keyPressEvent(QKeyEvent *event)
{
if( event->key() == Qt::Key_F2 )
{
emit F2isPressed(/* some signature */); // connected elsewhere
}
}
Run Code Online (Sandbox Code Playgroud)
OP 注意:虽然这个答案对于我试图弄清楚的特定情况(按下F2的键)不太正确,但它确实适用于几乎任何其他会触发该功能的键(例如其他 Fx 键, ETC。)。事实证明,F2对于 Qt 来说这是一个非常奇怪的情况,需要一些解决方法才能工作。要查看我自己和该问题的发布者如何解决原始帖子,您可以在此处的聊天中查看。我将把这个答案标记为已接受,因为虽然它不适用于这种特殊情况,但它通常是此类问题的正确答案。
| 归档时间: |
|
| 查看次数: |
8672 次 |
| 最近记录: |