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、运行起来

复制代码
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,动动你的金手指,祝您早日实现财务自由。
相关推荐
Justinyh18 小时前
1、CUDA 编程基础
c++·人工智能
应用市场19 小时前
Qt QTreeView深度解析:从原理到实战应用
开发语言·数据库·qt
ooooooctober19 小时前
PHP代码审计框架性思维的建立
android·开发语言·php
864记忆19 小时前
Qt Widgets 模块中的函数详解
开发语言·qt
white-persist19 小时前
差异功能定位解析:C语言与C++(区别在哪里?)
java·c语言·开发语言·网络·c++·安全·信息可视化
q***728719 小时前
Golang 构建学习
开发语言·学习·golang
hmbbcsm19 小时前
练习python题目小记(五)
开发语言·python
kokunka19 小时前
C#类修饰符功能与范围详解
java·开发语言·c#
ShineWinsu19 小时前
对于数据结构:链式二叉树的超详细保姆级解析—中
数据结构·c++·算法·面试·二叉树·校招·递归
仟濹20 小时前
【Java 基础】3 面向对象 - this
java·开发语言·python