禁用时无法选择 QAbstractItemView 项目

发布于 2025-01-05 12:40:12 字数 102 浏览 0 评论 0原文

当我将 QAbstractItemModel 的标志设置为可选择但未启用时,我无法通过鼠标单击来选择项目。然而, select() 函数在内部选择对象。 这是qt bug,还是我做错了什么?

When I set flags of QAbstractItemModel selectable but not enabled, I can't select items by mouse click. However internally select() function selects objects.
Is this qt bug, or I do something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦年海沫深 2025-01-12 12:40:12

据我了解,您想要“禁用”该项目,但同时能够选择它。在模型上伪造这一点相当容易。

if ( role == Qt::BackgroundRole ){
    return QVariant(QApplication::palette()->color(QPalette::Inactive, QPalette::Window );
}

这会将您的项目显示为灰色,但您仍然可以选择它。

From what I understood, you want to "Disable" the item, but at the same time, be able to select it. it's fairly easy to fake that on the model.

if ( role == Qt::BackgroundRole ){
    return QVariant(QApplication::palette()->color(QPalette::Inactive, QPalette::Window );
}

This will paint your item as grayed out, and you will still be able to select it.

ぇ气 2025-01-12 12:40:12

你做错了什么。如果您禁用某个小部件,它将显示为灰色,并且不会接收用户鼠标单击和键盘输入。

You're doing something wrong. If you disable a widget it is greyed out and it doesn't receive user mouse clicks and keyboard input.

木森分化 2025-01-12 12:40:12

我刚刚遇到了类似的问题(我需要复制禁用的项目)。这是为禁用项目设置正确样式的解决方案(不忽略任何样式表)。

为您的模型创建自定义项目委托。

/// Returns false only if item needs to be rendered as disabled.
bool isIndexEnabled(const QModelIndex &index)
{
    // Implement this function.
}

class ItemDelegate : public QStyledItemDelegate {
public:
    explicit ItemDelegate(QObject *parent = nullptr)
        : QStyledItemDelegate(parent) {}

protected:
    void initStyleOption(
        QStyleOptionItemView *option, const QModelIndex &index) const override
    {
        QStyledItemDelegate::initStyleOption(option, index);
        if (!isIndexEnabled(index))
            option->state &= ~QStyle::State_Enabled;
    }
};

将新项目委托设置为您的模型。

auto itemDelegate = new ItemDelegate(model)
model->setItemDelegate(itemDelegate);

I just had similar problem (I need to copy disabled items). Here is solution that sets correct style for disabled items (without ignoring any style sheets).

Create custom item delegate for your model.

/// Returns false only if item needs to be rendered as disabled.
bool isIndexEnabled(const QModelIndex &index)
{
    // Implement this function.
}

class ItemDelegate : public QStyledItemDelegate {
public:
    explicit ItemDelegate(QObject *parent = nullptr)
        : QStyledItemDelegate(parent) {}

protected:
    void initStyleOption(
        QStyleOptionItemView *option, const QModelIndex &index) const override
    {
        QStyledItemDelegate::initStyleOption(option, index);
        if (!isIndexEnabled(index))
            option->state &= ~QStyle::State_Enabled;
    }
};

Set the new item delegate to your model.

auto itemDelegate = new ItemDelegate(model)
model->setItemDelegate(itemDelegate);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文