Qt ListWidget内容上下移动(简单实现)

上移操作

实现思路:获取当前选中行信息(内容QString、行号currentRow()),删除当前行,并将获取到的信息在上一行进行添加。

widget.h文件
private:
    Ui::Widget *ui;
    QListWidgetItem * selitem; //新建ListWidgetItem指针
widget.cpp文件
void Widget::on_btn_up_clicked() //单步操作上移
{
    selitem = ui->listWidget->currentItem(); //获取用户当前选中项
    if(selitem!=NULL) //判断非空,否则点击会出错
    {
        int currRow = ui->listWidget->currentRow();//获取当前行号
        QString selstr = selitem->text(); //获取当前行内容
        if(currRow>0) //限制(上移至第0行终止)
        {
            delete ui->listWidget->takeItem(currRow);//删除当前行
            ui->listWidget->insertItem(currRow-1,selstr);//在上一行插入新行,内容为之前选中内容
        }
        ui->listWidget->setCurrentRow(currRow-1);//将上移后的新行选中,实现连续上移
    }
}

下移操作

实现思路与上移大致相同,只不过通过总行数与选中行行数之差判断是否还有下移空间

void Widget::on_btn_down_clicked() //单步操作下移
{ 
    selitem = ui->listWidget->currentItem();
    if(selitem!=NULL)
    {
        int currRow = ui->listWidget->currentRow();
        QString selstr = selitem->text();
        int rowAll = ui->listWidget->count();//获取当前list总行数
        if((rowAll-currRow)>0)//限制(下移至最后一行终止)
        {
            delete  ui->listWidget->takeItem(currRow);
            ui->listWidget->insertItem(currRow+1,selstr);
        }
        ui->listWidget->setCurrentRow(currRow+1);
    }
}

新人第一次发文,希望能帮到有需要朋友,当然欢迎大家在评论区交流分享更简单高效的代码!

你可能感兴趣的:(qt)