目录
一、QScrollArea 的基本概念
QScrollArea 是 Qt 框架中用于提供一个滚动条区域,允许用户滚动查看比当前可视区域更大的内容的控件。它本身不直接显示内容,而是将内容(通常是一个QWidget或其子类)作为其子项,并通过滚动条来访问这些内容的全部。QScrollArea支持水平和垂直滚动,并且可以根据需要自动调整滚动条的出现。
二、demo代码
#include "mainwindow.h"
#include <QApplication>
#include <QObject>
#include <QGroupBox>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QScrollArea>
#include <QLabel>
#include <QTextCodec>
#include <QColor>
#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QWidget *pGroupBox = new QWidget(&w);
QScrollArea* pSCrollArea = new QScrollArea(&w);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(new QLabel(QObject::tr("这是固定文本")));
layout->addStretch();
pGroupBox->setLayout(layout);
layout->insertWidget(1, new QLabel(QObject::tr("这是第一行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第二行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第三行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第四行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第五行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第六行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第七行")));
layout->insertWidget(1, new QLabel(QObject::tr("这是第八行文本:文字会很长很长很长很长很长很长很长很长很长很长很长很长")));
QString htmlContent = "测试文本<font color='blue'>%1</font> 是一个蓝色文字。<font color='red'>%2</font>";
QString text = htmlContent.arg("示例文本").arg("红色文本");
QLabel* pText = new QLabel;
pText->setTextFormat(Qt::RichText);
pText->setText(text);
layout->insertWidget(1, pText);
layout->setSpacing(20); // 控件之间间距
layout->setContentsMargins(16,16,16,16);
pSCrollArea->setWidgetResizable(true); // 设置滚动区大小
pSCrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
pSCrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
pSCrollArea->setWidget(pGroupBox);
pSCrollArea->setStyleSheet("QWidget{"
" background:#FFFFFF;"
"}"
"QScrollBar{"
" border:none;"
" background:#FFFFFF;"
" margin: 0px,0px,0px,0px;"
"}"
"QScrollBar:vertical {"
" width: 8px;"
"}"
"QScrollBar:horizontal {"
" height: 8px;"
"}"
"QScrollBar::handle{"
" background: #D9D9D9;"
" border-radius:4px;"
" margin: 0px 0px;"
"}"
"QScrollBar::add-line,QScrollBar::sub-line {"
" height: 0px;"
"}"
"QScrollBar::add-page,QScrollBar::sub-page {"
" background:#FFFFFF;"
"}"
"QScrollBar::handle:hover {"
" background: #D9D9D9;"
" border-radius:4px;"
"}");
w.setCentralWidget(pSCrollArea);
w.setWindowTitle("文本显示demo");
w.setMinimumSize(50,50);
w.show();
return a.exec();
}