注意:QListWidget添加子Item时,最外层最好设置完整背景颜色,否则移入Item会自带淡蓝色背景
一、QListWidget 中使 QListWidgetItem自适应大小
父部件ListWidgetForm.cpp
void ListWidgetForm::setCard()
{
ui->listStudy->setContentsMargins(0, 0, 0, 0);
ui->listStudy->setSpacing(12);
MessageCardForm *card = new MessageCardForm(this);
QListWidgetItem *newItem = new QListWidgetItem();
newItem->setSizeHint(card->size());
newItem->setFlags(Qt::NoItemFlags);
ui->listStudy->insertItem(0, newItem);
ui->listStudy->addItem(newItem);
ui->listStudy->setItemWidget(newItem, card);
m_card[card] = newItem;
connect(card, &MessageCardForm::sizeChange, this, [=]() {
m_card[card]->setSizeHint(card->size());
});
}
父部件ListWidgetForm.h
private:
QMap<MessageCardForm*, QListWidgetItem*> m_card;
子部件MessageCardForm.cpp
void MessageCardForm::on_btnOpen_clicked()
{
ui->labelLongMessage->setText("百里守约");
this->adjustSize();
emit sizeChange();
}
二、删除一条子Item
void ListWidgetForm::onDeleteCard()
{
MessageCardForm *card = dynamic_cast<MessageCardForm *>(sender());
QListWidgetItem *widItem = m_card[card];
ui->listStudy->removeItemWidget(widItem);
delete widItem;
widItem = nullptr;
QMapIterator<MessageCardForm*, QListWidgetItem*> i(m_card);
while (i.hasNext()) {
i.next();
if (i.key() == card) {
m_card.remove(i.key());
}
}
}
三、清空Item
void ListWidgetForm::clearItem()
{
QMapIterator<MessageCardForm*, QListWidgetItem*> i(m_card);
while (i.hasNext()) {
i.next();
QListWidgetItem* curItem = i.value();
ui->listStudy->removeItemWidget(curItem);
delete curItem;
curItem = nullptr;
m_card.remove(i.key());
}
qDeleteAll(m_card.values());
m_card.clear();
}
在item被删除时,系统也会自动删除销毁自定义子部件,不会造成内存泄漏
四、滚动条显示与隐藏
ui->listStudy->horizontalScrollBar()->hide();
ui->listStudy->verticalScrollBar()->hide();
五、滚动条滚动位置
ui->listStudy->scrollToTop();
ui->listStudy->scrollToBottom();
六、得到滚动条的位置
void InfoNoticeForm::init()
{
connect(ui->listStudy->verticalScrollBar(), SIGNAL(valueChanged(int)),
this,SLOT(onStudyValueChanged(int)));
}
void InfoNoticeForm::onStudyValueChanged(int num)
{
if (ui->listStudy->verticalScrollBar()->minimum() == num) {
qDebug()<<"滚动条最顶部";
}
if (ui->listStudy->verticalScrollBar()->maximum() == num) {
qDebug()<<"滚动条最底部";
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)