QListWidget是列表框控件,它是通过QListWidgetItem列表项来进行操作,我们的增删改操作也是围绕着它来开展。
需要注意的是:删除操作,需要先断开QListWidget的信号和槽连接,否则会程序崩溃。
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
ui->lineEditList->setText(item->text());//单击操作
}
void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
QMessageBox::information(this,tr("双击提示"),"双击操作:"+item->text());
}
void MainWindow::on_BtnAdd_clicked()
{
if(ui->lineEditList->text().isEmpty())
{
QMessageBox::information(this,tr("提示"),tr("请输入一个城市名后再添加"));
return;
}
QListWidgetItem *item =new QListWidgetItem(QIcon(":/icon/image/2.ico"),ui->lineEditList->text());
ui->listWidget->addItem(item);
}
void MainWindow::on_BtnEdit_clicked()
{
QListWidgetItem *curitem=ui->listWidget->currentItem();//获取当前列表项
if(curitem==Q_NULLPTR)
{
QMessageBox::information(this,tr("提示"),tr("请在列表里选中一个城市名后再编辑"));
return;
}
if(ui->lineEditList->text().isEmpty())
{
QMessageBox::information(this,tr("提示"),tr("请输入一个城市名后再编辑"));
return;
}
curitem->setText(ui->lineEditList->text());
}
void MainWindow::on_BtnDel_clicked()
{
QListWidgetItem *curitem=ui->listWidget->currentItem();//获取当前列表项
if(curitem==Q_NULLPTR)
{
QMessageBox::information(this,tr("提示"),tr("请在列表里选中一个城市名后再删除"));
return;
}
//QListWidget的删除和清空操作之前,要调用disconnect函数把链接上的信号和槽解除链接,否则程序会崩溃
ui->listWidget->disconnect();
int irow=ui->listWidget->row(curitem);//获取该列表项的行号
QListWidgetItem *item=ui->listWidget->takeItem(irow);//删除该列表项
delete item;//手工再释放该列表项占用的资源
}
void MainWindow::on_BtnClear_clicked()
{
//QListWidget的删除和清空操作之前,要调用disconnect函数把链接上的信号和槽解除链接,否则程序会崩溃
ui->listWidget->disconnect();
ui->listWidget->clear();//如下两种清空方法
/*
while(1)
{
QListWidgetItem *item=ui->listWidget->takeItem(0);
if(item!=Q_NULLPTR)
delete item;
else
break;
}
*/
}