gpt4 book ai didi

c++ - 仅禁用 QTreeWidget 中的一项

转载 作者:太空狗 更新时间:2023-10-29 21:40:32 29 4
gpt4 key购买 nike

我有一个可以有很多行但只有 3 列的 QTreeWidget:

enter image description here

在图片中我选择了我的最后一列。我想做的是禁用树中每个项目的最后一列,除非它被选中。所以在我的情况下,只有 pidtest.xml 项目会启用复选框。我不知道如何使用现有方法执行此操作。我愿意提供所有帮助!

最佳答案

这里有一个关于如何做到这一点的完整工作示例。

正如 Pavel Strakhov 所指出的,该示例使用了 QTreeView , 因为 QTreeWidgetItem不支持“部分禁用”。

在示例中,显示了一个 TreeView,显示 2 列(名称,已启用)。仅当第二列为真时,您才能编辑第一列。

There is no implementation in the example for changing the values, you will have to add the setData function to the model to do that.

完整示例:

#include <QtWidgets/QApplication>
#include <QTreeView>
#include <QAbstractTableModel>
#include <QString>
#include <QVariant>
#include <QList>

typedef struct entry_{
entry_(const QString &n, bool e) : name(n), enabled(e) {}
QString name; bool enabled;
} table_entry_t;

class SimpleModel : public QAbstractTableModel
{
public:
SimpleModel(QWidget *parent = nullptr) : QAbstractTableModel(parent)
{
m_entries = {
{"Jhon Doe", false},
{"Jhon Doe Jr.", true}
};
}

QVariant data(const QModelIndex &index, int role) const {
switch (role) {
case Qt::DisplayRole:
table_entry_t entry = m_entries[index.row()];
if (index.column() == 0)
return QVariant(entry.name);
if (index.column() == 1)
return QVariant(entry.enabled);
}
return QVariant();
}

Qt::ItemFlags flags(const QModelIndex &index) const {
Qt::ItemFlags flags = QAbstractTableModel::flags(index);
if (!m_entries[index.row()].enabled && index.column() == 0)
flags ^ Qt::ItemIsEnabled;
else
flags |= Qt::ItemIsEditable;
return flags;
}

int rowCount(const QModelIndex &parent /* = QModelIndex() */) const {Q_UNUSED(parent); return static_cast<int>(m_entries.size());}
int columnCount(const QModelIndex &parent /* = QModelIndex() */) const {Q_UNUSED(parent); return 2; }

private:
QList<table_entry_t> m_entries;
};


int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTreeView tree;
SimpleModel *model = new SimpleModel();
tree.setModel(model);
tree.show();
return a.exec();
}

关于c++ - 仅禁用 QTreeWidget 中的一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893345/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com