我正在尝试将一些自定义小部件垂直对齐到scrolledArea中。一些研究引导我制作QVboxLayout,在其中添加QScrollArea。 我尝试了,但我没有设法以适当的方式做到这一点。
我发现有些人使用两个QVboxLayout和Widget级别,例如在这些页面上: http://www.linuxforums.org/forum/programming-scripting/155452-solved-using-qt-scroll-area.html http://kunalmaemo.blogspot.fr/2010/07/scrolling-in-custom-widget-using.html 我不明白为什么,但我也试过。
我也读过这个并试过,但仍然无效: QScrollArea missing Scrollbar
我必须做错事但我不知道是什么。有时我的小部件不会滚动并且只是扁平化,有时小部件根本不会出现,但永远不会成功显示单个滚动区域。这是我目前的代码版本(我认为已经简化了):
MainWIndowImp.h
class MainWindowImp : public QMainWindow, public Ui_MainWindow
{
Q_OBJECT
public :
MainWindowImp() ;
~MainWindowImp() ;
//more
public slots :
//some stuff
private
std::vector<SliderFloat*> _sliders ; //custom widget, works fine
}
ui_mainwindow.h
class Ui_MainWindow
{
public:
QWidget *centralwidget;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
centralwidget = new QWidget(MainWindow);
_slider_GB = new QGroupBox(centralwidget);
_slider_GB->setObjectName(QString::fromUtf8("_slider_GB"));
_slider_GB->setGeometry(QRect(630, 10, 351, 351));
_mainScrollArea = new QScrollArea(_slider_GB);
_mainScrollArea->setObjectName(QString::fromUtf8("_mainScrollArea"));
_mainScrollArea->setGeometry(QRect(10, 40, 331, 301));
_mainScrollArea->setWidgetResizable(true);
scrollAreaWidgetContents = new QWidget();
scrollAreaWidgetContents->setObjectName(QString::fromUtf8("scrollAreaWidgetContents"));
scrollAreaWidgetContents->setGeometry(QRect(0, 0, 329, 299));
_mainScrollArea->setWidget(scrollAreaWidgetContents);
}
}
MainWindowImp.cpp
MainWindowImp::MainWindowImp()
{
setupUi(this)
}
void MainWindowImp::updateSliders()
{
QVBoxLayout *mainLayout = new QVBoxLayout(this) ;
mainLayout->addWidget(_mainScrollArea);
QWidget *contents = new QWidget ;
QVBoxLayout *layout = new QVBoxLayout(contents) ;
for(uint32_t i=0;i<_approx->latentVariables().cols();++i)
{
layout->addWidget(_sliders[i]) ;
}
layout->setSizeConstraint(QLayout::SetMinimumSize);
_mainScrollArea->setWidget(contents);
}
请注意,我使用了QtDesigner作为GUI,我只需在其中设置QScrollArea _mainScrollArea,它会自动设置QWidget scrollAreaWidgetContents并将其设置为QScrollArea。也许我的问题来自它?
感谢您的回复
编辑:
这里是mainwindow.ui文件(删除了很多不相关的东西):
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1002</width>
<height>524</height>
</rect>
</property>
<property name="windowTitle">
<string>Main Window</string>
</property>
<widget class="QWidget" name="centralwidget">
<property name="minimumSize">
<size>
<width>981</width>
<height>0</height>
</size>
</property>
<widget class="MyGLViewer" name="_qglv" native="true">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>125</width>
<height>100</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>800</width>
<height>600</height>
</size>
</property>
<property name="mouseTracking">
<bool>false</bool>
</property>
</widget>
<widget class="QGroupBox" name="_slider_GB">
<property name="geometry">
<rect>
<x>630</x>
<y>10</y>
<width>351</width>
<height>351</height>
</rect>
</property>
<property name="title">
<string>Coordinates</string>
</property>
<widget class="QScrollArea" name="_mainScrollArea">
<property name="geometry">
<rect>
<x>10</x>
<y>40</y>
<width>331</width>
<height>301</height>
</rect>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>329</width>
<height>299</height>
</rect>
</property>
</widget>
</widget>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1002</width>
<height>29</height>
</rect>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>MyGLViewer</class>
<extends>QWidget</extends>
<header>myglviewer.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>