向列表中添加数据:共有三种方式

Python tablewidget添加按钮后又消失 tablewidget添加数据_Qt

1、void QListWidget::addItem(const QString & label):直接向列表中添加文本信息;

QListWidget *listWidget = new QListWidget(this);
    listWidget->addItem("床前明月光");
    listWidget->addItem("疑是地上霜");
    listWidget->addItem("举头望明月");
    listWidget->addItem("低头思故乡");
    listWidget->setGeometry(20, 10, 100, 100);

 效果:

Python tablewidget添加按钮后又消失 tablewidget添加数据_Qt_02

2、void QListWidget::addItem(QListWidgetItem * item):向列表中添加  QListWidgetItem 对象;

// 创建一个列表对象
    QListWidget *listWidget = new QListWidget(this);
    listWidget->setGeometry(10, 10, this->width() - 20, this->height() - 20);
    
    // 创建一个列表项对象
    QListWidgetItem *item = new QListWidgetItem(listWidget);
    item->setText("床前明月光");                 // 设置文本信息
    
    item->setBackgroundColor(QColor(Qt::red));  // 设置背景颜色
    
    QBrush brush;
    brush.setColor(QColor(Qt::green));  // 设置画刷的颜色
    brush.setStyle(Qt::CrossPattern);   // 设置画刷的样式
    brush.setTextureImage(QImage(":/Image/Luffy.png")); // 设置画刷的背景图片
    item->setBackground(brush);         // 为列表项设置背景画刷
    
    // 注意:setBackgroundColor 和 setBackground 都可以用来设置背景,后设置的会覆盖掉先设置的;
    
    item->setCheckState(Qt::Checked);   // 设置默认为选中状态(列表项前面会自动添加一个 checkbox)
    
    item->setFont(QFont("宋体", 25));    // 设置字体
    
    // 注意:setForeground 和 setTextColor 都可以用来设置前景,后设置的会覆盖掉先设置的
    item->setForeground(QBrush(QColor(Qt::white), Qt::CrossPattern)); // 设置前景画刷
    item->setTextColor(QColor(Qt::blue));   // 设置文本颜色
    
    item->setTextAlignment(Qt::AlignCenter); // 设置居中对齐
    
    item->setHidden(false); // 设置是否隐藏(如果是 true ,就会隐藏)
    
    item->setIcon(QIcon(":/Image/OnePiece.png"));  // 设置图标
    
    item->setSelected(true);    // 设置默认选中该条列表项
    
    // 设置列表项的大小(设置宽度好像没有效果,只有高度起作用)
    item->setSizeHint(QSize(20, 50)); 
    
    // 将列表项添加到列表中
    listWidget->addItem(item);

效果:

Python tablewidget添加按钮后又消失 tablewidget添加数据_字符串_03

3、void QListWidget::addItems(const QStringList & labels):向列表中添加字符串集合

// 创建一个列表对象
    QListWidget *listWidget = new QListWidget(this);
    listWidget->setGeometry(10, 10, this->width() - 20, this->height() - 20);
    
    // 创建一个字符串集合
    QStringList list;
    list << "床前明月光" << "疑是地上霜" << "举头望明月" << "低头思故乡" ;
    
    // 将集合数据添加到列表中
    listWidget->addItems(list);

效果:

Python tablewidget添加按钮后又消失 tablewidget添加数据_字符串_04


向列表中插入数据:也有三种方式

Python tablewidget添加按钮后又消失 tablewidget添加数据_Qt_05

// 创建一个列表对象
    QListWidget *listWidget = new QListWidget(this);
    listWidget->setGeometry(10, 10, this->width() - 20, this->height() - 20);

    // 创建一个字体对象    
    QFont font;
    font.setBold(true);
    font.setFamily("宋体");
    font.setPointSize(22);
    
    // 创建一个列表项对象
    QListWidgetItem *item = new QListWidgetItem(listWidget);
    item->setText("静夜思");
    item->setFont(font);
    item->setTextAlignment(Qt::AlignCenter);

    QListWidgetItem *item2 = new QListWidgetItem(listWidget);
    item2->setText("李白");
    item2->setFont(QFont("宋体", 18));
    item2->setTextAlignment(Qt::AlignCenter);
    
    // 向列表中插入数据
    listWidget->insertItem(0, item);
    listWidget->insertItem(1, item2);
    listWidget->insertItems(2, QStringList() << "床前明月光," << "疑是地上霜;" 
                            << "举头望明月," << "低头思故乡.");
    
    listWidget->setFont(QFont("宋体", 25)); // 设置列表字体
    listWidget->item(2)->setTextAlignment(Qt::AlignCenter); // 设置文本居中
    listWidget->item(3)->setTextAlignment(Qt::AlignCenter);
    listWidget->item(4)->setTextAlignment(Qt::AlignCenter);
    listWidget->item(5)->setTextAlignment(Qt::AlignCenter);
    
    // listWidget->count():获取列表项的数量
    for (int i = 0; i < listWidget->count(); i++)
    {
        // 背景色隔行改变
        if (i % 2 == 0)
        {
            listWidget->item(i)->setBackgroundColor(QColor(241, 214, 231));
        }
        else if (i % 2 == 1)
        {
            listWidget->item(i)->setBackgroundColor(QColor(82, 247, 247));
        }
    }

效果:

Python tablewidget添加按钮后又消失 tablewidget添加数据_List_06


删除当前选中的项:

// 点击列表时,删除当前选中的项
    connect(listWidget, &QListWidget::clicked, [=](){
        // 获取当前选中的行
        qDebug() << listWidget->currentRow();
        
        // 获取当前选中的项
        QListWidgetItem *item = listWidget->currentItem();
        qDebug() << item->text().toUtf8().data();
        if (QMessageBox::question(this, "系统提示", "是否删除当前项?") == QMessageBox::Yes)
        {
            // takeItem():删除列表中的指定行,并返回该行的 QListWidgetItem 对象;否则返回 0;
            // 但是该方法从列表中删除的项不会由 Qt 管理,需要手动删除。
            QListWidgetItem *delItem = listWidget->takeItem(listWidget->currentRow());
            listWidget->removeItemWidget(delItem);
        }
        
        qDebug() << listWidget->count();
    });

双击当前选中的项,进行修改:

// 双击列表时,可以对当前选中的项进行编辑
    connect(listWidget, &QListWidget::doubleClicked, [=](){
        // 获取当前选中的行
        qDebug() << listWidget->currentRow();
        
        // 获取当前选中的项
        QListWidgetItem *item = listWidget->currentItem();
        qDebug() << item->text().toUtf8().data();
        
        // 设置 item 允许编辑
        item->setFlags(item->flags() | Qt::ItemIsEditable);
    });

    // 当列表项发生改变时,触发的信号(参数为当前发生更改的项)
    connect(listWidget, &QListWidget::itemChanged, [=](QListWidgetItem * item){
        qDebug() << "修改后的值:" << item->text().toUtf8().data();
    });