qt点击按钮本身,来删除自身

引言

实现下面这样一个功能,点击界面的添加按钮,增加一行班级和学生的信息,刚才被点击行的按钮上的文字由添加变为删除,按钮文字为删除,点击的时候可以删除被点击行的所有控件,选中那个班级后会自动更新对应班级的学生列表,当添加的控件行太多,会自动出现垂直滚动条。
在这里插入图片描述

实现

下面附上完整的代码,该程序,采用了样式来设置了控件的外观,qss文件一起附上。
程序的编译环境:msvc2017 64bit,使用的QtCreate5.13.2。
程序的结构:
在这里插入图片描述
创建基于QDialog的项目,然后向其中添加文件,其它不多说,下面看具体实现。
main.cpp

#include "instructioneditdialog.h"#include <QApplication>
#include <QFile>int main(int argc, char *argv[])
{QApplication a(argc, argv);QFile file(":/new/prefix1/myStyle.qss");if (file.open(QIODevice::ReadOnly)) {QString strText = file.readAll();a.setStyleSheet(strText);file.close();}InstructionEditDialog w;w.show();return a.exec();
}

defineData.h

#ifndef DEFINEDATA_H
#define DEFINEDATA_H
#include <QString>typedef struct schoolSituation
{QString className;//屏幕组号QString studentsName;//场景id
}ST_SCHOOL;
typedef ST_SCHOOL stuSchoolSituation;#endif // DEFINEDATA_H

deleteaddbtn.h

#ifndef DELETEADDBTN_H
#define DELETEADDBTN_H#include <QPushButton>/*****************************功能描述:1.按钮文字为添加,发送添加命令行,2.按钮文字为删除,发送删除命令行。
*******************************/class DeleteAddBtn : public QPushButton
{
Q_OBJECT
public:explicit DeleteAddBtn(int id, QWidget *parent = nullptr);~DeleteAddBtn();
protected:void mousePressEvent(QMouseEvent *event);//点击添加文字的按钮,发送添加指令信号,点击删除按钮,发送删除被点击行的控件信号void paintEvent(QPaintEvent *event);//设置样式
signals:void sigAddConstructionCtrl();//添加命令行控件void sigDelConstructionCtrl(int &id);//删除被点击行的命令行控件,id-被点击按钮的id
private:int         m_id;//按钮的id
};#endif // DELETEADDBTN_H

deleteaddbtn.cpp

#include "deleteaddbtn.h"
#include <QMouseEvent>
#include <QStyleOption>
#include <QPainter>DeleteAddBtn::DeleteAddBtn(int id,QWidget *parent)
:QPushButton(parent)
{m_id = id;setAttribute(Qt::WA_StyledBackground);//设置样式生效
}DeleteAddBtn::~DeleteAddBtn()
{}void DeleteAddBtn::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {if (text() == QStringLiteral("添加")) {setText(QStringLiteral("删除"));emit sigAddConstructionCtrl();}else if (text() == QStringLiteral("删除")) {emit sigDelConstructionCtrl(m_id);}}//    QPushButton::mousePressEvent(event);//删除所在行控件后,会继续回到此处,但是此时该类已经被析构了
}void DeleteAddBtn::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);QPushButton::paintEvent(event);
}

specificorderform.h

#ifndef SPECIFICORDERFORM_H
#define SPECIFICORDERFORM_H#include "defineData.h"
#include <QWidget>
#include <QMap>/*******************************功能描述:1.设置班级下拉列表为指定的列表,2.根据班级列表中选中的值,设置学生的列表,2.设置combox默认初始选中值,3.获取combox选中的值。
********************************/namespace Ui {
class SpecificOrderForm;
}class SpecificOrderForm : public QWidget
{Q_OBJECTpublic:explicit SpecificOrderForm(QWidget *parent = nullptr);~SpecificOrderForm();stuSchoolSituation getOrderChoosedText();//获取指令选中的sid,sceneId
protected:void initComboBoxList();//初始化下拉列表的参数void setComboxList();//设置下拉列表
private slots:void on_classComboBox_currentTextChanged(const QString &arg1);//sid选中后,sceneid列表对应调整(sid没有变,sceneid也不变其列表)private:Ui::SpecificOrderForm *ui;QStringList                     m_studentStrList;//场景id列表QMap<QString,QStringList>       m_classStudentsMap;//sid和scenid映射表
};#endif // SPECIFICORDERFORM_H

specificorderform.cpp

#include "specificorderform.h"
#include "ui_specificorderform.h"
#include <QStyledItemDelegate>
#include <QList>SpecificOrderForm::SpecificOrderForm(QWidget *parent) :QWidget(parent),ui(new Ui::SpecificOrderForm)
{ui->setupUi(this);initComboBoxList();setComboxList();QStyledItemDelegate *delegate = new QStyledItemDelegate();//下拉项的高度起作用,似乎没有作用ui->classComboBox->setItemDelegate(delegate);ui->studentComboBox->setItemDelegate(delegate);setWindowFlags(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);
}SpecificOrderForm::~SpecificOrderForm()
{delete ui;
}stuSchoolSituation SpecificOrderForm::getOrderChoosedText()
{stuSchoolSituation tempClass;tempClass.className = ui->classComboBox->currentText();tempClass.studentsName = ui->studentComboBox->currentText();return tempClass;
}void SpecificOrderForm::initComboBoxList()
{QStringList students;students.append(QStringLiteral("胡姬"));students.append(QStringLiteral("张三"));students.append(QStringLiteral("李虎"));students.append(QStringLiteral("王宁"));students.append(QStringLiteral("紫荆"));students.append(QStringLiteral("梅斯卡通"));m_classStudentsMap.insert(QStringLiteral("一班"),students);students.clear();students.append(QStringLiteral("胡微姬"));students.append(QStringLiteral("张上三"));students.append(QStringLiteral("李虎上"));students.append(QStringLiteral("王宁"));students.append(QStringLiteral("紫荆史蒂夫"));students.append(QStringLiteral("梅斯卡通"));m_classStudentsMap.insert(QStringLiteral("二班"),students);students.clear();students.append(QStringLiteral("阿叔"));students.append(QStringLiteral("神盾局弟"));students.append(QStringLiteral("电视剧"));students.append(QStringLiteral("四道口"));students.append(QStringLiteral("圣诞节"));students.append(QStringLiteral("可颂"));m_classStudentsMap.insert(QStringLiteral("三班"),students);
}void SpecificOrderForm::setComboxList()
{   QStringList classStrList;QList<QString> classList = m_classStudentsMap.keys();for (int j = 0 ; j < classList.size() ; ++j) {QString strClass = classList[j];classStrList.append(strClass);}ui->classComboBox->addItems(classStrList);if (classStrList.size() != 0) {ui->classComboBox->setCurrentText(classStrList.at(0));}
}void SpecificOrderForm::on_classComboBox_currentTextChanged(const QString &arg1)
{if (m_studentStrList.size() != 0) {m_studentStrList.clear();ui->studentComboBox->clear();}QMap<QString,QStringList>::iterator it;for (it = m_classStudentsMap.begin() ; it != m_classStudentsMap.end() ;++it) {if (arg1 == it.key()) {m_studentStrList = it.value();}}ui->studentComboBox->addItems(m_studentStrList);if (m_studentStrList.size() != 0) {ui->studentComboBox->setCurrentText(m_studentStrList.at(0));}
}

instructioneditdialog.h

#ifndef INSTRUCTIONEDITDIALOG_H
#define INSTRUCTIONEDITDIALOG_H
#include "specificorderform.h"
#include "deleteaddbtn.h"
#include <QDialog>
#include <QQueue>
#include <QMap>
#include <QVBoxLayout>/*****************************功能描述:1.添加命令行控件,2.删除命令行,3.获取编辑的按钮名字和选中的命令集,4.记录并更新创建的指令行控件的id,5.调整命令行控件的布局,“太多”增加滚动条,6.设置按钮的样式。
*******************************/
typedef struct cmdCtrl
{SpecificOrderForm *order;//指令DeleteAddBtn      *btn;//指令后的按钮
}ST_CMDCTRL;
typedef ST_CMDCTRL stuCmdCtrl;namespace Ui {
class InstructionEditDialog;
}class InstructionEditDialog : public QDialog
{Q_OBJECTpublic:explicit InstructionEditDialog(QWidget *parent = nullptr);~InstructionEditDialog();protected:void setVBlayout();//设置滚动区域的垂直布局void createCommandLine();//创建命令行void adjustLayoutHeight(int num);//调整布局的高度void setPushBtnStyle(DeleteAddBtn *delBtn);//设置添加/删除按钮的样式
private slots:void on_confirmBtn_clicked();//获取名称和被添加的指令void on_cancelBtn_clicked();//清空行编辑器,窗口关闭void onDelConstructionCtrl(int &id);//删除对应id的命令行控件
signals:void sigNameInstructionSet(QString &name,QList<stuSchoolSituation> &cmdSet);//发送按钮名称,sid和sceneid的指令集
private:Ui::InstructionEditDialog *ui;SpecificOrderForm           *m_orderForm;//命令行控件DeleteAddBtn                *m_pushBtn;//删除添加按钮QQueue<int>                 m_deletedId;//保存删除的指令行id,当其中不为空,创建指令行从队列中取id,直到为空重新从上一次的id增加int                         m_lastId;//保存上一次的idint                         m_id;//创建指令行的id,也为按钮idint                         m_count;//记录当前的指令行数目const int                   m_vSpacing;//控件间垂直间距bool                        m_isRecount;//指令行按钮的id是否重新计数QVBoxLayout                 *m_vLayout;//滚动区域的垂直布局QMap<int,stuCmdCtrl>        m_orderMap;//保存指令控件,键-id,值-id对应的指令和按钮
};
#endif // INSTRUCTIONEDITDIALOG_H

instructioneditdialog.cpp

#include "instructioneditdialog.h"
#include "ui_instructioneditdialog.h"InstructionEditDialog::InstructionEditDialog(QWidget *parent) :QDialog(parent),m_vSpacing(5),ui(new Ui::InstructionEditDialog)
{ui->setupUi(this);m_id = 0;m_count = 0;m_lastId = 0;m_isRecount = false;setVBlayout();createCommandLine();setWindowFlag(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);
}InstructionEditDialog::~InstructionEditDialog()
{delete ui;
}void InstructionEditDialog::setVBlayout()
{QWidget *widget = ui->scrollAreaWidgetContents;m_vLayout = new QVBoxLayout(widget);m_vLayout->setSpacing(m_vSpacing);m_vLayout->setContentsMargins(5,5,5,5);
}void InstructionEditDialog::adjustLayoutHeight(int num)
{int height = num * 30 + (num + 1) * m_vSpacing;//30为每行控件的高度ui->scrollAreaWidgetContents->setFixedHeight(height);
}void InstructionEditDialog::setPushBtnStyle(DeleteAddBtn *delBtn)
{QString strStyle;strStyle = "DeleteAddBtn{background-color:#040f60;color:#FFFFFF;""font-size: 18px;font-family: Microsoft YaHei;}""DeleteAddBtn:pressed{background-color:#071fbd;}";delBtn->setStyleSheet(strStyle);
}void InstructionEditDialog::createCommandLine()
{++m_count;if (m_deletedId.size() != 0) {m_id = m_deletedId.front();//first()m_deletedId.removeFirst();if (m_deletedId.count() == 0) {m_isRecount = true;}}else {if (m_isRecount) {m_id = m_lastId;}++m_id;m_lastId = m_id;}m_orderForm = new SpecificOrderForm(ui->scrollAreaWidgetContents);m_pushBtn = new DeleteAddBtn(m_id,ui->scrollAreaWidgetContents);m_pushBtn->setText(QStringLiteral("添加"));setPushBtnStyle(m_pushBtn);connect(m_pushBtn,&DeleteAddBtn::sigAddConstructionCtrl,this,&InstructionEditDialog::createCommandLine);connect(m_pushBtn,&DeleteAddBtn::sigDelConstructionCtrl,this,&InstructionEditDialog::onDelConstructionCtrl);QHBoxLayout *layout = new QHBoxLayout;layout->addWidget(m_orderForm);layout->addWidget(m_pushBtn);m_vLayout->addLayout(layout);adjustLayoutHeight(m_count);stuCmdCtrl tempOrder;tempOrder.order = m_orderForm;tempOrder.btn = m_pushBtn;m_orderMap.insert(m_id,tempOrder);
}void InstructionEditDialog::on_confirmBtn_clicked()
{QString strName = ui->namelineEdit->text();QList<stuSchoolSituation> sidSceneList;QMap<int,stuCmdCtrl>::iterator it;for (it = m_orderMap.begin() ; it != m_orderMap.end() ; ++it) {stuCmdCtrl tempCtrl = it.value();stuSchoolSituation tempSidMap = tempCtrl.order->getOrderChoosedText();sidSceneList.append(tempSidMap);}emit sigNameInstructionSet(strName,sidSceneList);accept();
}void InstructionEditDialog::on_cancelBtn_clicked()
{ui->namelineEdit->clear();reject();
}void InstructionEditDialog::onDelConstructionCtrl(int &id)
{if (m_deletedId.size() == 0) {m_isRecount = false;}QMap<int,stuCmdCtrl>::iterator it;for (it = m_orderMap.begin() ; it != m_orderMap.end() ; ++it) {if (id == it.key()) {m_deletedId.append(id);//删除后添加会出现id已被释放stuCmdCtrl tempCtrl;tempCtrl = it.value();delete tempCtrl.order;delete tempCtrl.btn;m_orderMap.erase(it);break;}}--m_count;adjustLayoutHeight(m_count);
}

instructioneditdialog.ui
在这里插入图片描述
specificorderform.ui
在这里插入图片描述
下面是样式文件:

/*学生情况编辑框背景*/
QWidget#SpecificOrderForm
{background-color:transparent;border:none;
}/*指令行指令标签*/
QWidget#SpecificOrderForm>QLabel#label,QLabel#label_2,QLabel#label_3
{font-size: 18px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*班级和学生列表*/
QWidget#SpecificOrderForm>QComboBox#classComboBox,QComboBox#studentComboBox
{background-color: #121650;border:2px solid #0b54f0;font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*下拉列表框*/
QWidget#SpecificOrderForm>QComboBox QAbstractItemView
{background-color:#55557f;outline: 1px solid #ffaa7f;   /*选定项的虚框*/selection-background-color:#121650;color:#FFFFFF; 
}/*下拉列表想的高度*/
QWidget#SpecificOrderForm>QComboBox QAbstractItemView::item
{height: 20px;
}/*选中项*/
QWidget#SpecificOrderForm>QComboBox QAbstractItemView::item:selected
{background-color:#3c3cb6;
}/*指令编辑框*/
QDialog#InstructionEditDialog>QWidget#widget
{background-color:#062977;border:2px solid #0b54f0;
}/*按钮名称标签*/
QWidget#widget>QLabel#label
{font-size: 18px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*按钮名称*/
QWidget#widget>QLineEdit#namelineEdit
{background-color:transparent;border-radius:2px;border:2px solid #0b54f0;font-size: 16px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*滚动区域*/
QWidget#widget>QScrollArea#scrollArea
{border:none;background-color:transparent;
}/*滚动区域的垂直滚动条的主体,滑道*/
QWidget#widget>QScrollArea#scrollArea QScrollBar:vertical
{width: 10px;/*滚动条宽度*/background-color: transparent;border-radius: 5px;margin:0px,0px,0px,0px;padding-top:0px;/*上、下箭头预留位置*/padding-bottom:0px;	border:none;
}/*上箭头背景*/
QWidget#widget>QScrollArea#scrollArea QScrollBar::add-line:vertical
{background-color:transparent;
}/*下箭头背景*/
QWidget#widget>QScrollArea#scrollArea QScrollBar::sub-line:vertical
{background-color:transparent;
}/*滑块下拉后,滑块上面的背景*/
QWidget#widget>QScrollArea#scrollArea QScrollBar::add-page:vertical
{background-color:transparent;
}/*滑块上拉后,滑块下面的背景*/
QWidget#widget>QScrollArea#scrollArea QScrollBar::sub-page:vertical
{background-color:transparent;
}/*滚动区域的滚动条的滑块*/
QWidget#widget>QScrollArea#scrollArea QScrollBar::handle:vertical
{background-color: #5FC6DD;opacity: 0.5;border-radius: 5px;width:10px;min-height:20;
}/*鼠标滑过滚动条*/
QWidget#widget>QScrollArea#scrollArea QScrollBar::handle:vertical:hover
{background-color: #00FBFF;opacity: 0.5;border-radius: 5px;
}/*滚动区域窗口*/
QScrollArea#scrollArea QWidget#scrollAreaWidgetContents
{background-color:transparent;border:none;
}/*确定,取消按钮*/
QWidget#widget>QPushButton
{background-color:transparent;border: 1px solid #FFFFFF;border-radius: 6px;font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*点击确定,取消按钮*/
QWidget#widget>QPushButton:pressed
{background-color: #00FBFF;opacity: 0.9;border-radius: 6px;font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #000337;
}

以上便是完整的代码。其中需要记录一下便是,当按钮被点击后,发送删除信号,来删除包含滋生在内的控件,因为是在鼠标点击事件中发送的删除控件信号,槽函数接收到信号删除控件之后,其中包含发送删除信号的按钮,然后继续返回到被删按钮的鼠标点击事件中,继续往下执行代码,这里将QPushButton::mousePressEvent(event);这句注释掉,因为按钮此时已被释放了,执行这句后程序会崩溃。当然这里这么解释可能不是很准确,但是确实和发送删除信号的按钮已经被删除有关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;从人工到自动化&#xff0c;从重复到创新&#xff0c;技术演进的历程中&#xff0c;伴随着开…

Guns 查询列表_入门试炼03

一、插入数据进行测试&#xff1a; INSERT INTO guns.sys_house (id, house_user, house_address, house_date, house_desc) VALUES (1949033474, 雨昕, 北京大兴区, 2019-05-30 17:20:25, 北京次渠南); INSERT INTO guns.sys_house (id, house_user, house_address, house_da…

Guns根据条件查询数据_入门试炼04

一、找到Controler&#xff0c;对方法进行修改即可实现 二、修改list方法 修改钱的方法&#xff1a; /*** 获取房屋管理列表**wrapper 条件*/RequestMapping(value "/list")ResponseBodypublic Object list(String condition) {return houseService.selectList(nul…

Storm精华问答 | 最火的流式处理框架——Storm

戳蓝字“CSDN云计算”关注我们哦&#xff01;Storm是Twitter开源的分布式实时大数据处理框架&#xff0c;被业界称为实时版Hadoop。 今天就为大家带来Storm诞生到发展再到实践&#xff0c;赶快学习起来吧&#xff01;1Q&#xff1a;Storm的诞生。A&#xff1a;在2011年Storm开…

Guns 添加功能实现_入门试炼05

找到添加页面&#xff0c;进行修改 源代码&#xff1a; 默认这些表平淡中的字段都需要&#xff0c;手写&#xff0c;不需要手写的可以删除&#xff0c;用别的策略代替即可 第一处&#xff1a; id 数据库设置的是自增的因此不需要&#xff0c;删除 第二处&#xff1a;房屋交付…

浪潮云ERP到底属于什么水平?

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;常常听到企业应用市场三巨头&#xff0c;用友、金蝶、浪潮&#xff0c;但如果问…

Guns 编辑功能实现_入门试炼06

一、编辑功能默认实现 未修改前的样图&#xff1a; 案例演示&#xff1a; 将刘英3 、北京大兴区2、次渠2&#xff0c;更新为刘英5 、北京大兴区5、次渠5 选中需要修改的那条数据&#xff0c;点击修改按钮。 未提交表单前&#xff1a; 更新完成后&#xff1a; 想学习更多…

小米回应有品特殊激励需放弃年终奖……外媒说,荷兰运营商KPN允许华为有限参与5G网络建设;传苹果挖角英特尔5G工程师...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go AT&#xff06;T实现2Gbps的…

Guns 删除功能_入门试炼07

一、删除功能默认实现 选中需要删除的数据执行删除操作即可 删除前截图&#xff1a; 删除后截图&#xff1a; 从截图中可以看出&#xff0c;删除的那条数据已经不在了。 想学习更多微服务、分布式、中间件、数据库、项目快速构建等系列技术 请跳转Gblfy个人专栏: www.gblf…

第一次更名为OpenInfra的“她”,给我们带来了哪些惊喜?| 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;在美国丹佛阴冷的天气中&#xff0c;开源业界最顶级的技术峰会&#xff0c;前身为Open…

稳居亚太第一,阿里云进军全球;李彦宏候选工程院院士;苹果巨大损失:工业设计核心元老纷纷离职……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 【5月1日 星期三】云の声音不…

Guns 切换Oracle分支

远程拉取Guns代码 git clone gitgitee.com:gb_90/guns.git进入本地拉取Guns代码的目录下面 cd guns/切换到oracle分支 git checkout oracle切换到未删除Oracle配置的历史版本 提交id号是 &#xff1a;24466d6 git reset --hard 24466d6查看&#xff1b; dir导入idea开发工具效果…

ZStack张鑫:面对混合云浪潮 我们主动出击

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;人类首次捕获黑洞照片&#xff0c;让我们看到了原本幽暗的宇宙&#xff0c;也有…

MyBatis-Plus_简介

第 1 章 简介 MyBatisPlus 介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 代码及文档发布地址 官方地址: http://mp.baomidou.com 代码发布地址: G…

解决ORA-00257: 归档程序错误。在释放之前仅限于内部连接

文章目录一、预先准备1. 现象2. 异常信息3. 分析二、解决方案2.1. 登录oracle2.2. 查看ARCHIVED LOG空间占用率2.3. 查看元空间大小2.4. 整空间上限2.5. 结果验证一、预先准备 1. 现象 场景1&#xff1a; 昨天尝试通过plsqldev尝试连接oracle数据库&#xff0c;报错&#xff…

qt中根据数据解析的结果动态的创建控件并布局

引言 有时候程序中的控件的个数是无法预测的&#xff0c;当程序启动时&#xff0c;根据解析的数据动态的创建n行m列的控件&#xff0c;并为其布局。下面记录一下动态创建控件&#xff0c;并布局。 运行效果 示例 此示例主要是从json配置文件中读取参数&#xff0c;然后根据参…

5分钟带你了解Kafka的技术架构 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;大家都知道 Kafka 是一个非常牛逼的消息队列框架&#xff0c;阿里的 RocketMQ 也是在 …

Spark精华问答 | Spark的计算方法是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spark是一个针对超大数据集合的低延迟的集群分布式计算系统&#xff0c;比MapReducer快40倍左右&#xff0c;是hadoop的升级版本&#xff0c;Hadoop作为第一代产品使用HDFS&#xff0c;第二代加入了Cache来保存中间计算结果&#xf…

qt中创建控件布局以及删除原有布局和控件

引言 当根据数据来创建控件并布局时&#xff0c;如果数据更新&#xff0c;那么之前创建的控件便需要删除后重新创建布局。该文主要说明将原来的布局和控件删除&#xff0c;重新创建并布局。 示例 先看一下ui文件&#xff1a; 下面是实现代码&#xff1a; void StatusViewDi…

Spring精华问答 | Spring 能帮我们做什么?

Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持。今天就让我们一起来看看关于Spring的精华问答吧。1Q&#xff1a;什么是Spring框架&#xff1f;A&#xff1a;Spring框架是一个为Java应用程序的开发提供了综合、广泛的…