如何获取最后插入的项目。
一个例子
QSqlQuery qry;
qry.prepare("SELECT * FROM users");
qry.exec();
while(qry.next()){
ui->listWidget->addItem(qry.value("username").toString());
}
正如您在上一个示例中看到的那样,专线ui->listWidget->addItem(qry.value("username").toString());
此行将每个数据库行添加为qlistwidget中的项目。
我尝试使用以下内容但不起作用。
QSqlQuery qry;
qry.prepare("SELECT * FROM users");
qry.exec();
while(qry.next()){
ui->listWidget->addItem(qry.value("username").toString());
ui->listWidget->currentItem()->setData(Qt::UserRole, qry.value("id").toString());
}
我希望获得最后插入的项目,以便在每个项目上添加setData()
方法。
修改
删除项目时出错。删除之前的项目。
以下代码中存在的问题是什么:
ui->listWidget->takeItem(ui->listWidget->row(ui->listWidget->currentItem()));
QSqlQuery qry;
qry.prepare("DELETE FROM users WHERE id=:id");
qry.bindValue(":id",ui->listWidget->currentItem()->data(Qt::UserRole).toString());
if(qry.exec()){
qDebug()<< "Ok";
}else{
qDebug()<< "Errro";
}
答案 0 :(得分:2)
你可以做下一个(这只是示例)你的代码不起作用因为currentItem()返回用户或程序员选择的项目,但是你没有提供选择,所以这段代码不起作用。
for(int i = 0; i < 10; i++)
{//this code works because
ui->listWidget->addItem(QString::number(i));//here you add item to the end
//here you use last item by count()-1
ui->listWidget->item(ui->listWidget->count()-1)->setData(Qt::UserRole, "id"+QString::number(i));//set data to last item
}
for(int i = 0; i < 10; i++)
{
qDebug() << ui->listWidget->item(i)->data(Qt::UserRole).toString();
}
输出:
"id0"
"id1"
"id2"
"id3"
"id4"
"id5"
"id6"
"id7"
"id8"
"id9"
此代码的工作方式相同,但这是非常糟糕的方法
ui->listWidget->setCurrentItem(ui->listWidget->item(ui->listWidget->count()-1));
ui->listWidget->currentItem()->setData(Qt::UserRole, "id"+QString::number(i));
编辑:
首先,takeItem从小部件中删除项目但不从内存中删除它。因此,如果您不想让内存泄漏,您应该使用delete,例如
delete ui->listWidget->takeItem(ui->listWidget->row(ui->listWidget->currentItem()));
回到你的问题。首先尝试删除数据库中的数据,然后从小部件中删除它。像这样的东西
QSqlQuery qry;
qry.prepare("DELETE FROM users WHERE id=:id");
//qDebug() << ui->listWidget->currentItem()->data(Qt::UserRole).toString();//now you can see id which you want to delete
qry.bindValue(":id",ui->listWidget->currentItem()->data(Qt::UserRole).toString());//make sure that margin id in your app is relly margin id in your database
if(qry.exec()){
qDebug()<< "Ok";
}else{
qDebug()<< "Errro";
}
delete ui->listWidget->takeItem(ui->listWidget->row(ui->listWidget->currentItem()));
答案 1 :(得分:1)
您应该单独创建QListWidgetItem并对其进行操作。
while(qry.next()){
auto *item = new QListWidgetItem(qry.value("username").toString());
item->setData(Qt::UserRole, qry.value("id").toString());
ui->listWidget->addItem(item);
}