IscanderChe
Маусым 18, 2020, 7:45 Т.Қ.

Залить цветом QScrollArea

День добрый.

Пытаюсь залить QScrollArea белым цветом. Делаю это следующим образом:

widget.h

  1. class Widget : public QWidget
  2. {
  3. Q_OBJECT
  4.  
  5. public:
  6. Widget(QWidget* parent = nullptr);
  7. ~Widget();
  8.  
  9. private:
  10. QWidget* m_widget;
  11. QScrollArea* m_scrollArea;
  12. QGroupBox* m_groupe;
  13. QVBoxLayout* m_layout;
  14. QVBoxLayout* m_mainLayout;
  15. };

widget.cpp

  1. Widget::Widget(QWidget* parent)
  2. : QWidget(parent)
  3. {
  4. m_widget = new QWidget(this);
  5.  
  6. QPalette palette = m_widget->palette();
  7. palette.setColor(QPalette::Background, Qt::white);
  8. m_widget->setAutoFillBackground(true);
  9. m_widget->setPalette(palette);
  10.  
  11. m_scrollArea = new QScrollArea(this);
  12. m_scrollArea->setWidget(m_widget);
  13. m_groupe = new QGroupBox(tr("Виджет"), this);
  14. m_layout = new QVBoxLayout;
  15. m_mainLayout = new QVBoxLayout;
  16. m_layout->addWidget(m_scrollArea);
  17. m_groupe->setLayout(m_layout);
  18. m_mainLayout->addWidget(m_groupe);
  19. setLayout(m_mainLayout);
  20.  
  21. resize(200, 200);
  22. }

Если не использовать QScrollArea, окрашенный в белый цвет виджет m_widget виден, с QScrollArea - белый виджет пропадает куда-то... Но а) m_widget нужен, поскольку планирую менять его на нужный в зависимости от вставляемого с помощью drag and drop контента и б) QScrollArea тоже необходим, чтобы была видна рамка.

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

7
S
  • Маусым 18, 2020, 9:30 Т.Қ.
  • (өңделген)
  • Жауап шешім ретінде белгіленді.

Если тебе нужна рамка, разве не проще использовать QFrame, так и рамки из коробки менять можно
.
.
.

    IscanderChe
    • Маусым 18, 2020, 9:57 Т.Қ.

    Сделал так:

    1. m_frame = new QFrame(this);
    2. m_frame->setLineWidth(2);
    3. m_frame->setMidLineWidth(1);

    Рамка не показывается. Что не так?

      IscanderChe
      • Маусым 18, 2020, 10:03 Т.Қ.

      Разобрался. Забыл m_frame->setFrameShape(QFrame::Box) поставить.
      Спасибо!

        IscanderChe
        • Маусым 18, 2020, 10:17 Т.Қ.

        Теперь новая засада: ставлю setContentMargins(0, 0, 0, 0), и рамка исчезает. А мне надо, чтобы вижет заподлицо с рамкой был, а не на расстоянии.

          S
          • Маусым 19, 2020, 1:19 Т.Ж.
          • (өңделген)

          Возможно, виджет перекрывает фрейм, нужно просто поправить z-index

          Попробуй QWidget:: stackUnder() / raise() / lover()

            IscanderChe
            • Маусым 19, 2020, 2:09 Т.Ж.

            Никакого эффекта.

              IscanderChe
              • Маусым 19, 2020, 2:32 Т.Қ.

              Так получилось:

              1. Widget::Widget(QWidget* parent)
              2. : QWidget(parent)
              3. {
              4. m_widget = new QWidget(this);
              5.  
              6. QPalette palette = m_widget->palette();
              7. palette.setColor(QPalette::Background, Qt::white);
              8. m_widget->setAutoFillBackground(true);
              9. m_widget->setPalette(palette);
              10.  
              11. m_widgetLayout = new QVBoxLayout;
              12. m_widgetLayout->setContentsMargins(0, 0, 0, 0);
              13. m_widgetLayout->addWidget(m_widget);
              14. m_frame = new QFrame(this);
              15. m_frame->setLineWidth(1);
              16. m_frame->setMidLineWidth(0);
              17. m_frame->setFrameShape(QFrame::Box);
              18. m_frame->setLayout(m_widgetLayout);
              19. m_frameLayout = new QVBoxLayout;
              20. m_frameLayout->addWidget(m_frame);
              21. m_groupe = new QGroupBox(tr("Виджет"), this);
              22. m_groupe->setLayout(m_frameLayout);
              23. m_mainLayout = new QVBoxLayout;
              24. m_mainLayout->addWidget(m_groupe);
              25.  
              26. setLayout(m_mainLayout);
              27.  
              28. resize(200, 200);
              29. }

                Пікірлер

                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                Кіріңіз немесе Тіркеліңіз