目录
问题:QListWidget添加widget部件后,当最后一个半隐藏半不隐藏的时候,我们点选后在隐藏会无缘无故多出来一行
问题:QListWidget添加widget部件后,当最后一个半隐藏半不隐藏的时候,我们点选后在隐藏会无缘无故多出来一行
导致原因:在QListWidget::itemPressed里面处理了,如果我们在这里再隐藏当前窗口,在显示会导致布局错乱,不隐藏点选可以看到步骤是当前QListWidget的Slider会全显当前所选的Item,再处理的。
方法一
解决办法:让当前QListWidget的Slider滚动到所选的Item就可以了
int nPressed = ui.facilitylistWidget->currentRow();
QListWidgetItem* itemBottom = ui.facilitylistWidget->item(nPressed);
ui.facilitylistWidget->scrollToItem(itemBottom, QAbstractItemView::PositionAtCenter);
方法二
int nPressed = ui.facilitylistWidget->currentRow();
QScrollBar* m_pCameraBar = ui.facilitylistWidget->verticalScrollBar();
m_pCameraBar->setValue(nPressed);
补充点知识
需求:有时候我们需要根据鼠标滑动过去,来获取当前item的id
方法一
1.先设置追踪鼠标位置(否则下面消息不会响应)
ui.facilitylistWidget->setMouseTracking(true);
2.添加鼠标滑过消息
connect(ui.facilitylistWidget, &QListWidget::itemEntered, this, [=](QListWidgetItem* item) {
int nenter = ui.facilitylistWidget->row(item);}
);
方法二
在QT中,可以通过QListWidget的itemAt()函数来获取当前鼠标位置下的item。具体步骤如下:
1.在QT Designer中将QLisWidget的mouseMoveEvent信号与一个槽函数连接起来。例如,将mouselMoveEvent信号连接到名为on_mouseMloveEvent的槽函数。
⒉在代码中实现on_mouseMoveEvent槽函数。该函数的参数是QMouseEvent指针,可以通过该指针获取当前鼠标位置。例如:
void MainWindow::on_mouseMoveEvent(QMouseEvent *event)
{
QPoint pos = event->pos();
QListWidgetItem *item = ui->listWidget->itemAt(pos);
if (item != nullptr) {
int index = ui->listWidget->row(item);
qDebug() << "Mouse is over item " << index;
}
}
其中,ul->lstWidget是您的QListWdgel对象,pos()函数可以获取当前鼠标位置。,itemAt()函数可以获取当前鼠标位置下的item,row()函教可以获取指定item的索引。
删除操作
1.ui.FileListWg->setContextMenuPolicy(Qt::CustomContextMenu);
2.connect(ui.FileListWg, &QListWidget::customContextMenuRequested, this, &CNWFileDlg::ProvideContextMenu);
3.
void CNWFileDlg::ProvideContextMenu(const QPoint& pos)
{
QPoint item = ui.FileListWg->mapToGlobal(pos);
QMenu submenu;
submenu.addAction("ADD");
submenu.addAction("Delete");
QAction* rightClickItem = submenu.exec(item);
if (rightClickItem && rightClickItem->text().contains("Delete"))
{
ui.FileListWg->takeItem(ui.FileListWg->indexAt(pos).row());
}
}