QTableView 例一(基于 QStandardItemModel)

1、 工程文件

QT       += core gui
QT += sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

2、Tabview 界面

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlDatabase>

class QTableView;
class QStandardItemModel;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;

    QStandardItemModel * model;
    QTableView *tableView;
    QSqlDatabase database;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QtDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QTableView>
#include <QStandardItemModel>
#include <QHeaderView>
#include <QPushButton>

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

	// 打开数据库
    QString path = QCoreApplication::applicationDirPath()+"/tableview-deom.db";
    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName(path);
    if(database.open())
    {
        qDebug()<< "open successed";
    }
    else
    {
        qDebug()<< "open failed";
    }

    QSqlQuery m_qy(database);
    if(!m_qy.exec(QString("select * from user")))
    {
          qDebug()<<"error:"<<m_qy.lastError();
    }

	//首先从标准model说起
    QStandardItemModel * model = new QStandardItemModel;
	
	//以下初始化的顺序不能乱
    while (m_qy.next()) {

        QStandardItem * item1 = new QStandardItem(m_qy.value(0).toString());
        QStandardItem * item2 = new QStandardItem(m_qy.value(1).toString());
        QStandardItem * item3 = new QStandardItem(m_qy.value(2).toString());
        QStandardItem * item4 = new QStandardItem(m_qy.value(3).toString());
        QStandardItem * item5 = new QStandardItem(m_qy.value(4).toString());
        QStandardItem * item6 = new QStandardItem(m_qy.value(5).toString());
        QStandardItem * item7 = new QStandardItem(m_qy.value(6).toString());

        QList<QStandardItem*> list;
        list<<item1<<item2<<item3<<item4<<item5<<item6<<item7;
        model->appendRow(list);
    }

    tableView = new QTableView(this);
    tableView-> setModel(model);

    model-> setHeaderData( 0, Qt:: Horizontal, "ID_Hiden");
    model-> setHeaderData( 1, Qt:: Horizontal, "姓名");
    model-> setHeaderData( 2, Qt:: Horizontal, "电话");
    model-> setHeaderData( 3, Qt:: Horizontal, "PW_Hiden");
    model-> setHeaderData( 4, Qt:: Horizontal, "家乡");
    model-> setHeaderData( 5, Qt:: Horizontal, "默认");
    model-> setHeaderData( 6, Qt:: Horizontal, "部门");

    //隐藏第0、3例
    tableView->setColumnHidden(0,true);
    tableView->setColumnHidden(3,true);

    //设置行头与列头的样式
    tableView->horizontalHeader()->setStyleSheet("QHeaderView::section {"
                                                           "color: black;padding-left: 4px;border: 1px solid #6c6c6c;}");
    tableView->verticalHeader()->setStyleSheet("QHeaderView::section {"
                                                           "color: black;padding-left: 4px;border: 1px solid #6c6c6c;}");

    //不可以编辑
    tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    //可以选择多行
    tableView->setSelectionMode(QAbstractItemView::SelectionMode::MultiSelection);
    //按行选择
    tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

    //使表格颜色交错功能为真
    tableView-> setAlternatingRowColors( true);
    //设置表格颜色
    tableView-> setStyleSheet( "QTableView{background-color: rgb(250, 250, 250);"
    "alternate-background-color: rgb(234, 234, 234);}");
    tableView->resize(800,800);


    QPushButton *getBtn = new QPushButton(this);

    getBtn->setText("获取选中内容");

    getBtn->resize(120,40);
    getBtn->move(400,400);

    connect(getBtn,&QPushButton::clicked,this,[this](){

        //已经选中的行
        QItemSelectionModel *selections =   tableView->selectionModel();
        QModelIndexList selected = selections->selectedIndexes();

        QSet<int> rowIdset;
        QStringList passwordlist;
        QStringList namelist;
        for (QModelIndex index: selected)
        {
            if(index.column() == 0)
            {
                rowIdset<<index.data().toInt();
            }
            else if(index.column() == 1)
            {
                namelist<<index.data().toString();
            }
            else if(index.column() == 3)
            {
                passwordlist<<index.data().toString();
            }
        }

        qDebug()<<"hiden Id:"<<rowIdset;
        qDebug()<<"name:"<<namelist;
        qDebug()<<"password:"<<passwordlist;
    });
}

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

3、 数据库

在这里插入图片描述

4、运行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值