QT C ++ Scroll Проблемы - PullRequest
       3

QT C ++ Scroll Проблемы

0 голосов
/ 30 сентября 2019

У меня проблема с блокировкой содержимого виджета в области прокрутки. Я думаю, что лучший способ описать это в прилагаемых фотографиях. Изображение 'a' - это нормальная операция без области прокрутки Изображение 'b' - это когда я пытаюсь добавить область прокрутки в виджет. Область прокрутки появляется, но текст не содержится внутри.

Область прокрутки - это отдельная отдельная сущность с содержимым, появляющимся от нее.

Это код, который я поместилв моем виджете:

    QScrollArea *scrollArea = new QScrollArea;
    scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    scrollArea->setVisible(true);
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    scrollArea->setWidget(this);
    scrollArea->setGeometry(680, 250, 560, 440);
    scrollArea->setBackgroundRole(QPalette::Light);

Есть идеи?

Изображение a:

enter image description here

Изображение b:

enter image description here

Вот вызов пользовательского дочернего виджета из основного графического интерфейса:

subalerPane = new subalertsPane(mstrWnd);
        subalerPane->setObjectName(subalertspane_params._name);
        subalerPane->setGeometry(QRect(subalertspane_params._x, subalertspane_params._y, subalertspane_params._w, subalertspane_params._h));
        subalerPane->setPixmaps(QPixmap(subalertspane_params._normalImageDm), QPixmap(subalertspane_params._normalImageNm), QPixmap(subalertspane_params._minimisedImageDm), QPixmap(subalertspane_params._minimisedImageNm));
        subalerPane->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        subalerPane->setAttribute(Qt::WA_TranslucentBackground);
        subalerPane->setState(subalertspane_params._defaultState);
        subalerPane->setUIMode(subalertspane_params._defaultUIMode);
        subalerPane->setVisible(true);
        subalerPane->raise();

Вот файл cpp subalertsPane:

subalertsPane::subalertsPane(QWidget *parent) :QLabel(parent)
{   
    subalertsPane::state=bsNormal;                                              
subalertsPane::pressable=true;                                              
subalertsPane::uiMode=bdnDay;                                               

    connect(this, SIGNAL(clicked()), this, SLOT(slotClicked()));        
    connect(this, SIGNAL(released()), this, SLOT(slotReleased()));      

    statbutts[0] = new statusButton(this);
    statbutts[1] = new statusButton(this);
    statbutts[2] = new statusButton(this);
    statbutts[3] = new statusButton(this);
    statbutts[4] = new statusButton(this);
    statbutts[5] = new statusButton(this);
    statbutts[6] = new statusButton(this);
    statbutts[7] = new statusButton(this);
    statbutts[8] = new statusButton(this);
    statbutts[9] = new statusButton(this);
    statbutts[10] = new statusButton(this);


    for (int i = 0; i < 11; i++)
    {
        statbutts[i]->fadeIn();
        statbutts[i]->setVisible(false);
    }

    QScrollArea *scrollArea = new QScrollArea;
    scrollArea->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);


    scrollArea->setVisible(true);
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    scrollArea->setWidget(this);
    scrollArea->setGeometry(680, 250, 560, 440);
    scrollArea->setBackgroundRole(QPalette::Light);

}

1 Ответ

1 голос
/ 30 сентября 2019

QScrollArea::setWidget() используется для установки виджета внутри области прокрутки с содержимым. Пример: если вы хотите QLabel с текстом внутри области прокрутки - scrollArea-> setWidget (qLabel);Затем добавьте область прокрутки к макету вида

  auto *scrollArea = new QScrollArea(this);
  scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
  scrollArea->setWidgetResizable(true);

  auto *buttonsWidget = new QGroupBox(scrollArea);
  scrollArea->setWidget(buttonsWidget);
  auto *comboboxesLayout = new QVBoxLayout();
  buttonsWidget->setLayout(comboboxesLayout);

 mainLayout->addWidget(scrollArea);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...