gpt4 book ai didi

c++ - 将 TableView 中的 CheckBox 选中状态绑定(bind)到自定义模型属性

转载 作者:行者123 更新时间:2023-11-28 00:22:27 24 4
gpt4 key购买 nike

我有一个 QML 应用程序,其中包含一个具有两列的 TableView。其中之一是 CheckBox。现在我创建了一个从 QAbstractTableModel 派生的模型。读取普通文本列的数据已经有效,但如何将我的 CheckBox 的选中属性与模型同步?

目前我什至无法通过模型对其进行检查。您可以在下面找到相关代码。

enter image description here

表格模型.cpp

TableModel::TableModel(QObject *parent) :
QAbstractTableModel(parent)
{
list.append("test1");
list.append("test2");
}

int TableModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return list.count();
}

int TableModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 2;
}

QVariant TableModel::data(const QModelIndex & index, int role) const {

if (index.row() < 0 || index.row() >= list.count())
return QVariant();

if (role == NameRole)
return list[index.row()]

else if (role== EnabledRole){
//list is not QList<QString>, its a custom class saving a String and a boolean for the checked state
return list[index.row()].isEnabled();
}
else {
return QVariant();
}
}

QHash<int, QByteArray> TableModel::roleNames() const {
QHash<int, QByteArray> roles;
roles[NameRole] = "name";
roles[EnabledRole] = "enabled";
return roles;
}

表格模型.hpp

class TableModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum Roles {
NameRole = Qt::UserRole + 1,
EnabledRole
};

explicit TableModel(QObject *parent = 0);

int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex & parent = QModelIndex()) const;
Q_INVOKABLE QVariant data (const QModelIndex & index, int role) const;

protected:
QHash<int, QByteArray> roleNames() const;
private:
QList<QString> list;

主.qml

TableView {

id: Table
model: TableModel

TableViewColumn {
role: "name"
}

TableViewColumn {
role: "enabled"
delegate: CheckBox {
//how to get the right state from the model
//checked: ??
}
}
}

主要.cpp

QQmlApplicationEngine engine;
QQmlContext * context = new QQmlContext(engine.rootContext());

TableModel tableModel;
context->setContextProperty("tableModel",&tableModel);

QQmlComponent component(&engine, QUrl("qrc:///main.qml"));
QQuickWindow * window = qobject_cast<QQuickWindow*>(component.create(context));
window->show();

最佳答案

单击复选框时,您可以从 qml 发出信号;将这个信号连接到你的模型插槽并做一些事情

主.qml

TableView {
id: table
objectName: "myTable"
signal checkedChanged(int index, bool cheked)
TableViewColumn {
role: "enabled"
delegate: CheckBox {
onClicked: table.checkedChanged(styleData.row, checked);
}
}

主要.cpp

QQuickItem *obj = engine.rootObjects().at(0)->findChild<QQuickItem*>(QStringLiteral("myTable"));
QObject::connect(obj,SIGNAL(checkedChanged(int,bool)),tableModel,SLOT(mySlot(int,bool)));

关于c++ - 将 TableView 中的 CheckBox 选中状态绑定(bind)到自定义模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820490/

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