gpt4 book ai didi

c++ - QTableView 中的 Qt 复选框

转载 作者:搜寻专家 更新时间:2023-10-31 01:36:38 26 4
gpt4 key购买 nike

我正在使用这段代码查询 sqlite 并将结果放在 QTableView 中。

//MainWindow.cpp
void MainWindow::on_pushButton_clicked()
{
QSqlQueryModel * modal=new QSqlQueryModel();
connOpen();
QSqlQuery* qry=new QSqlQuery(mydb);

qry->prepare("select * from database");
qry->exec();

modal->setQuery(*qry);

//from stack
modal->insertColumn(0);

ui->tableView->setModel(modal);

//from stack
ui->tableView->resizeColumnsToContents();

int p;
for(p=0; p<modal->rowCount(); p++)
{
ui->tableView->setIndexWidget(modal->index(p,0),new QCheckBox());
}

connClose();
qDebug() <<(modal->rowCount());
}

我看过几个用于向列中添加复选框的 Web 示例,但我不太确定在我的简单示例中使用什么。

  • answer建议几行看起来不标准。
  • 还有更多像this这样的例子和 this one这似乎概述了我的需要,但不清楚您将代码放在哪里。

我打算做的是让第 1 列可检查。在下一个 btn 按下时,如果选中这些数据行,则会将其写入文件。

我仍然需要了解如何遍历所选数据,或者我可能需要获取选中行的 ID 并执行另一个查询。

问题:

  • 如何向 QTableView 添加 1 列可编辑复选框?
  • 如何循环遍历 QTableView 数据中的值,以便可以访问选中行的值?
  • 如何检查全部/全部?

最佳答案

我认为拥有一列可检查单元格的最佳方法是创建您的项目模型,例如通过子类化 QSqlQueryModel。您必须重新实现 flags() 方法以使单元格可检查。

您还需要重新实现 data() 方法以返回检查状态和 setData() 方法并设置检查状态。您必须实现自己的逻辑来跟踪每一行的检查状态(例如,使用 Qt::CheckState 数组,您必须在模型数据更改时对其进行初始化和调整大小)。

你可以从这样的事情开始:

class MyModel : public QSqlQueryModel
{
public:

Qt::ItemFlags flags(const QModelIndex & index) const
{
if(index.column() == 0)
return QSqlQueryModel::flags(index) | Qt::ItemIsUserCheckable;
return QSqlQueryModel::flags(index);
}

QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const
{
if(index.column() == 0 && role == Qt::CheckStateRole)
{
//implement your logic to return the check state
//....
}
else
return QSqlQueryModel::data(index, role);
}

bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole)
{
if(index.column() == 0 && role == Qt::CheckStateRole)
{
//implement your logic to set the check state
//....
}
else
QSqlQueryModel::setData(index, value, role);
}
};

还有:

关于c++ - QTableView 中的 Qt 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35305801/

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