一、QT自带的api
QListWidget、QTableWidget、QTreeWidget都有自带的api可以调用,如下示例。但是当自定义一个QScrollArea区域,布局中插入多个item时,就需要自定义滑动位置了。只有你想将QScrollArea滑到最底部才能使用现成的方法。
void QListWidget::scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)
QScrollArea滑到最底部代码
QTimer::singleShot(100, [=]() {
ui->scrollArea->ensureWidgetVisible(w); });
二、自定义
假设创建一个QScrollArea,布局里面插入了多个item,滑动到指定位置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419145351377.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3Jvbmc1MjA=,size_16,color_FFFFFF,t_70)
三、代码
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
QList<int> idList;
idList << 100 << 150 << 200 << 250 << 300 << 350 << 400 << 450
<< 500 << 550 << 600;
QList<ItemForm *> itemList;
for (int i = 0; i < 11 && idList.size() > 10; i++) {
ItemForm *item = new ItemForm();
item->setId(idList[i]);
ui->itemLayout->addWidget(item);
itemList << item;
}
connect(ui->lineEdit, &QLineEdit::textChanged, std::bind(&Form::onTextChanged,
this, itemList));
}
void Form::onTextChanged(QList<ItemForm *> itemList)
{
for (int i = 0; i < itemList.size(); i++) {
if (itemList[i]->getId() == ui->lineEdit->text().toInt()) {
int val = (ui->itemLayout->indexOf(itemList[i])) * itemList[i]->height();
ui->scrollArea->verticalScrollBar()->setSliderPosition(val);
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210419150605510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3Jvbmc1MjA=,size_16,color_FFFFFF,t_70)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)