gpt4 book ai didi

mysql - QTableWidget 有一个包含可检查项目的列,但我无法将复选框的切换提交给 MYSQL db

转载 作者:行者123 更新时间:2023-11-29 20:58:33 24 4
gpt4 key购买 nike

数据库中的“锁定”列包含 int 值“0”或“2”的项目。在 QTableWidget 中,所有“锁定”项目都显示为复选框及其正确值:...

lockedItem = new QTableWidgetItem(col2);
//...

// Loop ...

if (lockedItem->text() == "0") {
lockedItem->setCheckState(Qt::Unchecked);
} else if (lockedItem->text() == "2") {
lockedItem->setCheckState(Qt::Checked);
}

ui->tableWidget->setItem(i,2,lockedItem);

//...

ui->tableWidget->show();

tableModel = ui->tableWidget->model();

connect(tableModel, SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex & )),
this, SLOT(lockedItemChanged( QModelIndex )));
<小时/>

每当我切换复选框时,就会调用以下插槽:

void MainWindow::lockedItemChanged(QModelIndex itemIndex)
{
int row = itemIndex.row();
int col = itemIndex.column();
QVariant value = ui->tableWidget->item(row, col)->checkState();

ui->tableWidget->item(row,col)->setData(Qt::EditRole, value);

qDebug() << "item changed at: (" << row << "," << col <<")"<< value;
}
<小时/>

在 QtableWidget 中,一切看起来都很好,我看到每个复选框旁边都显示了正确的值。例如,如果我选中“锁定”列中的一个框,则其旁边会显示“2”,如果取消选中,则会显示“0”。但是如何将这些(选中/取消选中或“0”和“2”)更改提交回 MYSQL 数据库?我缺少什么?我认为 setData 应该做到这一点。

最佳答案

您的问题中缺少很多信息。但要回答您在评论中的问题:

QTableWidget,与QTreeWidgetQListWidget相同,自带自己的模型。该内部模型不应该从外部更改,而是您可以使用 QTableWidget 提供的公共(public)函数和信号。


对于简单的数据库交互,像您一样连接到 dataChanged() 信号就足够了。但是当你打电话时

ui->tableWidget->item(row,col)->setData(Qt::EditRole, value);

您基本上使用刚刚检索到的相同数据覆盖模型中的数据。
相反,您应该将更改应用到数据库,如下所示:

myDatabase->updateLockedState(row, col, value);


如果您想在数据库和 GUI 表之间直接映射,您应该子类化 QSqlTableModel (或者创建您自己的 QAbstractItemModel 派生模型,该模型具有 QSqlDatabase 作为成员)并将其设置为 QTableView 的模型。

关于mysql - QTableWidget 有一个包含可检查项目的列,但我无法将复选框的切换提交给 MYSQL db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37424266/

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