学习记录-Qt窗口控件的动态添加和删除

一般用Qt写软件,使用designer创建一个窗口,拖几个控件进行一下布局就够用了,但有些需求,需要自定义各种类型的控件,并且很多控件需要根据数据的交互,动态的添加和删除,为此学习了一下Qt的实现方法,在此记录之。

方法是,使用布局的addWidget函数添加控件,删除时使用removeWidget函数,需要设置控件的deleteLater属性,也可以使用delete直接删除。

void ConItem01::checkClick(bool state)
{
    QCheckBox *chk = (QCheckBox *)sender(); //转换成指定的类
    QString objName = chk->objectName();    //得到发出信号的对象名
    if (objName == "chk1") {
        if(state){                          //根据状态选择增加或者删除控件
            Frame *fm = new Frame;          //初始化一个自定义的控件类
            fm->setObjectName(tr("1#"));    //设置新增对象名称
            fm->setTitle(1);                //自定义函数
            ui->verticalLayout->addWidget(fm); //添加到水平布局(这里根据需要选择布局)
        }else{
            Frame *fm = ui->scrollArea->findChild<Frame*>("1#"); //找到指定名称的控件
            ui->verticalLayout->removeWidget(fm);                //移除控件
            fm->deleteLater();                                   
            //delete fm;                                         //使用delete也可以
        }
    <span style="font-family: Arial, Helvetica, sans-serif;">}</span><span style="font-family:Arial, Helvetica, sans-serif;">}</span>

其中,需要注意:

1、新增的控件名称不要重复,以免自己删除时找不到;

2、在需要动态增减控件的部件上添加一个布局控件,然后在布局上增减控件,这样部件大小会跟着变化;

3、新增的控件一定要设置一个控件大小的最小宽和高,不然加入布局就缩到最小了;

4、删除时找指定控件,一定要在部件上找,不要在布局上,否则程序会崩溃;

5、如果有多处操作会删除控件,在分findChild函数后加上指针为空判断,防止程序崩溃。

效果图:





  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
校园卡管理系统通常是一个用于管理学校内部学生和员工卡片信息的应用程序,包括数据录入、查询、修改和删除等功能。使用C++编写这个系统,并结合Qt库创建用户界面,可以使开发者更方便地处理图形化操作。 由于完整的源代码在这里不便提供(因为它会非常长且复杂),我会给你概述一个基本框架,以及如何使用Qt构建一个简单的窗口系统。首先,你需要安装Qt Creator或者直接在命令行中编译Qt项目。 1. **开始项目**: 创建一个新的Qt Widgets Application项目,这是使用C++Qt的标准选择。 2. **主窗体设计**: 在`.ui`文件中设计一个包含必要的控件如文本框、按钮等的窗口,比如用来输入学生的学号、姓名或查看余额。 ```cpp // mainwindow.ui QT_BEGIN_NAMESPACE Ui::MainWindow *ui = new Ui::MainWindow; MainWindow *mw = new MainWindow; ui->setupUi(mw); QTimer* timer = new QTimer(this); // 假设需要定时更新余额 connect(timer, &QTimer::timeout, mw, &MainWindow::updateBalance); // 连接信号槽 timer->start(5000); // 每5秒更新一次余额 ``` 3. **窗口类(MainWindow)**: 在`.cpp`文件中,定义窗口类并实现事件处理和功能方法。 ```cpp #include "mainwindow.h" void MainWindow::updateBalance() { // 假设从数据库获取余额的逻辑 QString balance = getStudentBalance(ui->studentIDLineEdit->text()); ui->balanceLabel->setText("当前余额:" + balance); } // 其他函数,如添加记录、搜索等,需要根据具体需求实现 ``` 4. **连接数据库**: 使用C++的数据库库(如QtSql、SQLite或MySQL驱动)来连接和操作数据库,获取、保存数据。 5. **事件处理器**: 处理用户的输入,如点击“查找”按钮触发数据库查询,更改窗口元素显示相应结果。 6. **运行应用程序**: 编译并运行项目,即可看到一个包含了Qt界面的校园卡管理系统雏形。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值