2

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

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

是否有另一个信号发出或我可以用来实现它的方法?

谢谢!

4

1 回答 1

6

在主 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

于 2013-09-21T20:13:16.143 回答