将QScrollArea设置为Qt中的中央窗口小部件

时间:2014-06-11 15:09:38

标签: c++ qt

在Qt中我删除了xml编辑器中的中央窗口小部件,并将其替换为QScrollArea,这在我在QtDesigner中预览时有效:

enter image description here

但是当我运行该程序时,它看起来像这样:

enter image description here

您是不是要删除中央窗口小部件,还是我需要更改sizePolicy

这是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>179</width>
    <height>191</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QScrollArea" name="scrollArea">
   <property name="widgetResizable">
    <bool>true</bool>
   </property>
   <widget class="QWidget" name="scrollAreaWidgetContents">
    <property name="geometry">
     <rect>
      <x>0</x>
      <y>0</y>
      <width>224</width>
      <height>628</height>
     </rect>
    </property>
    <layout class="QHBoxLayout" name="horizontalLayout_2">
     <item>
      <widget class="QLabel" name="label">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="font">
        <font>
         <pointsize>75</pointsize>
        </font>
       </property>
       <property name="midLineWidth">
        <number>2</number>
       </property>
       <property name="text">
        <string>label

</string>
       </property>
       <property name="alignment">
        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
       </property>
      </widget>
     </item>
    </layout>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>179</width>
     <height>19</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="1.qrc"/>
 </resources>
 <connections/>
</ui>

2 个答案:

答案 0 :(得分:2)

检查ui_mainwindow.h。看看是否有像这样的行:

MainWindow->setCentralWidget(scrollArea);

您可以在mainwindow.cpp中使用QMainWindow::setCentralWidget功能将中央窗口小部件设置为主窗口:

setCentralWidget(myScrollArea);

我认为没有任何方法可以改变设计师的中心部件。

答案 1 :(得分:1)

当我使用你的ui文件内容运行程序时,我正在获得正确的窗口。我不知道为什么它不会像你一样创造问题。

我建议你在Qt Creator中使用Qt设计器,我感觉更容易使用。

另外,我认为问题可能是其中之一:

  1. 通常,中央窗口小部件很好,因为它提供了放置所有布局的基础。因此,最好将它放在用户界面中。

    在这里,请注意在将小部件插入布局后,您不必简单地破坏这些布局。设计师将重置小部件的宽度和高度。所以你必须重新设置它们。

  2. 接下来,如果设计器中加载的ui文件在磁盘上更改时不是最新的,则可能发生这种情况。

    跟踪小部件的所有布局,几何和sizePolicy。 我将无法在代码中回答,因为当我使用你给出的ui文件内容时,它不会引起问题。

  3. 在主窗口上创建一个布局,您可以在其中放置QScrollArea。这将根据布局扩展它。

  4. P.S。:我在Qt Creator中打开它。

    因此,当您手动设置scrollarea的几何图形时,请提供更多信息是否已修复。