代码之家  ›  专栏  ›  技术社区  ›  Jacob Krieg

QListView的Esc键按下事件

  •  2
  • Jacob Krieg  · 技术社区  · 11 年前

    我创建了一个简单的 QListView 添加了一个 QStringListModel 允许添加项目并编辑其文本。但我不想允许添加空字段,我通过使用 dataChanged 如果列表项在没有插入文本的情况下失去焦点,或者用户按下 Enter 键,而不添加文本。

    但是,如果您按下 Esc 键,该字段保持为空并且没有 数据已更改 发出信号。如果字段为空而没有重载 Q列表视图 类,这将是乏味的(我使用设计器来创建表单)?

    是否有其他信号被发出,或者我可以使用什么方法来实现这一点?

    谢谢

    1 回复  |  直到 11 年前
        1
  •  6
  •   headsvk    11 年前

    使用 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