我创建了一个简单的QListView
添加了一个允许添加项目和编辑其文本的QStringListModel
。但是我不想允许添加空字段,我通过使用模型的dataChanged
信号部分实现了这一点,如果列表项在没有插入文本的情况下失去焦点或用户按Enter
键而不添加文本,则会发出该信号。
但是,如果按Esc
键,该字段将保持为空,并且不会发出dataChanged
信号。如果字段留空而不重载QListView
类,我如何获得通知,这将很乏味(我使用设计器创建表单)?
是否有其他信号发射或我可以用来实现它的方法?
谢谢!
在主 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设计器中使用自定义小部件很简单。右键单击 QListView 并选择提升到...在那里添加一个新类并将其应用于小部件。
http://qt-project.org/doc/qt-4.8/designer-using-custom-widgets.html