QT肝8天09--用户列表

1、先看颜值,点个赞

2、直接上干货

1、创建目录

在项目根目录下,创建目录subwin,创建目录的目的是分门别类管理文件,目录名称你自己定好。

2、添加文件

3、数据库添加方法

4、列表窗体UI布局设计

QTableWidget 概述

QTableWidget 是 Qt 中的一个表格控件,继承自 QTableView,用于显示和编辑二维表格数据。它提供了单元格级别的操作(如文本、图标、复选框等),适合处理小型静态数据或需要直接交互的场景。


核心功能

数据管理

  • 通过 setItem(row, column, QTableWidgetItem*) 设置单元格内容。
  • 通过 item(row, column) 获取单元格对象,支持文本、图标等属性修改。

行列操作

  • 使用 setRowCount()setColumnCount() 动态调整表格大小。
  • 通过 insertRow()removeColumn() 等方法增删行列。

样式与交互

  • 表头定制:horizontalHeader()verticalHeader() 控制行列标题。
  • 单元格编辑:setEditTriggers() 设置编辑条件(如双击编辑)。
  • 选择模式:setSelectionBehavior() 定义选中整行或单个单元格。

基本用法示例

cpp 复制代码
// 创建表格并设置行列数  
QTableWidget *table = new QTableWidget(3, 2);  
table->setHorizontalHeaderLabels({"Name", "Age"});  

// 填充数据  
QTableWidgetItem *item1 = new QTableWidgetItem("Alice");  
QTableWidgetItem *item2 = new QTableWidgetItem("25");  
table->setItem(0, 0, item1);  
table->setItem(0, 1, item2);  

// 设置单元格不可编辑  
item2->setFlags(item2->flags() & ~Qt::ItemIsEditable);  

使用 QTableWidget 创建表格

5、列表文件添加方法并实现方法

cpp 复制代码
#ifndef PEOPLEWIN_H
#define PEOPLEWIN_H
#include "sqlite3/sqlite3db.h"
#include <QWidget>

namespace Ui {
class PeopleWin;
}

class PeopleWin : public QWidget
{
    Q_OBJECT

public:
    explicit PeopleWin(QWidget *parent = nullptr);
    ~PeopleWin();
    void initUI();//初始化样式
    void initOperators();//初始化数据
    void BindOperatorList(OperatorInfoList operators);//绑定数据到列表

private slots:
    void on_btnSearch_clicked();

private:
    Ui::PeopleWin *ui;
};

#endif // PEOPLEWIN_H
cpp 复制代码
#include "peoplewin.h"
#include "sqlite3/sqlite3db.h"
#include "ui_peoplewin.h"

#include <QGraphicsDropShadowEffect>
#include <qgridlayout.h>

PeopleWin::PeopleWin(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::PeopleWin)
{
    ui->setupUi(this);
    initUI();//初始化UI界面
    initOperators();//初始化列表
    //设置搜索框提示信息
    ui->lineEdit->setPlaceholderText("请输入用户名或姓名");
}

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

void PeopleWin::initUI()
{
    // 设置图标
    this->setWindowIcon(QIcon(":/img/zhaoxi.png"));
    // 布局
    Qt::WindowFlags flags = this->windowFlags();
    flags |= Qt::FramelessWindowHint;       // //隐藏标题栏
    flags &= ~Qt::WindowMinMaxButtonsHint;  // 隐藏最小最大化按钮
    flags &= ~Qt::WindowCloseButtonHint;    // 隐藏关闭按钮
    this->setWindowFlags(flags);
}



//初始化数据
void PeopleWin::initOperators()
{
    OperatorInfoList operators;
    Sqlite3Db db;
    OperatorInfoList operatorinfs;
    if(db.selectOperators(operatorinfs)){
        //operatorinfs就是查到的列表
        BindOperatorList(operatorinfs);
    }
}

//绑定数据到列表
void PeopleWin::BindOperatorList(OperatorInfoList operators)
{
    ui->tableWidget->setRowCount(0);
    ui->tableWidget->verticalHeader()->hide();  // 默认的tablewidget 会有一列,这一列需要隐藏
    //设置标题栏的扩展模式为平铺
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);

    //循环绑定每个对象到列表
    for(int i=0;i<operators.size();i++){
        ui->tableWidget->setRowCount(i+1);
        ui->tableWidget->setRowHeight(i,40);//行高
        OperatorInfo opt=operators.at(i);//获取循环位置的对象
        // //第1列,绑定序号
        QTableWidgetItem *item=new QTableWidgetItem(QString::number(i+1));//创建一行记录
        item->setTextAlignment(Qt::AlignCenter);//对齐方式
        ui->tableWidget->setItem(i,0,item);//添加一行项目

        //第2列,绑定头像, 展示头像的时候,绘制一个图片
        QPixmap pIcon;
        pIcon.loadFromData(opt.icon);
        pIcon = pIcon.scaled(24, 24);
        auto picLabel = new QLabel;
        picLabel->setPixmap(pIcon);//设置图标
        picLabel->resize(36, 36);//设置尺寸
        auto cellWidget = new QWidget;
        auto layout = new QHBoxLayout;
        //layout->setMargin(0);
        layout->setAlignment(Qt::AlignCenter);
        layout->addWidget(picLabel);
        cellWidget->setLayout(layout);
        ui->tableWidget->setCellWidget(i, 1, cellWidget);
        ui->tableWidget->setColumnWidth(1,200);

        //第3列, 绑定姓名
        item = new QTableWidgetItem(QString("%1").arg(opt.name));
        item->setTextAlignment(Qt::AlignCenter);
        ui->tableWidget->setItem(i, 2, item);

        //第4列, 绑定用户名
        item = new QTableWidgetItem(QString("%1").arg(opt.username));
        item->setTextAlignment(Qt::AlignCenter);
        ui->tableWidget->setItem(i, 3, item);

        //第5列, 绑定地址
        item = new QTableWidgetItem(QString("%1").arg(opt.addr));
        item->setTextAlignment(Qt::AlignCenter);
        ui->tableWidget->setItem(i, 4, item);

        // 第6列,绑定性别
        QString gen;
        if (opt.gender == 0) {
            gen = "男";
        } else {
            gen = "女";
        }
        item = new QTableWidgetItem(gen);
        item->setTextAlignment(Qt::AlignCenter);
        ui->tableWidget->setItem(i, 5, item);

        cellWidget = new QWidget;
        layout = new QHBoxLayout;
        layout->setAlignment(Qt::AlignCenter);

        layout->setContentsMargins(0,0,0,0);
        cellWidget->setLayout(layout); 
    }
}

//刷新
void PeopleWin::on_btnSearch_clicked()
{
    initOperators();//重新加载
}

6、运行起来

复制代码
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,动动你的金手指,祝您早日实现财务自由。
相关推荐
眠りたいです2 小时前
基于脚手架微服务的视频点播系统-脚手架开发部分-brpc中间件介绍与使用及二次封装
c++·微服务·中间件·rpc·架构·brpc
山,离天三尺三3 小时前
基于LINUX平台使用C语言实现MQTT协议连接华为云平台(IOT)(网络编程)
linux·c语言·开发语言·网络·物联网·算法·华为云
吾疾唯君医3 小时前
记录GoLang创建文件并写入文件的中文乱码错误!
开发语言·后端·golang
小年糕是糕手4 小时前
【数据结构】算法复杂度
c语言·开发语言·数据结构·学习·算法·leetcode·排序算法
JAVA学习通4 小时前
微服务项目->在线oj系统(Java-Spring)--C端用户(超详细)
java·开发语言·spring
数据知道4 小时前
Go基础:Go语言ORM框架GORM详解
开发语言·jvm·后端·golang·go语言
计算机毕业设计小帅4 小时前
【2026计算机毕业设计】基于jsp的毕业论文管理系统
java·开发语言·毕业设计·课程设计
明天会有多晴朗4 小时前
深度剖析 C++ 之内存管理篇
c语言·开发语言·c++
potato_may4 小时前
C语言第3讲:分支和循环(上)—— 程序的“决策”与“重复”之旅
c语言·开发语言