我正在尝试调整QComboBox的用户界面,以便用户可以从下拉列表中删除项目(无需先选择它们)。
背景是我正在使用QComboBox指示当前打开了哪个数据文件。我还将它用作最近打开的文件的缓存。我希望用户能够删除他不想再列出的条目。这可以通过仅按Delete键,上下文菜单或任何易于实现的方法来实现。我不想先选择项目。在Firefox中可以找到类似的行为,其中可以删除条目字段的旧缓存建议。
我当时正在考虑将QComboBox使用的 ListView 进行子类化,但是,我找不到足够的文档来入门。
如有任何提示和建议,我将不胜感激。我正在使用PyQt,但C++示例没有问题。
最佳答案
我使用了installEventFilter文档中的代码解决了这个问题。
//must be in a header, otherwise moc gets confused with missing vtable
class DeleteHighlightedItemWhenShiftDelPressedEventFilter : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
bool DeleteHighlightedItemWhenShiftDelPressedEventFilter::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key::Key_Delete && keyEvent->modifiers() == Qt::ShiftModifier)
{
auto combobox = dynamic_cast<QComboBox *>(obj);
if (combobox){
combobox->removeItem(combobox->currentIndex());
return true;
}
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
myQComboBox->installEventFilter(new DeleteHighlightedItemWhenShiftDelPressedEventFilter);
关于qt - 从ui中从QComboBox删除项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17820947/