qt - 从 ui 中删除 QComboBox 中的项目

标签 qt pyqt qcombobox

我试图以一种用户可以从下拉列表中删除项目(无需先选择它们)的方式调整 QComboBox 的用户界面。

背景是我正在使用 QComboBox 来指示当前打开了哪个数据文件。我还将它用作最近打开文件的缓存。我希望用户能够删除他不想再列出的条目。这可以通过点击删除键、上下文菜单或任何易于实现的方式来实现。我不想依赖于先选择项目。在 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/

相关文章:

python - 名称错误 : name 'QFileDialog' is not defined

python - 文件对话框不适用于 PyQt5?

python - 如何使用 CSV 文件中的元素填充 QComboBox

python - 从组合框中选择数据位

c++ - QTableView 如何判断 Row 是否被选中?

c++ - QWebSocket "Unknown Error"

python - 右键单击 QTreeView 内的 QHeaderView

qt - QCompleter 自定义完成规则

c++ - QQuickView 内容未正确调整大小

c++ - Qt:如何制作可点击路径以在点击时运行视频文件