【QT笔记】使用QScrollArea实现多行文本样式显示

发布于:2025-02-10 ⋅ 阅读:(51) ⋅ 点赞:(0)

目录

一、QScrollArea 的基本概念

二、demo代码

 三、实现效果

1、页面空间足够,无滚动条时显示效果

2、有滚动条时显示效果


一、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();
}

 三、实现效果

1、页面空间足够,无滚动条时显示效果

2、有滚动条时显示效果


网站公告

今日签到

点亮在社区的每一天
去签到