引言

当根据数据来创建控件并布局时,如果数据更新,那么之前创建的控件便需要删除后重新创建布局。该文主要说明将原来的布局和控件删除,重新创建并布局。

示例

先看一下ui文件:

下面是实现代码:


void StatusViewDialog::initSourcesView()
{deleteSourcesOrignalLayoutCtrls();QWidget *sourcesWidget = ui->scrollAreaWidgetContents;QVBoxLayout *vLayout = new QVBoxLayout(sourcesWidget);vLayout->setSpacing(5);vLayout->setContentsMargins(5,5,5,5);int page = 12;QLabel *curLabel = new QLabel(QStringLiteral("当前页:"));QLineEdit *curEdit = new QLineEdit(QString::number(page));curEdit->setReadOnly(true);curEdit->setFixedWidth(40);QLabel *totalLabel = new QLabel(QStringLiteral("总页数:"));QLineEdit *totalEdit = new QLineEdit(QString::number(page));totalEdit->setReadOnly(true);totalEdit->setFixedWidth(40);QHBoxLayout *smallLayouth = new QHBoxLayout;smallLayouth->addWidget(curLabel);smallLayouth->addWidget(curEdit);smallLayouth->addWidget(totalLabel);smallLayouth->addWidget(totalEdit);smallLayouth->addStretch();vLayout->addLayout(smallLayouth);//设置控件样式QString strLabelStyle = "QLabel{font-size: 17px;font-family: Microsoft YaHei;color: #FFFFFF;}";curLabel->setStyleSheet(strLabelStyle);totalLabel->setStyleSheet(strLabelStyle);QString strEditStyle =  "QLineEdit{font-size: 17px;font-family: Microsoft YaHei;color: #FFFFFF;""border: 1px solid #01B5EF;border-radius: 2px;background: rgba(8, 7, 91, 0.08);}";curEdit->setStyleSheet(strEditStyle);totalEdit->setStyleSheet(strEditStyle);QList<QHBoxLayout*> hlayoutList;for (int i = 0 ; i < 3 ; ++i) {QLabel * inputLabel = new QLabel(QStringLiteral("幼儿园:"));QLineEdit *inputEdit = new QLineEdit(QStringLiteral("小孩子"));inputEdit->setReadOnly(true);inputEdit->setFixedWidth(150);QLabel *onlineLabel = new QLabel(QStringLiteral("是小孩子:"));QString boolStr = "true";QLineEdit *onlineEdit = new QLineEdit(boolStr);onlineEdit->setReadOnly(true);onlineEdit->setFixedWidth(80);QLabel *stateLabel = new QLabel(QStringLiteral("能独立:"));boolStr = "false";QLineEdit *stateEdit = new QLineEdit(boolStr);stateEdit->setReadOnly(true);stateEdit->setFixedWidth(80);QLabel *modeLabel = new QLabel(QStringLiteral("可爱不:"));QLineEdit *modeEdit = new QLineEdit(QStringLiteral("可爱"));modeEdit->setReadOnly(true);modeEdit->setFixedWidth(180);QLabel *nameLabel = new QLabel(QStringLiteral("天才:"));QLineEdit *nameEdit = new QLineEdit(QStringLiteral("天才"));nameEdit->setReadOnly(true);nameEdit->setFixedWidth(200);QLabel *tempretrueLabel = new QLabel(QStringLiteral("温度:"));qreal tempretrue = 12.12;QLineEdit *tempretrueEdit = new QLineEdit(QString::number(tempretrue));tempretrueEdit->setReadOnly(true);tempretrueEdit->setFixedWidth(50);inputLabel->setStyleSheet(strLabelStyle);onlineLabel->setStyleSheet(strLabelStyle);stateLabel->setStyleSheet(strLabelStyle);modeLabel->setStyleSheet(strLabelStyle);nameLabel->setStyleSheet(strLabelStyle);tempretrueLabel->setStyleSheet(strLabelStyle);inputEdit->setStyleSheet(strEditStyle);onlineEdit->setStyleSheet(strEditStyle);stateEdit->setStyleSheet(strEditStyle);modeEdit->setStyleSheet(strEditStyle);nameEdit->setStyleSheet(strEditStyle);tempretrueEdit->setStyleSheet(strEditStyle);QHBoxLayout *hLayout = new QHBoxLayout;hLayout->addWidget(inputLabel);hLayout->addWidget(inputEdit);hLayout->addWidget(onlineLabel);hLayout->addWidget(onlineEdit);hLayout->addWidget(stateLabel);hLayout->addWidget(stateEdit);hLayout->addWidget(modeLabel);hLayout->addWidget(modeEdit);hLayout->addWidget(nameLabel);hLayout->addWidget(nameEdit);hLayout->addWidget(tempretrueLabel);hLayout->addWidget(tempretrueEdit);vLayout->addLayout(hLayout);}adjustScrollWidgetHeight(3,ui->scrollAreaWidgetContents);
}void StatusViewDialog::initSeatsView()
{deleteSeatsOrignalLayoutCtrls();int row = 0;QWidget *widget = ui->scrollAreaWidgetContents_2;QVBoxLayout *vlayout = new QVBoxLayout(widget);vlayout->setSpacing(5);vlayout->setContentsMargins(5,5,5,5);QList<QHBoxLayout*> everyHlayoutList;for (int i = 0 ; i < 4 ; ++i) {QLabel *curLabel = new QLabel(QStringLiteral("当前页:"));int page = 11;QLineEdit *curEdit = new QLineEdit(QString::number(page));curEdit->setReadOnly(true);curEdit->setFixedWidth(40);QLabel *totalLabel = new QLabel(QStringLiteral("总页数:"));QLineEdit *totalEdit = new QLineEdit(QString::number(page));totalEdit->setReadOnly(true);totalEdit->setFixedWidth(40);QLabel *unidNameLabel = new QLabel(QStringLiteral("名称:"));QLineEdit *unidNameEdit = new QLineEdit(QStringLiteral("席位"));unidNameEdit->setReadOnly(true);unidNameEdit->setFixedWidth(130);QLabel *unisIdLabel = new QLabel(QStringLiteral("大小:"));QLineEdit *unisIdEdit = new QLineEdit(QStringLiteral("23"));unisIdEdit->setReadOnly(true);unisIdEdit->setFixedWidth(300);QLabel *userNameLabel = new QLabel(QStringLiteral("用户名:"));QLineEdit *userNameEdit = new QLineEdit(QStringLiteral("深度"));userNameEdit->setReadOnly(true);userNameEdit->setFixedWidth(150);QString strLabelStyle = "QLabel{font-size: 17px;font-family: Microsoft YaHei;color: #FFFFFF;}";QString strEditStyle =  "QLineEdit{font-size: 17px;font-family: Microsoft YaHei;color: #FFFFFF;""border: 1px solid #01B5EF;border-radius: 2px;background: rgba(8, 7, 91, 0.08);}";curLabel->setStyleSheet(strLabelStyle);totalLabel->setStyleSheet(strLabelStyle);unidNameLabel->setStyleSheet(strLabelStyle);unisIdLabel->setStyleSheet(strLabelStyle);userNameLabel->setStyleSheet(strLabelStyle);curEdit->setStyleSheet(strEditStyle);totalEdit->setStyleSheet(strEditStyle);unidNameEdit->setStyleSheet(strEditStyle);unisIdEdit->setStyleSheet(strEditStyle);userNameEdit->setStyleSheet(strEditStyle);QHBoxLayout *hlayout1 = new QHBoxLayout;hlayout1->addWidget(curLabel);hlayout1->addWidget(curEdit);hlayout1->addWidget(totalLabel);hlayout1->addWidget(totalEdit);hlayout1->addWidget(unidNameLabel);hlayout1->addWidget(unidNameEdit);hlayout1->addWidget(unisIdLabel);hlayout1->addWidget(unisIdEdit);hlayout1->addWidget(userNameLabel);hlayout1->addWidget(userNameEdit);everyHlayoutList.append(hlayout1);++row;QString strGroupStyle = "QGroupBox{border: 1px solid #01B5EF;border-radius:2px;margin-top: 0.5px;}""QGroupBox::title{subcontrol-origin: margin;subcontrol-position: top left;""left: 10px;margin-left: 2px;padding: 0  0px;}";QGroupBox *groupBox = new QGroupBox;groupBox->setStyleSheet(strGroupStyle);QList<QHBoxLayout*> hlayoutList;for (int j = 0 ; j < 3; ++j) {QHBoxLayout *layoutStatus = new QHBoxLayout;hlayoutList.append(layoutStatus);QLabel *ipLabel = new QLabel(QStringLiteral("IP:"));QLineEdit *ipEdit = new QLineEdit(QStringLiteral("129.128.0.1"));ipEdit->setReadOnly(true);QLabel *tempretureLabel = new QLabel(QStringLiteral("温度:"));QLineEdit *tempretureEdit = new QLineEdit(QStringLiteral("24"));tempretureEdit->setReadOnly(true);QLabel *onlineLabel = new QLabel(QStringLiteral("是否在线:"));QString temp = "true";QLineEdit *onlineEdit = new QLineEdit(temp);onlineEdit->setReadOnly(true);ipLabel->setStyleSheet(strLabelStyle);tempretureLabel->setStyleSheet(strLabelStyle);onlineLabel->setStyleSheet(strLabelStyle);ipEdit->setStyleSheet(strEditStyle);tempretureEdit->setStyleSheet(strEditStyle);onlineEdit->setStyleSheet(strEditStyle);layoutStatus->addWidget(ipLabel);layoutStatus->addWidget(ipEdit);layoutStatus->addWidget(tempretureLabel);layoutStatus->addWidget(tempretureEdit);layoutStatus->addWidget(onlineLabel);layoutStatus->addWidget(onlineEdit);row++;}QVBoxLayout *vGroupboxLayout = new QVBoxLayout(groupBox);for (int i = 0 ; i < hlayoutList.size() ; ++i) {vGroupboxLayout->addLayout(hlayoutList[i]);}QHBoxLayout *hGroupLayout = new QHBoxLayout;hGroupLayout->addWidget(groupBox);everyHlayoutList.append(hGroupLayout);}for (int j = 0 ; j < everyHlayoutList.size() ; ++j) {vlayout->addLayout(everyHlayoutList[j]);}adjustScrollWidgetHeight(row,ui->scrollAreaWidgetContents_2);
}void StatusViewDialog::deleteSourcesOrignalLayoutCtrls()
{if (ui->scrollAreaWidgetContents->layout() != nullptr) {QLayout *oldLayout = ui->scrollAreaWidgetContents->layout();delete oldLayout;}QList<QWidget*> widgetList = ui->scrollAreaWidgetContents->findChildren<QWidget*>();foreach (QWidget* ctrl, widgetList) {delete ctrl;}
}void StatusViewDialog::deleteSeatsOrignalLayoutCtrls()
{if (ui->scrollAreaWidgetContents_2->layout() != nullptr) {delete ui->scrollAreaWidgetContents_2->layout();}//现删除groupbox,然后删除窗口上剩余的控件QList<QGroupBox*> groupBox = ui->scrollAreaWidgetContents_2->findChildren<QGroupBox*>();foreach (QGroupBox *gb, groupBox) {delete gb;}//删除其它的标签和行编辑器QList<QWidget*> widgetList = ui->scrollAreaWidgetContents_2->findChildren<QWidget*>();foreach (QWidget* ctrl, widgetList) {delete ctrl;}
}void StatusViewDialog::adjustScrollWidgetSize(QWidget *widget,QWidget *changedWidget)
{QGridLayout *gridLayout = new QGridLayout(widget);//使tab页中的窗口和tab页一样大gridLayout->setContentsMargins(0,0,0,0);gridLayout->addWidget(changedWidget,0,0,1,1);
}void StatusViewDialog::adjustScrollWidgetHeight(int num,QWidget *widget)
{int height = (num + 1) * 35;//平均每行的高度为35widget->setFixedHeight(height);
}

这里是tabwidget控件中创建控件并布局,先删除之前的控件和布局,然后重新创建控件并布局。这里删除的时候先获取之前的布局,然后删除布局,再删除控件,控件删除时是按照类型来删除的,主要由其父窗口来看类型,找到某一类的控件,然后返回对应的列表,然后删除,另外创建控件后根据控件的数量调整布局所在窗口的大小。

qt中创建控件布局以及删除原有布局和控件相关推荐

  1. QT中创建条形统计图的方法

    QT中创建条形统计图的方法 .pro中 QT += charts 头文件 #include <QtCharts/QChartView> #include <QtCharts/QBar ...

  2. PS网页设计教程XIX——在Photoshop中创建一个优雅的作品集的网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  3. PS网页设计教程XII——在PS中创建专业的web2.0的网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  4. Qt中创建excel文件

    1.用Qt自带的实现创建excel文件 QFile file(filename); file.open(QIODevice::ReadWrite); file.close(); 创建是创建了excel ...

  5. 创建mysql数据库,在新数据库中创建表,再尝试删除表

    创建之前,先登录数据库存 mysql -u 账号 -p密码 登录完成后,展示一下已存在的数据库 show databases; 创建数据库 create database test111; 然后展示一 ...

  6. PS网页设计教程XI——在PS中创建柔和的绿色环保的网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作诗也会吟". 本系列的教程来源于网上的PS教程,都是国外的 ...

  7. PS学习记录4--PS网页设计教程XII——在PS中创建专业的web2.0的网页布局 第三章

    APP在微信的推广下载转化率一直是困扰开发者和推广者的一大难题,那么如何提高APP的下载转化率呢?微信作为一款国内最大的社交类APP.有着非常大的开发潜力.但是我们如何在推广过程中能够高效.有针对性的 ...

  8. 在Qt中使用已有模板创建新Word文档

    简 在这篇帖子中我将详细讲述如何在Qt环境下使用已有Word模板文件创建新的文档,并对模板文档内容填充.目前,我只对替换文字和对表格进行操作进行了介绍,如何在文档插入图片未在本文中提及. 述 开发环境 ...

  9. QT中的模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

最新文章

  1. 福利 | 一文读懂系列文章精选集发布啦!
  2. pt939g联通_尝试修改友华PT939G的省份设置,成功!
  3. 项目管理--项目整合管理
  4. 关于分辨率和地图打印的一些问题
  5. UltraEdit的高亮【原创】
  6. SQLi LABS Less-12 联合注入+报错注入
  7. 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
  8. markdown中让表格居中的写法
  9. Vue家谱视图结构- vue-tree-chart
  10. 金融,财务,融资相关知识(一)
  11. 汽车自主品牌与国际品牌差距为十年来最小;智选假日酒店大中华区已开业200家 | 美通企业日报...
  12. zblog asp 升级到PHP,Zblog之php版本 千呼万唤始出来
  13. Spring Boot项目出现 Invalid bound statement (not found):错误
  14. 企业要如何建立适合自己的PMF?
  15. 简单粗暴的EMC设计指南
  16. 各种免费的在线小工具
  17. 使用IDAPython dump 内存
  18. SSMS使用基础及实验数据准备
  19. notepad++中文简体下载
  20. 王者该服务器未获取角色信息,王者荣耀体验服现实未获取角色信息 | 手游网游页游攻略大全...

热门文章

  1. 云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验
  2. 殷浩详解DDD:如何避免写流水账代码?
  3. 揭秘!阿里实时数仓分布式事务Scale Out设计
  4. 云原生时代业务架构的变革:从单体迈向Serverless
  5. MongoDB compact 命令详解
  6. 谈谈社区、产品和新Dubbo | 从Dubbo 的社区star 数突破 2 万说起
  7. 20岁,Universal GIS拥抱新生的GIS信创
  8. 异步编程到底在说啥?
  9. 终于有人把大数据讲明白了。。。
  10. 腾讯视频云支持超300万场次直播带货 助力企业一天搭建直播间