QListWidget类提供了一个基于项目的列表小部件。
QListWidget是一个方便的类,它提供了一个类似于QListView提供的列表视图,但是具有一个经典的基于项目的接口,用于添加和删除项目。QListWidget使用一个内部模型来管理列表中的每个QListWidgetItem。
对于更灵活的列表视图小部件,使用带有标准模型的QListView类。
那么对于该控件的功能该如何使用呢?
2:插入文本
//插入一条数据
QString qsContent = QStringLiteral("插入一条数据内容")
QListWidgetItem *item = new QListWidgetItem
item->setText(qsContent)
ui.listWidget->addItem(item)
3:插入自定义控件
假设,有一个QCustomWidget自定义widget需要放入QListWidget控件中,该如何使用呢?
QListWidgetItem *item = new QListWidgetItem;
QCustomWidget *customWidget = new QCustomWidget(this);
customWidget->show();
ui.listWidget->addItem(item);
ui.listWidget->setItemWidget(item, customWidget);
问:假设需要点击每个自定义的widget时,响应消息做不同的处理,那么该如何操作呢?
答:我们每往QlistWidget中插入一条自定义信息时,必须要对插入的指针做消息处理
QCustomWidget *customWidget = new QCustomWidget(this);
connect(cutomWidget, &QCustomWidget::Msg_SendCustomInfor, this, &QMyWidget::MsgReceivedCustomInfor);
customWidget->show();
这种方式就会实现每点击一个自定义的item就会触发不同的槽函数。
问:每次插入的自定义widget都响应同一个消息,能分清楚是哪个new出来的widget的触发的吗?
答:这个问题我再刚开始使用的时候也出现过这种情况,那么我们该如何分清楚不同对象触发同一个响应函数呢?
我们在将自定义widget插入到QListWidget中时,需要用一个容器存储创建的自定义指针
std::vector<QCustomWidget*> m_vetWidet;
每在QListWidget中存储一条数据时,就需要在容器中存储new出来的内容
虽然每个QCustomWidget的响应函数都触发:MsgReceivedCustomInfor
但是我们可以在该函数中获取当前正在触发的类指针,怎么样的写法呢?
QCustomWidget* widget = qobject_case<QCustomWidget*>(sender())
当前widget就是当前触发的类指针,我们可以在存储的vector中匹配出对应的类指针,做实际操作。
4:文本对齐方式
该方式只适用于插入文本操作
QString qsContent = QStringLiteral("插入一条数据内容")
QListWidgetItem *item = new QListWidgetItem
item->setText(qsContent)
/*以下是重点!!!*/
item->setTextAlignment(Qt::AlignLeft|Qt::AlignVenter)
ui.listWidget->addItem(item)
5:添加复选框
在QListWidget控件中有两种添加复选框的方式
第一种:使用内部API实现
QString qsContent = QStringLiteral("插入一条数据内容");
QListWidgetItem *item = new QListWidgetItem;
item->setText(qsContent);
item->setTextAlignment(Qt::AlignLeft|Qt::AlignVenter);
item->setCheckState(Qt::Unchecked);
ui.listWidget->addItem(item);
其中,主要的方法是:setCheckState
问:那么,如何获取选中的效果呢?
答:使用QListWidget::itemPressed消息进行处理
优点:快捷方便获取
缺点:无法对内部的QCheckBox进行风格设置
第二种:嵌入QCheckBox控件
QString qsContent = QStringLiteral("插入一条数据内容")
QListWidgetItem *item = new QListWidgetItem
QCheckBox *check = new QCheckBox(qsContent, ui.listWidget)
check->show()
ui.listWidget->addItem(item)
ui.listWidget->setItemWidget(item, check)
上述代码中,需要注意的是:必须先进行addItem,再setItemWidget。否则无法显示文本内容。
优点:可以任意修改checkbox的风格。
缺点:当点击到空白区域时,无法响应QListWidget的消息。因为该条目内被QCheckBox包围,只能对QCheckBox消息处理。
到这里对于QListWidget基本使用已经总结完成了,一般项目中,也是只用到了这些而已,如果还有更为复杂的问题,可以留言告诉我哟~
我是中国好公民st,一名C++程序猿~