Qt 入门

使用Qt实现一个简易的员工管理系统,涉及查找、添加员工。

创建

在这里插入图片描述

目录结构

在这里插入图片描述

  • find.pro: 工程文件
  • mainwindow.h: 窗口类头文件
  • mainwindow.cpp: 窗口类源文件,主要的功能都在这里实现
  • mainwindow.ui: 界面设计

界面设计

双击mainwindow.ui,从左侧拖动组件到右侧窗口区域
常用组件:

  • push button:按钮
  • radio button:单选按钮
  • check box:复选框
  • list view:列表
  • tree view:树形结构
  • table view:表格
  • combo box:下拉框
  • edit:输入框
  • label:静态文本

在右下角可以编辑每个控件的属性,其中objectName代表控件的标识,会在代码中用到。
在这里插入图片描述
右键按钮,选择转到槽,选择信号cliked(),会在mainwindow.cpp中自动创建一个函数,void MainWindow::on_pushButton_clicked()。当按钮被点击时,会执行这个函数,所以说主要的功能都在mainwindow.cpp中实现。
在这里插入图片描述
在这里插入图片描述

代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QStandardItemModel>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots://槽,on_pushButton_xxx_clicked函数分别相应不同的按钮点击信号
    void on_pushButton_clicked();

    void on_pushButton_find_clicked();

    void on_pushButton_add_clicked();

private:
    Ui::MainWindow *ui;
    QStandardItemModel* model;
};
#endif // MAINWINDOW_H
初始化

MainWindow::MainWindow为窗口类MainWindow的构造函数,因此可以在这里进行初始化工作。

从文件中读取数据,并加载到表格中。表格的标识objectName在设计界面中被设为tableView,在代码中使用ui->tableView来调用它。创建一个model用于控制表格的数据,调用setItem(行,列,数据)来添加数据。

查找

ui->textEdit_id->toPlainText():获取输入框textEdit_id的文本,
ui->tableView->model()->rowCount():获取行数,通过for循环遍历每一行数据与输入的id进行比较,找到后通过setText将姓名和性别输入框设置为查找到的数据。未找到则创建一个消息框QMessageBox提示未找到。

添加

获取行数,在新的一行调用model的setItem添加数据

qDebug:将数据输出到控制台而不是窗口界面,便于调试

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    /*
    QString fileName = QFileDialog::getOpenFileName(this, "open file", "/Users/zforw"); //创建文件对话框手动选择文件
    if(fileName.isEmpty() == true){
        QMessageBox::warning(this, "warning", "选择文件无效");
        return;
    }
    QFile file(fileName);
    */

    //创建文件对象
    QFile file("/Users/zforw/Downloads/emp.txt");
    //指定打开方式 open
    bool isOk = file.open(QFile::ReadWrite);//以读写方式打开,可以only read,only write
    if(isOk == false){
        QMessageBox::critical(this, "critical", "打开文件失败");
        return;
    }
    model = new QStandardItemModel(ui->tableView);
    int i = 0;
    while(!file.atEnd())
    {
        QString string = file.readLine();
        QStringList strList = string.split(" ");
        strList[2].replace(QString("\n"), QString(""));
        qDebug() << strList[0] << "," << strList[1] << "," << strList[2]; 
        model->setItem(i, 0, new QStandardItem(strList[0]));
        model->setItem(i, 1, new QStandardItem(strList[1]));
        model->setItem(i, 2, new QStandardItem(strList[2]));
        ui->tableView->setModel(model);
        i++;
    }
    file.close();
}

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

void MainWindow::on_pushButton_clicked() {}

void MainWindow::on_pushButton_find_clicked()
{
    QString id = ui->textEdit_id->toPlainText();
    //int i = id.toInt();
    int rows = ui->tableView->model()->rowCount();
    for(int r = 0; r < rows; r++)
    {
        if(ui->tableView->model()->index(r,0).data().toString() == id) {
            qDebug() << r;
            ui->textEdit_name->setText(ui->tableView->model()->index(r,1).data().toString());
            ui->textEdit_gender->setText(ui->tableView->model()->index(r,2).data().toString());
            return;
        }
    }
    QMessageBox msg(this);
    msg.setText("未找到");
    msg.exec();
}

void MainWindow::on_pushButton_add_clicked()
{
    int rows = ui->tableView->model()->rowCount();
    qDebug() << rows;
    model->setItem(rows, 0, new QStandardItem(ui->textEdit_id->toPlainText()));
    model->setItem(rows, 1, new QStandardItem(ui->textEdit_name->toPlainText()));
    model->setItem(rows, 2, new QStandardItem(ui->textEdit_gender->toPlainText()));
    ui->tableView->setModel(model);
}

运行

数据
在这里插入图片描述

初始
初始
查找
在这里插入图片描述

添加
在这里插入图片描述

设置列名

model->setColumnCount(3);
model->setHeaderData(0,Qt::Horizontal, "工号");
model->setHeaderData(1,Qt::Horizontal, "姓名");
model->setHeaderData(2,Qt::Horizontal, "性别");

其他

常用类型:QString、QVector、QQueue、QList …

作图:QPen、QPoint、QPainter、QBrush
通过在需要的代码中调用update();来调用paintEvent()绘画。

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPen redPen, blackPen, bluePen;
    blackPen.setWidth(2);//设置线宽
    blackPen.setColor(Qt::black);
    //pen.setColor(Qt::red);//设置为红色
    //pen.setColor(QColor(150,25,96));//使用RGB设置颜色
    painter.setPen(redPen);
	painter.drawLine(QPoint_xxx, QPoint_xxx);
	painter.drawRect(50,50,200,100);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值