qt - QListView 的 Esc 键按下事件

标签 qt qt4 qt5 signals-slots qlistview

我创建了一个简单的 QListView 添加了一个 QStringListModel 允许添加项目和编辑它们的文本。但是我不想允许添加空字段,我通过使用模型中的 dataChanged 信号部分实现了这一点,如果列表项在没有插入文本的情况下失去焦点或用户按下Enter 键而不添加文本。

但是,如果您按下 Esc 键,该字段将保持为空并且不会发出 dataChanged 信号。如果该字段留空而不重载会很乏味的 QListView 类(我使用设计器创建表单),我如何才能收到通知?

是否有其他发出的信号或我可以使用的方法来实现它?

谢谢!

最佳答案

使用event filters在你的主 GUI 类中:

void GUI::GUI()
{     
    ui->mListView->installEventFilter(this);
}
bool GUI::eventFilter(QObject *object, QEvent *event)
{
    if (object == ui->mListView && event->type() == QEvent::KeyPress) {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
        if (ke->key() == Qt::Key_Escape)
           // special Esc handling here
    }
    else
        return false;
}

在 Qt Designer 中使用自定义小部件非常简单。右键单击 QListView 并选择 Promote to ... 添加一个新类并将其应用于小部件。

http://qt-project.org/doc/qt-4.8/designer-using-custom-widgets.html

关于qt - QListView 的 Esc 键按下事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934964/

相关文章:

python - PyQt - 更新模型时自动刷新自定义 View ?

c++ - 具有最小 OOP 的 Qt 4.0 信号和槽

qt - 使用 QT Designer 在 GUI 中插入图像

c++ - Qt widget 背景从 Linux 到 Windows 不同

c++ - 没有运行时错误不能从网页类继承

c++ - Qt QFrame StyleSheet 在 MainWindow 中不工作

c++ - 具有类似 QLineEdit 背景的 Qt Widget

qml - 如何使用索引访问 ListView 中的委托(delegate)属性

javascript - 为什么添加 Javascript 窗口对象时 Vtable 链接会出现问题?

c++ - 如何让我的 Qt 程序持续向我的 Arduino 发送字符串?