Qt 小例子学习14 - 动态滚动QScrollArea

#include "HorizontalScrollArea.h"#include <QApplication>
#include <QDebug>
#include <QLabel>
#include <QPushButton>
#include <QScrollArea>
#include <QScrollBar>
#include <QVBoxLayout>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget w;w.setLayout(new QVBoxLayout);QPushButton btn("Add", &w);int nrows = 2;int ncols = 2;HorizontalScrollArea scroll(nrows, ncols);w.layout()->addWidget(&btn);w.layout()->addWidget(&scroll);QObject::connect(&btn, &QPushButton::clicked, [&scroll, &nrows](){int column = scroll.columnCount();for (int row = 0; row < nrows; row++){QLabel *label = new QLabel(QString("label: %1 %2").arg(row).arg(column));label->setFrameShape(QFrame::Box);label->setAlignment(Qt::AlignCenter);QColor color(qrand() % 256, qrand() % 256, qrand() % 256);label->setStyleSheet(QString("QLabel { background-color : %1;}").arg(color.name()));scroll.addWidget(label, row, column);}});w.show();return a.exec();
}

HorizontalScrollArea.h

#ifndef HORIZONTALSCROLLAREA_H
#define HORIZONTALSCROLLAREA_H#include <QGridLayout>
#include <QResizeEvent>
#include <QScrollArea>
#include <QScrollBar>#include <QDebug>class HorizontalScrollArea : public QScrollArea
{QWidget *contentWidget;QGridLayout *grid;int nRows;int nColumns;public:HorizontalScrollArea(int rows, int cols, QWidget *parent = Q_NULLPTR): QScrollArea(parent), nRows(rows), nColumns(cols){setWidgetResizable(true);contentWidget = new QWidget(this);setWidget(contentWidget);grid = new QGridLayout(contentWidget);setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);}void addWidget(QWidget *w, int row, int col){grid->addWidget(w, row, col);adaptSize();}int columnCount() const{if (grid->count() == 0){return 0;}return grid->columnCount();}private:void adaptSize(){if (columnCount() >= nColumns){int w = 1.0 * (width() - grid->horizontalSpacing() * (nColumns + 1.6)) /nColumns;int wCorrected =w * columnCount() + grid->horizontalSpacing() * (columnCount() + 2);contentWidget->setFixedWidth(wCorrected);}contentWidget->setFixedHeight(viewport()->height());}protected:void resizeEvent(QResizeEvent *event){QScrollArea::resizeEvent(event);adaptSize();}
};#endif // HORIZONTALSCROLLAREA_H

Qt 小例子学习14 - 动态滚动QScrollArea相关推荐

  1. Qt小例子学习52 - 卡片游戏

    Qt小例子学习52 - 卡片游戏 Card.qml import QtQuick 2.0 import QtQuick.Layouts 1.3Item {id: cardLayout.fillWidt ...

  2. Qt 小例子学习33 - QTableWidget 显示点击的行列

    Qt 小例子学习33 - QTableWidget 显示点击的行列 #include <QApplication> #include <QDebug> #include < ...

  3. Qt 小例子学习26 - 画网格

    Qt 小例子学习26 - 画网格 GraphicsScene.h #ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H#include <QGraphi ...

  4. Qt 小例子学习44 - 磁贴界面

    Qt 小例子学习44 - 磁贴界面 FormModel.h #ifndef FORMMODEL_H #define FORMMODEL_H#include <QAbstractListModel ...

  5. Qt 小例子学习8 - 选择器

    Qt 小例子学习7 - 选择器 dialog.cpp #include "dialog.h" #include "ui_dialog.h"#include &l ...

  6. QT小例子GUI(主)线程与子线程之间的通信

    QT小例子GUI(主)线程与子线程之间的通信 在主线程上,可以控制子线程启动,停止,清零 如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字. #ifndef TQT_H_ ...

  7. 关于MSSQL存储过程中使用游标的一个小例子(学习)

    声明:本例转自http://hi.chinaunix.net/?214950/viewspace-1713,主要是为了学习之用 比如有个表,内容如下 id,text 1,春花秋月何时了 2,往事知多少 ...

  8. 小例子学习C#扩展方法

    扩展方法使您能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 对于用 ...

  9. QT小例子 ---文件查找

    先看看效果图吧,可以查找文件,以及通过文件内容进行查找 #ifndef WINDOW_H #define WINDOW_H#include <QDialog> #include <Q ...

  10. 基于Qt5.14.2和mingw的Qt源码学习(三) — 元对象系统简介及moc工具是如何保存类属性和方法的

    基于Qt5.14.2和mingw的Qt源码学习(三) - 元对象系统简介及moc工具是如何保存类属性和方法的 一.什么是元对象系统 1.元对象系统目的 2.实现元对象系统的关键 3.元对象系统的其他一 ...

最新文章

  1. 链表类型题目需要用到的头文件list.h
  2. cassandra本地连接失败_本地网络发现失败的解决方法连接到OS X中的服务器的问题 | MOS86...
  3. mysqldump 和 sql命令导入sql文件
  4. apache+tomcat的架构
  5. CF1444C Team-Building(可持久化并查集)(二分图)
  6. MongoDB文件操作(支持大于4M数据)
  7. c 子类对象 访问父类对象受保护成员_java面向对象总结
  8. Python基础__Python序列基本类型及其操作(1)
  9. ubuntu18的网关ip在哪里配_技术|如何在 Ubuntu 18.04 LTS 中配置 IP 地址
  10. 面试稳了!网易资深工程师详解运维面经!
  11. 解析RocketMQ的消息索引文件consumequeue
  12. TCP/IP参考模型入门
  13. mysql 游标插入数据_mysql游标插入问题
  14. lzg_ad:EWF RAM Reg模式原理介绍
  15. 微信小程序-基于云开发 CMS + Vant Weapp 电商 Demo 来了!
  16. Javascript上传图片转base64并预览
  17. 酷狗音乐分类html,酷狗音乐手机版创建歌单教程 分类自己的音乐库
  18. Android去除对话框边距,去除TextView默认内边距
  19. trivial/nontrival函数
  20. 不能整除7的整数C语言,求1-1000中能被3整除,且不能被7整除,且至少有一位数是5的整数...

热门文章

  1. 爬虫爬出来的数据不全_Web Scraper教程(二)爬虫入门之当当畅销书爬取
  2. 安卓手机Recovery刷机教程
  3. 沪牌每月价格预测模型
  4. 支付宝实现JS调起支付你必须知道的坑(40004 ACQ.INVALID_PARAMETER)
  5. 创业公司股权架构搭建原则
  6. 联想IdeapadU410重装系统win10
  7. Boot Device简介
  8. 阿里云网络迁移引发公司服务器宕机的24小时吐血恢复纪实
  9. 数据结构练习题及答案
  10. 云计算作为一种新型的IT服务资源,主要分为几种服务类型