当前位置: 首页 > news >正文

鞍山做网站专业公司深圳百度

鞍山做网站专业公司,深圳百度,Wordpress博客cdn,官网手游引言 有时候程序中的控件的个数是无法预测的#xff0c;当程序启动时#xff0c;根据解析的数据动态的创建n行m列的控件#xff0c;并为其布局。下面记录一下动态创建控件#xff0c;并布局。 运行效果 示例 此示例主要是从json配置文件中读取参数#xff0c;然后根据参…引言 有时候程序中的控件的个数是无法预测的当程序启动时根据解析的数据动态的创建n行m列的控件并为其布局。下面记录一下动态创建控件并布局。 运行效果 示例 此示例主要是从json配置文件中读取参数然后根据参数的个数创建姐买你上的控件并布局。 下面是具体的实现代码 main.cpp #include studentscoredialog.h#include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);StudentScoreDialog w;w.show();return a.exec(); }studentscoredialog.h #ifndef STUDENTSCOREDIALOG_H #define STUDENTSCOREDIALOG_H/********************************************功能描述1.根据解析的数据动态创建按钮并布局,2.数据太多超过显示的窗口的大小时自动添加滚动条。 ********************************************/#include QDialog//具体学生成绩结构 typedef struct studentInfo {QString name;//学生姓名qreal score;//学生成绩 }ST_STUDENTINFO; typedef ST_STUDENTINFO stuStudent; typedef struct scoreInfo {QString strClass;//班级qreal arvgScore;//平均成绩qreal totalScore;//总成绩uint8_t number;//人数QListstuStudent students;//学生成绩列表 }ST_SCOREINFO; typedef ST_SCOREINFO stuScore;class QVBoxLayout; QT_BEGIN_NAMESPACE namespace Ui { class StudentScoreDialog; } QT_END_NAMESPACEclass StudentScoreDialog : public QDialog {Q_OBJECTpublic:StudentScoreDialog(QWidget *parent nullptr);~StudentScoreDialog(); protected:QString getExePath();//获取可执行文件的路径void readStudentJsonFile();//读取json文件void parseJsonContent(QByteArray array);//解析json文件内容void createCtrl();//创建控件void createEveryClassScore(stuScore score,QVBoxLayout *vLayout);//创建每一个班级的成绩情况 private:Ui::StudentScoreDialog *ui;QListstuScore m_stuScoreList;//保存从json文件读取的变量值 }; #endif // STUDENTSCOREDIALOG_Hstudentscoredialog.cpp #include studentscoredialog.h #include ui_studentscoredialog.h #include QCoreApplication #include QJsonDocument #include QJsonObject #include QJsonArray #include QJsonParseError #include QFile #include QGroupBox #include QHBoxLayout #include QVBoxLayout #include QLabel #include QLineEdit #include QDebugStudentScoreDialog::StudentScoreDialog(QWidget *parent): QDialog(parent), ui(new Ui::StudentScoreDialog) {ui-setupUi(this);setWindowFlags(Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint);readStudentJsonFile();createCtrl(); }StudentScoreDialog::~StudentScoreDialog() {delete ui; }QString StudentScoreDialog::getExePath() {return QCoreApplication::applicationDirPath(); }void StudentScoreDialog::readStudentJsonFile() {QString strPath getExePath() /students.json;QFile file(strPath);if (file.open(QIODevice::ReadOnly)) {QByteArray byteArray file.readAll();file.close();parseJsonContent(byteArray);}else {qDebug()QStringLiteral(文件打开失败);} }void StudentScoreDialog::parseJsonContent(QByteArray array) {QJsonParseError parseError;QJsonDocument doc QJsonDocument::fromJson(array,parseError);if (!doc.isEmpty() parseError.error QJsonParseError::NoError) {QJsonObject rootObject doc.object();if (rootObject.value(msg).toString() score) {QJsonArray resultArray rootObject.value(results).toArray();for (int i 0; i resultArray.size(); i) {QJsonObject resultObject resultArray[i].toObject();stuScore tempScore;tempScore.strClass resultObject.value(class).toString();tempScore.arvgScore resultObject.value(averageScore).toDouble();tempScore.totalScore resultObject.value(totalScore).toDouble();tempScore.number resultObject.value(number).toInt();QJsonArray studentArray resultObject.value(students).toArray();for (int j 0; j studentArray.size(); j) {stuStudent tempStudent;QJsonObject studentObject studentArray.at(j).toObject();tempStudent.name studentObject.value(name).toString();tempStudent.score studentObject.value(score).toDouble();tempScore.students.append(tempStudent);}m_stuScoreList.append(tempScore);}}} }void StudentScoreDialog::createCtrl() {QWidget *widget ui-scrollAreaWidgetContents;QVBoxLayout *vLayout new QVBoxLayout(widget);vLayout-setSpacing(5);vLayout-setContentsMargins(5,5,5,5);for (int i 0; i m_stuScoreList.size(); i) {QGroupBox *groupBox new QGroupBox;QVBoxLayout *groupVlayout new QVBoxLayout(groupBox);groupVlayout-setSpacing(5);groupVlayout-setContentsMargins(5,0,5,0);stuScore classScore m_stuScoreList.at(i);createEveryClassScore(classScore,groupVlayout);vLayout-addWidget(groupBox);} }void StudentScoreDialog::createEveryClassScore(stuScore score, QVBoxLayout *vLayout) {QHBoxLayout *hLayout new QHBoxLayout;QLabel *classLabel new QLabel(QStringLiteral(班级));QLineEdit *classEdit new QLineEdit(score.strClass);QLabel *averageLabel new QLabel(QStringLiteral(平均成绩));QLineEdit *averageEdit new QLineEdit(QString::number(score.arvgScore));QLabel *totalLabel new QLabel(QStringLiteral(总成绩));QLineEdit *totalEdit new QLineEdit(QString::number(score.totalScore));QLabel *numberLabel new QLabel(QStringLiteral(人数));QLineEdit *numberEdit new QLineEdit(QString::number(score.number));hLayout-addWidget(classLabel);hLayout-addWidget(classEdit);hLayout-addWidget(averageLabel);hLayout-addWidget(averageEdit);hLayout-addWidget(totalLabel);hLayout-addWidget(totalEdit);hLayout-addWidget(numberLabel);hLayout-addWidget(numberEdit);vLayout-addLayout(hLayout);QHBoxLayout *scoreLayout nullptr;for (int i 0; i score.students.size(); i) {if (i % 4 0) {scoreLayout new QHBoxLayout;scoreLayout-setSpacing(5);scoreLayout-setContentsMargins(0,0,0,0);vLayout-addLayout(scoreLayout);}stuStudent tempStudent score.students[i];QLabel *nameLabel new QLabel(QStringLiteral(姓名));QLineEdit *nameEdit new QLineEdit(tempStudent.name);nameEdit-setFixedWidth(120);QLabel *scoreLabel new QLabel(QStringLiteral(成绩));QLineEdit *scoreEdit new QLineEdit(QString::number(tempStudent.score));scoreEdit-setFixedWidth(50);scoreLayout-addWidget(nameLabel);scoreLayout-addWidget(nameEdit);scoreLayout-addWidget(scoreLabel);scoreLayout-addWidget(scoreEdit);if (i score.students.size() - 1 score.students.size() % 4 ! 0) {scoreLayout-addStretch();}} }ui文件中添加的控件 创建的项目的结构 此项目中读取的配置文件students.json,配置文件的内容如下 students.json {msg:score,results:[{class:二年级一班,averageScore:78,totalScore:936,number:12,students:[{name:李明,score:77},{name:胡书,score:77},{name:扫速度,score:79},{name:山山倒,score:80},{name:阿萨,score:68},{name:维欧,score:77},{name:奇数,score:75},{name:使能,score:78},{name:水浇地,score:69},{name:当数据,score:87},{name:但是,score:76},{name:撒口,score:79}]},{class:二年级二班,averageScore:80,totalScore:960,number:12,students:[{name:蛋黄酥,score:77},{name:随机,score:79},{name:奥斯基,score:80},{name:赛德克,score:78},{name:收到,score:83},{name:卡松,score:77},{name:欧俄,score:86},{name:撒旦,score:78},{name:喀什,score:84},{name:科奥,score:87},{name:杰斯,score:76},{name:欧维,score:83}]}] }整个工程就如上面所示程序启动的时候根据从配置文件中获取的参数来创建控件并布局上面虽使用了栅格布局但设置了姓名和成绩的控件的宽度故而将窗口最大化之后不能很完美的显示控件即成绩和姓名行编辑器没有被拉伸注释掉对姓名和成绩行编辑器的宽度设置后可以最大化窗口同时拉伸控件。
http://www.zqtcl.cn/news/755172/

相关文章:

  • 高端网站建设费用情况广州开发区控股集团有限公司
  • 精湛的网站设计云南网招聘
  • 南昌网站建设公司行情Wordpress添加分页按钮
  • 论坛网站建设流程wordpress速度优化插件
  • PHP套模板做网站建设银行保定分行网站
  • 怎样免费注册网站域名wordpress网站回调域
  • 东莞个人免费建网站乐清网约车事件
  • 备案查询网站网站的登录弹窗怎么做
  • 网站开发 mvc北京建设工程主管部门网站
  • 淮安建设机械网站制作代理公司注册需要多少钱
  • 站长收录茌平建设局网站
  • 如何进行网站开发开发区人才
  • 网站制作 视频网站维护的主要内容包括
  • 快速企业建站深圳网站关键词优化推广
  • 如何开网店详细步骤东莞市网络seo推广
  • 个人可以做哪些有意思的网站网站和网站的app
  • 北京高端网站开发公司网站建设后台实训体会
  • 青岛海川建设集团有限公司网站wordpress 变私有云
  • 网站备案人可以改吗石大网页设计与网站建设客观题
  • 宁波网站优化方案免费关键词挖掘工具
  • 网站制作想法免费做效果图网站
  • 晓风彩票网站建设软件微信上发的链接网站怎么做的
  • 关键词有哪几种台州优秀关键词优化
  • 盐田区住房和建设局网站软件开发文档怎么编写
  • 网站响应式建设seo排名优化怎样
  • 山东 网站备案德清县建设局网站
  • 中英语双语网站咋做提供网站建设设计外包
  • 云网站功能江门网站seo关键词排名优化
  • 潍坊网站建设外贸制作html网站
  • 网站友情链接怎么添加定制酒营销方案