C++ 在Qt中滚动隐藏的QWidget

C++ 在Qt中滚动隐藏的QWidget,c++,qt,C++,Qt,我有一个QWidget,有时可以隐藏它。此QWidget处理导致此小部件滚动的外部事件。问题是:当这个小部件被隐藏时,就不会执行滚动。简化示例: QWidget* scrollPanel = new QWidget(parent); scrollPanel->setGeometry(0, 0, 100, 100); scrollPanel->setStyleSheet("background: blue"); QWidget* item = new QWidget(scrollPan

我有一个
QWidget
,有时可以隐藏它。此
QWidget
处理导致此小部件滚动的外部事件。问题是:当这个小部件被隐藏时,就不会执行滚动。简化示例:

QWidget* scrollPanel = new QWidget(parent);
scrollPanel->setGeometry(0, 0, 100, 100);
scrollPanel->setStyleSheet("background: blue");
QWidget* item = new QWidget(scrollPanel);
item->setGeometry(20, 20, 20, 20);
item->setStyleSheet("background: white");

// ... hide or show scrollPanel

scrollPanel->scroll(0, -20);
如果
parent
被隐藏或
scrollPanel
被隐藏,则
scrollPanel->scroll(0,-20)什么也不做。如果所有内容都可见,则
scrollPanel->scroll(0,-20)按预期工作:

scrollPanel->show();
scrollPanel->scroll(0, -20); //works


所以,如果
QWidget
是隐藏的,有没有办法滚动它?

你可以在滚动前后尝试一个显示/隐藏循环。查看源代码,在
的开头有一个可见的
复选框::滚动
函数,它从
QWidgetPrivate
调用
scroll\u sys
,这是通过其他方式无法访问的,所以很遗憾,答案是否定的。你不能通过覆盖paintEvent而不绘制任何内容来“隐藏”它吗?
scrollPanel->hide();
scrollPanel->scroll(0, -20); //does not work