我创建了一个简单的 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/