如何获取最近在qlistwidget中添加的行 [英] How can fetch the row which has been recently added in the qlistwidget

查看:1161
本文介绍了如何获取最近在qlistwidget中添加的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何获取最后插入的项目。

How to fetch the last inserted item.

示例

QSqlQuery qry;
qry.prepare("SELECT * FROM users");
qry.exec();
while(qry.next()){
   ui->listWidget->addItem(qry.value("username").toString());
}
As you seen in the previous example specifically this line ui->listWidget->addItem(qry.value("username").toString());

每个数据库行都作为qlistwidget中的一个项。

This line to add every database row in as an item in qlistwidget.

我尝试使用以下但不起作用。

I have tried to use the following but does not work .

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());
}

我想获取最后一个插入的项目,应用<​​code

I want to get last inserted item, to apply the setData() method, on each item was added.

编辑

Edit

删除项目时出现错误。删除之前的项目。

I have an error, when delete an item Deletes the item that before.

以下代码中的问题是什么:

What is the problem in the following code:

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";
}


推荐答案

只是示例)您的代码不工作,因为currentItem()返回由用户或程序员选择的项目,但是您不提供选择,所以此代码不工作。

You can do next (it is just example) Your code doesn't work because currentItem() return item selected by user or by programmer, but you don't provide selection, so this code doesn't work.

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" 

此代码的工作原理相同,但它是非常糟糕的方法。

This code works identical but it is really bad approach

ui->listWidget->setCurrentItem(ui->listWidget->item(ui->listWidget->count()-1));
ui->listWidget->currentItem()->setData(Qt::UserRole, "id"+QString::number(i));

编辑:

从窗口小部件中删除项目,但不会从内存中删除它。所以如果你不想得到内存泄漏你应该使用delete,gor example

First of all takeItem remove item from widget but doesn't delete it from memory. So if you don't want get memory leak you should use delete, gor example

delete ui->listWidget->takeItem(ui->listWidget->row(ui->listWidget->currentItem()));

回到您的问题。尝试首先删除数据库中的数据,然后从窗口小部件中删除它。类似这样的

Back to your problem. Try firstly delete data in database and after that delete it from widget. Something like this

    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()));

这篇关于如何获取最近在qlistwidget中添加的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆