【QT】——QListWidget的使用

目录

1.QListWidget和QListWidgetItem

2.外观

2.1列表模式

2.2图标模式

3.常用接口

4.示例

删除列表项

添加列表项


1.QListWidget和QListWidgetItem

QListWidget 是qt中的列表框控件,它用于显示多个列表项,列表项对应的类是QListWidgetItem.

QListWidgetItem可以只包含文字

QListWidgetItem中可以同时包含图片和文字

2.外观

列表框控件,支持两种显示模式:列表模式和图标模式。

2.1列表模式

setViewMode(QListView::ListMode);//设置QListWidget为列表模式

 

2.2图标模式

setViewMode(QListView::IconMode);//设置QListWidget为图标模式

 

3.常用接口


//添加列表项
void addItem(const QString &label)
void addItem(QListWidgetItem *item)
void addItems(const QStringList &labels)

//返回鼠标选中的列表项
QListWidgetItem *QListWidget::currentItem() const;
//删除窗口中的item的列表项
void QListWidget::removeItemWidget(QListWidgetItem *item)

//设置列表项中的图片大小
void QAbstractItemView::setIconSize(const QSize &size);
    
//设置列表项中的布局的大小
void QListView::setGridSize(const QSize &size)

信号

//单击列表项
void itemClicked(QListWidgetItem *item)
//双击列表项
void itemDoubleClicked(QListWidgetItem *item)

删除列表项

删除列表项的两种方式:

方式一:
QListWidgetItem* item=ui->lwprovice->currentItem();//获取当前的列表项
ui->lwprovice->removeItemWidget(item);//移除列表项
delete item;//删除列表项
方式二:
int row =ui->lwprovice->currentRow();//获取第一个列表项
QListWidgetItem* item=ui->lwprovice->takeItem(row);
delete item;

4.示例:

ui界面: 

设置 "列表模式" 和 "图标模式" 转换:

//将两个单选按钮存放到QGroupBox容器中
//保证一次只能选中一个按钮
m_checkBut=new QButtonGroup(this);
m_checkBut->addButton(ui->rbListMode,0);
m_checkBut->addButton(ui->rbiconmode,1);

connect(ui->rbListMode,&QCheckBox::clicked,this,&MainWindow::selectMode);
connect(ui->rbiconmode,&QCheckBox::clicked,this,&MainWindow::selectMode);

//槽函数
void MainWindow::selectMode()
{
  int checkedId=m_checkBut->checkedId();
  if(checkedId==0)
  {
      ui->lwprovice->setViewMode(QListView::ListMode);
  }else{
      ui->lwprovice->setViewMode(QListView::IconMode);
  }
}

 

删除列表项

    connect(ui->del_but,&QToolButton::clicked,this,[=](){
#if 0
        QListWidgetItem* item=ui->lwprovice->currentItem();
        ui->lwprovice->removeItemWidget(item);
        delete item;
#else
        int row =ui->lwprovice->currentRow();
        QListWidgetItem* item=ui->lwprovice->takeItem(row);
        delete item;
    });

添加列表项

//图片的路径
QList<QString> paths={":/1",":/2",":/3"};


connect(ui->insert_but,&QToolButton::clicked,this,[=](){
        //获取随机值
        int pos=QRandomGenerator::global()->generate()%3;
        //获取图片的值
        QString name=ui->leInput->text();
        QIcon icon(paths[pos]);//设置图片
        QListWidgetItem* item=new QListWidgetItem(icon,name);
        int row =ui->lwprovice->currentRow();
        ui->lwprovice->insertItem(row+1,item);//将列表 设置 进当前鼠标的后面
 });

//将列表项添加到最后一个位置
   connect(ui->add_but,&QToolButton::clicked,this,[=](){
        qDebug()<<"插入item";
        //插入按钮
        int pos=QRandomGenerator::global()->generate()%3;

        QString name=ui->leInput->text();
        QIcon icon(paths[pos]);//设置图片
        QListWidgetItem* item=new QListWidgetItem(icon,name);
        ui->lwprovice->addItem(item);
    });

所有的代码:

// .h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QButtonGroup>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void selectMode();

private:
    Ui::MainWindow *ui;
    QButtonGroup* m_checkBut;
};

#endif // MAINWINDOW_H








//  .pp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QCheckBox>
#include<QList>
#include<QString>
#include<QRandomGenerator>
#include<QToolButton>
#include<QDebug>
QList<QString> paths={":/1",":/2",":/3"};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_checkBut=new QButtonGroup(this);
    m_checkBut->addButton(ui->rbListMode,0);
    m_checkBut->addButton(ui->rbiconmode,1);
    ui->rbListMode->setEnabled(true);
     ui->lwprovice->setViewMode(QListView::ListMode);

    connect(ui->rbListMode,&QCheckBox::clicked,this,&MainWindow::selectMode);
    connect(ui->rbiconmode,&QCheckBox::clicked,this,&MainWindow::selectMode);

    connect(ui->lwprovice,&QListWidget::itemClicked,this,[=](QListWidgetItem *item)
    {
        //单击列表项
        ui->lineEdit->setText(item->text());
    });

    connect(ui->add_but,&QToolButton::clicked,this,[=](){
        qDebug()<<"插入item";
        //插入按钮
        int pos=QRandomGenerator::global()->generate()%3;

        QString name=ui->leInput->text();
        QIcon icon(paths[pos]);//设置图片
        QListWidgetItem* item=new QListWidgetItem(icon,name);
        ui->lwprovice->addItem(item);
    });

    connect(ui->del_but,&QToolButton::clicked,this,[=](){
#if 0
        QListWidgetItem* item=ui->lwprovice->currentItem();
        ui->lwprovice->removeItemWidget(item);
        delete item;
#else
        int row =ui->lwprovice->currentRow();
        QListWidgetItem* item=ui->lwprovice->takeItem(row);
        delete item;
#endif
    });


    connect(ui->insert_but,&QToolButton::clicked,this,[=](){
        int pos=QRandomGenerator::global()->generate()%3;

        QString name=ui->leInput->text();
        QIcon icon(paths[pos]);//设置图片
        QListWidgetItem* item=new QListWidgetItem(icon,name);
         int row =ui->lwprovice->currentRow();
        ui->lwprovice->insertItem(row+1,item);
    });

}

void MainWindow::selectMode()
{
  int checkedId=m_checkBut->checkedId();
  if(checkedId==0)
  {
      ui->lwprovice->setViewMode(QListView::ListMode);
  }else{
      ui->lwprovice->setViewMode(QListView::IconMode);
  }
}

MainWindow::~MainWindow()
{
    delete ui;
}

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 `QStackedWidget` 和 `QListWidget` 实现界面切换功能。 1. 首先,在 Qt Designer 中创建一个 `QStackedWidget` 和一个 `QListWidget`,将 `QListWidget` 放置在需要显示菜单的位置上,将 `QStackedWidget` 放置在需要显示页面的位置上。 2. 在 `QListWidget` 中添加菜单项,并设置相应的文本和图标。 3. 在 `QStackedWidget` 中添加页面,并设置相应的 UI 界面。 4. 编写槽函数,用于响应 `QListWidget` 中菜单项的点击事件,并切换到相应的页面。 以下是示例代码: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QListWidget, QStackedWidget, QWidget, QVBoxLayout, QLabel, QPushButton class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建 QListWidget 和 QStackedWidget self.list_widget = QListWidget() self.stack_widget = QStackedWidget() # 添加菜单项 self.list_widget.addItem("Page 1") self.list_widget.addItem("Page 2") self.list_widget.addItem("Page 3") # 添加页面 page1 = QWidget() layout1 = QVBoxLayout() label1 = QLabel("This is Page 1") button1 = QPushButton("Go to Page 2") button1.clicked.connect(lambda: self.stack_widget.setCurrentIndex(1)) layout1.addWidget(label1) layout1.addWidget(button1) page1.setLayout(layout1) self.stack_widget.addWidget(page1) page2 = QWidget() layout2 = QVBoxLayout() label2 = QLabel("This is Page 2") button2 = QPushButton("Go to Page 3") button2.clicked.connect(lambda: self.stack_widget.setCurrentIndex(2)) layout2.addWidget(label2) layout2.addWidget(button2) page2.setLayout(layout2) self.stack_widget.addWidget(page2) page3 = QWidget() layout3 = QVBoxLayout() label3 = QLabel("This is Page 3") button3 = QPushButton("Go to Page 1") button3.clicked.connect(lambda: self.stack_widget.setCurrentIndex(0)) layout3.addWidget(label3) layout3.addWidget(button3) page3.setLayout(layout3) self.stack_widget.addWidget(page3) # 设置 QMainWindow 的 centralWidget central_widget = QWidget() central_layout = QHBoxLayout() central_layout.addWidget(self.list_widget) central_layout.addWidget(self.stack_widget) central_widget.setLayout(central_layout) self.setCentralWidget(central_widget) # 连接 QListWidget 和 QStackedWidget self.list_widget.currentRowChanged.connect(self.stack_widget.setCurrentIndex) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在上述示例代码中,我们在 QMainWindow 中添加了一个 `QListWidget` 和一个 `QStackedWidget`,并且在 `QListWidget` 中添加了三个菜单项,在 `QStackedWidget` 中添加了三个页面。我们通过 `setCurrentIndex` 方法切换页面,并且连接了 `currentRowChanged` 信号,以便在 `QListWidget` 中点击菜单项时,自动切换到相应的页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值