【问题标题】:Custom QScrollArea widget自定义 QScrollArea 小部件
【发布时间】:2018-10-03 00:38:57
【问题描述】:

我正在尝试创建一个从 QScrollArea 派生的类,因此我可以在表单编辑器中将 ScrollArea 提升为我的自定义类。 我有这个代码:

#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include "CustomScrollArea.h"

CustomScrollArea::CustomScrollArea(QWidget *parent) :
QScrollArea (parent)
{
    setWidgetResizable( true );

    QWidget *widget = new QWidget();

    QVBoxLayout *layout = new QVBoxLayout();
    widget->setLayout( layout );

    setWidget( widget );

    for (int i = 0; i < 10; i++)
    {
        QPushButton *button = new QPushButton( QString( "%1" ).arg( i ) );
        layout->addWidget( button );
    }
}

我遇到的问题是按钮没有那样显示...

.ui 内容:

...
<widget class="QWidget" name="centralWidget">
   <widget class="CustomScrollArea" name="scrollArea">
    <property name="geometry">
     <rect>
      <x>40</x>
      <y>40</y>
      <width>221</width>
      <height>201</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>219</width>
       <height>199</height>
...

【问题讨论】:

  • _ 按钮没有以这种方式显示_我无法找到证据。您的代码产生:i.stack.imgur.com/O4BeJ.png
  • @scopchanov 我已经重现了这个问题,只有在构造函数内部创建布局时才会发生,如果在此之后执行,则不会产生问题。
  • 也许它只在mac上不起作用...我不知道...我得到一个空的滚动区域,
  • @АлександрЛитвицкий 在我看来这是一个错误,在 linux 中我也有这个问题。
  • @scopchanov 问题是当他们推广它时,请阅读我的回答。

标签: c++ qt qt5 qscrollarea


【解决方案1】:

问题不是由您显示的代码引起的,而是由 Qt Designer 引起的,Qt Designer 设置了在 QScrollArea 中设置的默认 scrollAreaWidgetContents 替换以前的小部件。

 ...
 <widget class="CustomScrollArea" 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>380</width>
     <height>215</height>
    </rect>
   </property>
  </widget>
 </widget>
 ...

因此解决方案是手动删除这些行,使用支持 XML 的编辑器打开 .ui 并进行编辑,获得以下内容:

 ...
 <widget class="CustomScrollArea" name="scrollArea">
  <property name="widgetResizable">
   <bool>true</bool>
  </property>
 </widget>
 ...

然后保存更改并编译。

【讨论】:

  • 我是表单编辑器的忠实粉丝,但由于这些事情我已经停止使用它。不管怎样,你给了一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2012-04-14
  • 1970-01-01
  • 2015-07-27
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多