首页 > 解决方案 > QT C++ 滚动问题

问题描述

我在将小部件的内容锁定到滚动区域时遇到问题。我认为最好的描述方式是在所附的图片中。图片“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);

有任何想法吗?

图一:

在此处输入图像描述

图片 b:

在此处输入图像描述

这是从主 GUI 对自定义子小部件的调用:

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();

这是 subalertsPane cpp 文件:

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);

}

标签: c++qt

解决方案


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);

推荐阅读