前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QListWidget「建议收藏」

QListWidget「建议收藏」

作者头像
全栈程序员站长
发布2022-08-18 16:55:28
1.3K0
发布2022-08-18 16:55:28
举报

大家好,又见面了,我是你们的朋友全栈君。

QListWidget

我们要介绍的第一个是QListWidget。先来看下面的代码示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

label = new QLabel ( this ) ; label -> setFixedWidth ( 70 ) ; listWidget = new QListWidget ( this ) ; new QListWidgetItem ( QIcon ( “:/Chrome.png” ) , tr ( “Chrome” ) , listWidget ) ; new QListWidgetItem ( QIcon ( “:/Firefox.png” ) , tr ( “Firefox” ) , listWidget ) ; listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/IE.png” ) , tr ( “IE” ) ) ) ; listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/Netscape.png” ) , tr ( “Netscape” ) ) ) ; listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/Opera.png” ) , tr ( “Opera” ) ) ) ; listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/Safari.png” ) , tr ( “Safari” ) ) ) ; listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/TheWorld.png” ) , tr ( “TheWorld” ) ) ) ; listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/Traveler.png” ) , tr ( “Traveler” ) ) ) ; QListWidgetItem * newItem = new QListWidgetItem ; newItem -> setIcon ( QIcon ( “:/Maxthon.png” ) ) ; newItem -> setText ( tr ( “Maxthon” ) ) ; listWidget -> insertItem ( 3 , newItem ) ;//在第3行插入一项 item 可谓为一个listviewitem对象 或者string QHBoxLayout * layout = new QHBoxLayout ; layout -> addWidget ( label ) ; layout -> addWidget ( listWidget ) ; setLayout ( layout ) ; connect ( listWidget , SIGNAL ( currentTextChanged ( QString ) ) , label , SLOT ( setText ( QString ) ) ) ;

QListWidget是简单的列表组件。当我们不需要复杂的列表时,可以选择QListWidgetQListWidget中可以添加QListWidgetItem类型作为列表项,QListWidgetItem即可以有文本,也可以有图标。上面的代码显示了三种向列表中添加列表项的方法(实际是两种,后两种其实是一样的),我们的列表组件是listWidget,那么,向listWidget添加列表项可以:第一,使用下面的语句

1

new QListWidgetItem ( QIcon ( “:/Chrome.png” ) , tr ( “Chrome” ) , listWidget ) ;

第二,使用

1 2 3 4 5 6

listWidget -> addItem ( new QListWidgetItem ( QIcon ( “:/IE.png” ) , tr ( “IE” ) ) ) ; // 或者 QListWidgetItem * newItem = new QListWidgetItem ; newItem -> setIcon ( QIcon ( “:/Maxthon.png” ) ) ; newItem -> setText ( tr ( “Maxthon” ) ) ; listWidget -> insertItem ( 3 , newItem ) ;

注意这两种添加方式的区别:第一种需要在构造时设置所要添加到的QListWidget对象;第二种方法不需要这样设置,而是要调用addItem()或者insertItem()自行添加。如果你仔细查阅QListWidgetItem的构造函数,会发现有一个默认的type参数。该参数有两个合法值:QListWidgetItem::Type(默认)和QListWidgetItem::UserType。如果我们继承QListWidgetItem,可以设置该参数,作为我们子类的一种区别,以便能够在QListWidget区别处理不同子类。

我们可以利用QListWidget发出的各种信号来判断是哪个列表项被选择,具体细节可以参考文档。另外,我们也可以改变列表的显示方式。前面的列表是小图标显示,我们也可以更改为图标显示,只要添加一行语句:

1

listWidget -> setViewMode ( QListView :: IconMode ) ;

====================分割线==============================

QListWidget

分类: QT开发

QListWidget qt Qt QT

listWidget = QListWidget() #实例化一个(item base)的列表

listWidget.addItem(‘dd’) #添加一个项

listWidget.addItems([]) # 从序列中添加子项

listWidget.setDragEnabled(True) #设置拖拉

listWidget.sortItems() #排序

listWidget.selectAll()全选

listWidget.setSortingEnabled(bool) #设置自动排序

listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) #设置选择模式

选择模式有:ExtendedSelection 按住ctrl多选, SingleSelection 单选 MultiSelection 点击多选 ContiguousSelection 鼠标拖拉多选

listWidget.setCurrentRow(0) 设置当前选择行默认为-1

listWidget.count() #得到子项总数

listWidget.item(row).text() #得到第 row 行的内容 listWidget.item(row) 返回一个item 对象

listWidget.takeItem(row) #返回row 行的所在的item 对象 可以用在 insertItem()中

listWidget.insertItem(2,item) #在第二行插入一项 item 可谓为一个listviewitem对象 或者string

listWidget.setCurrentItem(‘dd’) #设置’dd’为当前项

listWidget.selectedItems() 返回一个包含item对象 的list 对象

修改item 的内容

item.setText(‘dsds’) # 设置item的内容为dsds item为对象 可从 listWidget.item(row) takeItem(row) 得到

将listwidget里的列表横向显示:

setViewMode ()的参数为QListView::IconMode,若为QListView::ListMode,则是一行一行的显示。并且IconMode,列表是可以拖动的,ListMode列表是不能拖动的,如果不想让列表拖动,可以设置setMovement(QListView::Static);

添加item:

//listWidget显示 QListWidgetItem *newItem = new QListWidgetItem; newItem->setIcon(fileIcon->icon(fi)); newItem->setText(fi.fileName()); newItem->setData(Qt::UserRole, fi.absoluteFilePath()); m_listWidget->addItem(newItem);

删除item:

  m_listWidget->removeItemWidget(item);   delete item; //必须加上这一句,不然删除不了

QListWidget中IconMode和ListMode的差别

在使用ListMode的时候,你无法通过 ListWidgetItem->setSizeHint(QSize(155,41)); 这种方式修改Item的宽度 需要使用IconMode才可以通过setSizeHint函数修改Item的宽度。

QListView是基于Model,而QListWidget是基于Item。这是它们的本质区别。

往QListView中添加条目需借助QAbstractListModel:

如:

MainWindow::MainWindow(QWidget*parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QStringListModel* slm=new QStringListModel(this); QStringList* sl=new QStringList(); sl->append(“asdfsadfsa“); sl->append(“asdfsadfsa“); sl->append(“asdfsadfsa“); slm->setStringList(*sl); ui->listView->setModel(slm); delete sl; }

而在QListWidget中添加条目可以直接additem

如:

QListWidget list; list.setViewMode(QListView::IconMode );//使用图标显示方式 list.setResizeMode(QListView::Adjust);//设置QListView大小改变时,图标的调整模式,默认是固定的,但可以改成自动调整: list.setMovement(QListView::Static);//设置图标可不可以移动,默认是可移动的,但可以改成静态的: for(int i =0; i < 100 ; i ++){ QListWidgetItem *item = new QListWidgetItem(&list); QStyle::StandardPixmap sp = (QStyle::StandardPixmap)(i % 57);

item->setData(Qt::DecorationRole, qApp->style()->standardPixmap(sp).scaled(QSize(16,16), Qt::KeepAspectRatio, Qt::SmoothTransformation) ); item->setData(Qt::DisplayRole,QObject::tr(“Item %1”).arg(i)); }

=======================分割线-QT学习之路=======================

QListWidget「建议收藏」
QListWidget「建议收藏」

我们还可以设置viewModel这个参数,来确定使用不同的视图进行显示。比如,我们使用下面的语句:

list->setViewMode(QListView::IconMode);

再来看看程序界面吧!

QListWidget「建议收藏」
QListWidget「建议收藏」

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134765.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QListWidget
  • QListWidget
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档