1.qt 滚动控件简单举例
在Qt中,滚动控件通常是通过QScrollArea
来实现的。以下是一个简单的例子,展示了如何使用QScrollArea
来创建一个滚动控件:
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QScrollArea>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个主窗口部件
QWidget *mainWindow = new QWidget;
QVBoxLayout *layout = new QVBoxLayout;
// 创建一个滚动区域
QScrollArea *scrollArea = new QScrollArea;
QWidget *scrollWidget = new QWidget; // 创建一个内部部件来放置按钮
scrollArea->setWidget(scrollWidget); // 将内部部件设置为滚动区域的widget
scrollArea->setWidgetResizable(true); // 允许滚动区域的widget根据内容调整大小
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 水平滚动条始终关闭
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); // 垂直滚动条按需显示
// 创建一个垂直布局来放置按钮,并将其设置为内部部件的布局
QVBoxLayout *scrollLayout = new QVBoxLayout(scrollWidget);
// 添加多个按钮到滚动区域的内部部件中
for (int i = 0; i < 20; ++i) {
QPushButton *button = new QPushButton(QString("Button %1").arg(i + 1));
scrollLayout->addWidget(button);
}
// 将滚动区域添加到主窗口的布局中
layout->addWidget(scrollArea);
mainWindow->setLayout(layout);
mainWindow->show();
return app.exec();
}
在这个例子中,我们首先创建了一个QScrollArea
对象,并为其设置了一个内部部件(scrollWidget
)。然后,我们在内部部件上创建了一个垂直布局(scrollLayout
),并向其中添加了20个按钮。最后,我们将滚动区域添加到主窗口的布局中,并显示主窗口。
这个例子展示了如何使用QScrollArea
来创建一个简单的滚动控件,其中包含多个按钮。当用户添加足够多的内容以使窗口无法完全显示时,滚动条会自动出现,允许用户滚动查看所有内容。
2.测试过程记录
要点
// 禁止 QScrollArea 自动调整大小以适应内容
scrollArea->setWidgetResizable(false);
// 设置QLabel的最小大小限制,以确保其可以扩展
//label->setMinimumSize(400, 800);
期初我在ui中直接拖进去一个控件,比scrollArea大,结果不出现滚动窗口,我用上面的两种情况,或者添加布局,都不出现,最终确认直接拖进去无效,用代码设置的好用,原因目前不确定,这只是一个实验结果。
实验1
#include <QApplication>
#include <QWidget>
#include <QScrollArea>
#include <QLabel>
#include <QVBoxLayout>
int main2(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *mainWindow = new QWidget;
//QVBoxLayout *mainLayout = new QVBoxLayout(mainWindow);
QScrollArea *scrollArea = new QScrollArea(mainWindow);
QLabel *label = new QLabel(mainWindow);
// 设置QLabel的内容,使其足够大以触发滚动条
label->setText("A very long text that should trigger scrollbars...");
//label->resize(400,800);
// 设置QLabel的最小大小限制,以确保其可以扩展
//label->setMinimumSize(400, 800);
// 将QLabel添加到QScrollArea中
scrollArea->setWidget(label);
// 禁止QScrollArea自动调整大小以适应内容
scrollArea->setWidgetResizable(false);
// 将QScrollArea添加到主布局中
//mainLayout->addWidget(scrollArea);
scrollArea->resize(300, 300);
scrollArea->move(50, 50);
mainWindow->resize(400, 400);
label->resize(400,800);
mainWindow->show();
return app.exec();
}
实验2
#include <QApplication>
#include <QWidget>
#include <QScrollArea>
#include <QLabel>
int main3(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *mainWindow = new QWidget;
QScrollArea *scrollArea = new QScrollArea(mainWindow);
QLabel *label = new QLabel;
// 设置 QLabel 的内容
label->setText("A very long text that should trigger scrollbars...");
// 手动设置 QLabel 的大小,确保内容足够大以触发滚动条
label->resize(400, 800);
// 将 QLabel 添加到 QScrollArea 中
scrollArea->setWidget(label);
// 禁止 QScrollArea 自动调整大小以适应内容
scrollArea->setWidgetResizable(false);
// 手动设置 QScrollArea 的大小和位置
scrollArea->resize(300, 300);
scrollArea->move(50, 50);
mainWindow->resize(400, 400);
mainWindow->show();
return app.exec();
}
实验3
#include "test4.h"
#include <QApplication>
int main4(int argc, char *argv[]) {
QApplication app(argc, argv);
Test4 t4;
t4.show();
return app.exec();
}
#include "test4.h"
#include "ui_test4.h"
#include <QScrollArea>
Test4::Test4(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Test4)
{
ui->setupUi(this);
QScrollArea *scrollArea = new QScrollArea(this);
label = new QLabel;
// 将 QLabel 添加到 QScrollArea 中
scrollArea->setWidget(label);
// 手动设置 QLabel 的大小,确保内容足够大以触发滚动条
//label->resize(400, 800);
// 手动设置 QScrollArea 的大小和位置
scrollArea->resize(300, 300);
scrollArea->move(50, 50);
}
Test4::~Test4()
{
delete ui;
}
void Test4::on_pushButton_clicked()
{
label->resize(400, 800);
}