如何知道QListWidgetItem是否被滚动隐藏?

时间:2012-01-24 18:28:00

标签: qt qlistwidget qscrollarea

好吧,我是Qt的新手,我有一个问题。

我的UI中有一个包含7个项目的QListWidget,只显示了4个项目,另一个在使用滚动条后显示。我想在QListWidet上方和下方显示一个箭头图像,而不是显示比滚动更多的项目。

好的,我可以查看项目是否被隐藏,但是它是否被setHidden()函数隐藏。它何时被滚动隐藏?我能在运行时看到这个吗?因为该项目在那里,但滚动隐藏它,对吗?

我在这里搜索了一些关于此的帖子,但我没有找到。对不起我的英语,也许会感到困惑,但如果有人可以帮助我......

非常感谢!

1 个答案:

答案 0 :(得分:0)

所以这是如何做到这一点的基本例子。首先是MainWindow类的列表 实现:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

{

ui->setupUi(this);

QListWidget *listW = new QListWidget;
//Add some items
for(int i = 0; i < 20; i++) {
    QListWidgetItem *item = new QListWidgetItem("Item" + QString::number(i));
    listW->addItem(item);
}

listW->setVerticalScrollMode(QAbstractItemView::ScrollPerItem);
listW->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
//Set reimplemented scroll bar
listW->setVerticalScrollBar(new ScrollBar);
setCentralWidget(listW);

}

从代码中可以看出,我已将滚动条策略设置为Qt :: ScrollBarAsNeeded。通过这样做,我们可以利用这样一个事实,即我们现在可以对滚动条中的显示/隐藏事件做出反应。这里是QScrollBar的重新实现:

ScrollBar::ScrollBar(QWidget *parent) :
QScrollBar(parent)
{
}


void ScrollBar::hideEvent(QHideEvent *e) 
{
  emit showTip(false);
}


void ScrollBar::showEvent(QShowEvent *e) 
{
  emit showTip(true);
}

现在您可以将ScrollBar中的showTip(bool)信号连接到绘制图像的插槽。