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

标签 mysql qt sql-update qtablewidget qtablewidgetitem

数据库中的“锁定”列包含 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/

相关文章:

Mysql更新字段内容

mysql - 从数据库中获取每日销售额

c++ - Qt 5.5绘制填充饼图

mysql - 截断分区后索引的命运

c++ - 限制 qpainter 在像素图上的绘制

c++ - Qt:当QPointer改变时发出信号

hadoop - 更新配置单元中新添加的列

ms-access - Access DB 查询 - 需要帮助更新某些记录

php - CSV 文件生成错误

php - Laravel 显示来自 2 个表的数据