【问题标题】:Esc key press event for QListViewQListView 的 Esc 按键事件
【发布时间】:2013-09-21 16:31:12
【问题描述】:

我创建了一个简单的QListView 添加了一个QStringListModel,允许添加项目并编辑其文本。但我不想允许添加空字段,我通过使用模型中的 dataChanged 信号部分实现了这一点添加文本。

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

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

谢谢!

【问题讨论】:

    标签: qt qt4 qt5 signals-slots qlistview


    【解决方案1】:

    在您的主 GUI 类中使用 event filters

    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 并选择提升到 ... 添加一个新类并将其应用到小部件。

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

    【讨论】:

    • 你确定列表视图是接收按键事件的对象吗?当用户编辑列表视图项时,有一个行编辑小部件来处理用户输入,那么该编辑器可能也处理关键事件吗?
    • 嗯,这可能是真的,我从未使用过 QListView。但是如果这不起作用,我认为没有其他方法可以做到...但是,在 Qt Designer 中使用自定义小部件很简单,我将其添加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多