Пользовательский виджет QScrollArea - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать класс, производный от 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>
...

1 Ответ

0 голосов
/ 03 октября 2018

Проблема не в показанном вами коде, а в Qt Designer, Qt Designer устанавливает значение по умолчанию scrollAreaWidgetContents, которое устанавливается в QScrollArea, заменяя предыдущий виджет.

enter image description here

 ...
 <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>
 ...

Поэтому решение состоит в том, чтобы вручную удалить эти строки, открыть .ui с помощью редактора, поддерживающего XML, и выполнить это редактирование, получив следующее:

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

Затем сохранитеизменения и компиляция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...