qt 清除drawtext的字符串_【C++学习笔记】用Qt写一个学生管理系统

这篇博客介绍了如何使用Qt创建一个学生管理系统,包括主界面、添加学生和查询界面的设计。在添加学生功能中,详细阐述了如何获取控件内容,拼接成字符串并保存到文件,同时实现了清除控件文本的功能。在查询界面,讲解了设置查询格式、读取文件以及根据选择方式查询的逻辑。最后展示了程序的运行效果和关键代码片段。
摘要由CSDN通过智能技术生成

界面设计

一共有三个界面

主界面

e9d98a9fff00fee663a308ec4c4e26f3.png

添加学生界面

d7fc3c98bffd311d661f5de1ef6c6a4a.png

查询界面

b6e9e3ce581a2039d9a254c3305d3341.png

添加学生界面

答题思路是把每个获取每个控件的内容,把他们作为字符串拼接起来,在点击“确定”按钮时如果信息填写完整则存到一个文件中去,保存成功后再恢复默认状态(清除控件的文本或选中)

清除功能

0720f214b5167aa216c00766994e88cf.png

保存成字符串

d7f84502c9bd19e140562a8edf4bd91b.png

写入文件

1b4683cf0430989a66862adcc0e12ea8.png

查询界面

设置格式

9c0c148a5b04e616b7d9cd37a19b66b8.png

读取文件

a9b97c7ff73e4a7c9f3c25a48dc4116e.png

读取之后根据选择的方式进行查询

450231b9e0f76fafc2b34d454cce5cb3.png

781a01dfe6b1a1fdd7c9c6612c8c06ef.png

效果

03f244eefa1ca6cc6c4951912f0a70a2.png

完整代码

addstu.h

#ifndef ADDSTU_H
#define ADDSTU_H
#include <QDialog>
#include <QApplication>

QT_BEGIN_NAMESPACE
namespace Ui { class AddStu; }
QT_END_NAMESPACE

class AddStu : public QDialog
{
    Q_OBJECT

public:
    AddStu(QWidget *parent = nullptr);
    ~AddStu();
    void clearUserInterface();
    void writeToFile(QString cnt);

private slots:
    void on_btn_confirm_clicked();

private:
    Ui::AddStu *ui;
};
#endif // ADDSTU_H

addstu.cpp

#include "addstu.h"
#include "ui_addstu.h"
#include <QString>
#include <QDebug>
#include <QMessageBox>
#include <QList>
#include <QAbstractButton>
#include <QFile>
#include <QTextStream>
#include <QIODevice>
#include <QApplication>


AddStu::AddStu(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::AddStu)
{
    ui->setupUi(this);
    connect(ui->btn_cancel, SIGNAL(clicked()), this, SLOT(close()));
}

AddStu::~AddStu()
{
    delete ui;
}

void AddStu::clearUserInterface()
{
    ui->le_name->clear();
    ui->le_id->clear();
    ui->rbtn_male->setChecked(false);
    ui->rbtn_female->setChecked(false);
    ui->cbb_age->setCurrentIndex(1);
    ui->cbb_department->setCurrentIndex(0);
    QList<QAbstractButton*> ins_list = ui->insGroup->buttons();
    for(int i=0; i<ins_list.length(); i++)
        ins_list.at(i)->setChecked(false);
    ui->le_name->setFocus();
}

void AddStu::on_btn_confirm_clicked()
{
    const QString& name = ui->le_name->text();
    const QString& id = ui->le_id->text();
    if(name.length() < 1 || id.length() < 1) {
        QMessageBox::critical(this, "错误","信息填写不完整", "确定");
        return;
    }


    QList<QAbstractButton*> ins_list = ui->insGroup->buttons();
    QString ins;
    for(int i=0; i<ins_list.length(); i++)
    {
        if(ins_list.at(i)->isChecked()) {
            ins += ins_list.at(i)->text() + ' ';
        }
    }


    QString content = name + 'n' + id;

    if(ui->sexGroup->checkedId() != -1) {
        QString sex = ui->sexGroup->checkedButton()->text();
        content += ('n'+sex);
    }

    QString age = ui->cbb_age->currentText();
    QString department = ui->cbb_department->currentText();
    QString sex = ui->sexGroup->checkedButton()->text();
    content += 'n' + age + 'n' + department;
    content += 'n' + ins;
    QString cnt = name + " " + id + " " + sex + " " + age + " " + department + " " + ins + 'n';


    if(name.length() < 1 || id.length() < 1 || ins.length() < 1) {
        QMessageBox::critical(this, "错误","信息填写不完整", "确定");
    }
    else {
        int ret = QMessageBox::question(this, "请确认信息", content, "确认", "取消");
        switch(ret) {
        case 0:
            clearUserInterface();
            writeToFile(cnt);
            break;
        }
    }
}

void AddStu::writeToFile(QString cnt)
{
    QFile file("stu.txt");
    if(!file.open(QIODevice::Append | QIODevice::Text)) {
        QMessageBox::critical(this, "错误", "文件打开失败,信息没有保存,请重试", "确定");
        return;
    }
    QTextStream out(&file);
    out << cnt;
    file.close();
}

dialog.h(查询界面)

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QFile>
#include <QList>
#include <QString>
#include <QStandardItem>
#include <QStandardItemModel>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();
    int readFromFile();
    void doQuery(int index,QString cnt);
    void display(int row, QStringList subs);

private slots:
    void on_btn_search_clicked();

private:
    Ui::Dialog *ui;
    QList<QString> stu_lines;
    QStandardItemModel* model;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QFile>
#include <QList>
#include <QTextStream>
#include <QMessageBox>
#include <QDebug>
#include <QStandardItem>
#include <QStandardItemModel>


Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    if(readFromFile() == -1) {
        QMessageBox::critical(this, "严重错误", "文件打开失败,请重试", "确定");
        this->close();
    }
    this->model = new QStandardItemModel;
    //  设置表头
    this->model->setHorizontalHeaderItem(0, new QStandardItem("姓名"));
    this->model->setHorizontalHeaderItem(1, new QStandardItem("学号"));
    this->model->setHorizontalHeaderItem(2, new QStandardItem("性别"));
    this->model->setHorizontalHeaderItem(3, new QStandardItem("年龄"));
    this->model->setHorizontalHeaderItem(4, new QStandardItem("院系"));
    this->model->setHorizontalHeaderItem(5, new QStandardItem("兴趣"));

    this->ui->tableView->setModel(model);

    this->ui->tableView->setColumnWidth(0,100);
    this->ui->tableView->setColumnWidth(1,150);
    this->ui->tableView->setColumnWidth(2,50);
    this->ui->tableView->setColumnWidth(3,50);
    this->ui->tableView->setColumnWidth(4,100);
    this->ui->tableView->setColumnWidth(5,150);
}

Dialog::~Dialog()
{
    delete ui;
}

int Dialog::readFromFile()
{
    QFile file("stu.txt");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return -1;
    QTextStream in(&file);
    while(!in.atEnd())
        stu_lines.append(in.readLine());
    return 1;
    file.close();
}

void Dialog::doQuery(int index, QString cnt)
{
    int row = 0;
    for(int i=0; i<stu_lines.length(); i++)
    {
        QString line = stu_lines[i];
        line = line.trimmed();
        QStringList characteristic = line.split(" ");
        switch(index)
        {
        case 1:
            if(characteristic[0] == cnt)
                display(row++, characteristic);
            break;

        case 2:
            if(characteristic[1] == cnt)
                display(row++, characteristic);
            break;

        case 3:
            if(characteristic[4] == cnt)
                display(row++, characteristic);
            break;

        default:
            break;
        }
    }
}

void Dialog::display(int row, QStringList subs)
{
    int i;
    for(i=0; i<5; i++) {
        this->model->setItem(row, i, new QStandardItem(subs[i]));
    }
    QString ins;
    for(i=5; i<subs.length(); i++) {
        ins += subs[i] + " ";
    }
    this->model->setItem(row, 5, new QStandardItem(ins));
}

void Dialog::on_btn_search_clicked()
{
    this->model->clear();
    this->model->setHorizontalHeaderItem(0, new QStandardItem("姓名"));
    this->model->setHorizontalHeaderItem(1, new QStandardItem("学号"));
    this->model->setHorizontalHeaderItem(2, new QStandardItem("性别"));
    this->model->setHorizontalHeaderItem(3, new QStandardItem("年龄"));
    this->model->setHorizontalHeaderItem(4, new QStandardItem("院系"));
    this->model->setHorizontalHeaderItem(5, new QStandardItem("兴趣"));

    this->ui->tableView->setModel(model);
    this->ui->tableView->setColumnWidth(0,100);
    this->ui->tableView->setColumnWidth(1,150);
    this->ui->tableView->setColumnWidth(2,50);
    this->ui->tableView->setColumnWidth(3,50);
    this->ui->tableView->setColumnWidth(4,100);
    this->ui->tableView->setColumnWidth(5,150);

    int index = ui->cbb_method->currentIndex();
    QString cnt = ui->le_cnt->text();
    doQuery(index, cnt);
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "addstu.h"
#include "dialog.h"
#include <QMainWindow>
#include <QApplication>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:



    void on_actionAddStudent_triggered();



    void on_actionQueryStudent_triggered();

private:
    Ui::MainWindow *ui;
    AddStu a;
    Dialog d;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "addstu.h"
#include <QApplication>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::on_actionAddStudent_triggered()
{
    this->a.show();
}



void MainWindow::on_actionQueryStudent_triggered()
{
    this->d.show();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值