-
程序运行效果
- 实现效果
3.代码展示
首先在布局中建立如下图所示的布局
然后开始正式的代码展示
这是cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QButtonGroup>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->twStudent->setColumnCount(4);
QStringList qs;
qs<<"姓名"<<"性别"<<"年龄"<<"籍贯";
ui->twStudent->setHorizontalHeaderLabels(qs);
//设置列的宽度
QHeaderView *pHv = ui->twStudent->horizontalHeader();
pHv->setSectionResizeMode(QHeaderView::Stretch);
//初始化列表内容
appendRow("张三","男",20,"广东");
appendRow("李四","男",20,"西安");
appendRow("王五","男",20,"新疆");
appendRow("王刘","女",20,"广东");
appendRow("李白","男",20,"西安");
appendRow("王孙了","男",20,"新疆");
//设置行表头
if(pHv->isHidden())
{
ui->cboHeader->setChecked(false);
}
else
ui->cboHeader->setChecked(true);
connect(ui->cboHeader,&QCheckBox::stateChanged,[=](int stat){
if(stat == Qt::Checked)
{
pHv->show();
}
else
pHv->hide();
});
//3.设置列表头
QHeaderView *pvv=ui->twStudent->verticalHeader();
if(pvv->isHidden())
{
ui->cboHeader->setChecked(false);
}
else
ui->cboHeader->setChecked(true);
connect(ui->cboVHeader,&QCheckBox::stateChanged,[=](int stat){
if(stat == Qt::Checked)
{
pvv->show();
}
else
pvv->hide();
});
//设置交替显示背景色
bool bFlag = ui->twStudent->alternatingRowColors();
if(bFlag)
{
ui->cboAitemate->setChecked(true);
}
else
ui->cboAitemate->setChecked(false);
connect(ui->cboAitemate,&QCheckBox::stateChanged,[=](int state){
if(state == Qt::Checked)
ui->twStudent->setAlternatingRowColors(true);
else
ui->twStudent->setAlternatingRowColors(false);
});
//单元格是否可编辑
int trigger=ui->twStudent->editTriggers();
if(trigger == QAbstractItemView::NoEditTriggers)
ui->cboEdiCell->setChecked(false);
else
ui->cboEdiCell->setChecked(true);
connect(ui->cboEdiCell,&QCheckBox::stateChanged,[=](int state){
if(state==Qt::Checked)
ui->twStudent->setEditTriggers(QAbstractItemView::DoubleClicked);
else
ui->twStudent->setEditTriggers(QAbstractItemView::NoEditTriggers);
});
//选择行还是选择单元格
int selState=ui->twStudent->selectionBehavior();
if(selState == QAbstractItemView::SelectRows)
ui->rbRow->setChecked(true);
else
ui->rbCell->setChecked(true);
m_rbGroup = new QButtonGroup(this);
m_rbGroup->addButton(ui->rbRow,0);
m_rbGroup->addButton(ui->rbCell,1);
connect(ui->rbRow,&QRadioButton::clicked,this,&MainWindow::onRbClicked);
connect(ui->rbCell,&QRadioButton::clicked,this,&MainWindow::onRbClicked);
}
void MainWindow::onRbClicked()
{
ui->twStudent->setSelectionMode(QAbstractItemView::SingleSelection);
int checkedId = m_rbGroup->checkedId();
if(checkedId == 0)
ui->twStudent->setSelectionBehavior(QAbstractItemView::SelectRows);
if(checkedId == 1)
ui->twStudent->setSelectionBehavior(QAbstractItemView::SelectItems);
}
void MainWindow::appendRow(QString _name,QString _gender,int _age,QString _province,int _row)
{
if(_row == -1)
{
_row=ui->twStudent->rowCount();
ui->twStudent->setRowCount(_row+1);
}
QTableWidgetItem * nameItem = new QTableWidgetItem(QIcon(":/C:/Users/LEICH/Pictures/Saved Pictures/1.jpg"),_name);
QTableWidgetItem * genderItem = new QTableWidgetItem(_gender);
QTableWidgetItem * ageItem = new QTableWidgetItem(QString::number(_age));
QTableWidgetItem * provinceItem = new QTableWidgetItem(_province);
ui->twStudent->setItem(_row,0,nameItem);
ui->twStudent->setItem(_row,1,genderItem);
ui->twStudent->setItem(_row,2,ageItem);
ui->twStudent->setItem(_row,3,provinceItem);
nameItem->setTextAlignment(Qt::AlignCenter);
genderItem->setTextAlignment(Qt::AlignCenter);
ageItem->setTextAlignment(Qt::AlignCenter);
provinceItem->setTextAlignment(Qt::AlignCenter);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_twStudent_itemClicked(QTableWidgetItem *item)
{
int row = item->row();
QString name = ui->twStudent->item(row,0)->text();
QString gender = ui->twStudent->item(row,1)->text();
QString age = ui->twStudent->item(row,2)->text();
QString province = ui->twStudent->item(row,3)->text();
ui->leName->setText(name);
ui->leGender->setText(gender);
ui->leAge->setText(age);
ui->leProvince->setText(province);
}
void MainWindow::on_btnAppend_clicked()
{
QString name=ui->leName->text();
QString gender=ui->leGender->text();
int age=ui->leAge->text().toInt();
QString province=ui->leProvince->text();
if(name.isEmpty() || gender.isEmpty()|| age<=0||province.isEmpty())
{
QMessageBox::warning(this,"警告","请输入完整信息");
return;
}
appendRow(name,gender,age,province);
}
void MainWindow::on_btnInster_clicked()
{
QString name=ui->leName->text();
QString gender=ui->leGender->text();
int age=ui->leAge->text().toInt();
QString province=ui->leProvince->text();
if(name.isEmpty() || gender.isEmpty()|| age<=0||province.isEmpty())
{
QMessageBox::warning(this,"警告","请输入完整信息");
return;
}
int curRow = ui->twStudent->currentRow();
ui->twStudent->insertRow(curRow);
appendRow(name,gender,age,province,curRow);
}
void MainWindow::on_btnDelet_clicked()
{
int curRow = ui->twStudent->currentRow();
if(curRow<0)
{
QMessageBox::warning(this,"警告","请请选择要删除的项");
return;
}
ui->twStudent->removeRow(curRow);
}
void MainWindow::on_btnModify_clicked()
{
QString name=ui->leName->text();
QString gender=ui->leGender->text();
QString age=ui->leAge->text();
QString province=ui->leProvince->text();
if(name.isEmpty() || gender.isEmpty()|| age<=0||province.isEmpty())
{
QMessageBox::warning(this,"警告","请输入完整信息");
return;
}
int curRow = ui->twStudent->currentRow();
ui->twStudent->item(curRow,0)->setText(name);
ui->twStudent->item(curRow,1)->setText(gender);
ui->twStudent->item(curRow,2)->setText(age);
ui->twStudent->item(curRow,3)->setText(province);
}
int flag=0;//设置样式表标志位
void MainWindow::on_pushButton_clicked()
{
flag++;
if(flag)
{
//单元格样式
QString cellStyle=R"(QTableView
{
background-color: rgba(0,125,55,255);
alternate-background-color: #003600;
font: 12px "新宋体";
color: #ffff56;
gridline-color: #00ddf0;
})";
ui->twStudent->setStyleSheet(cellStyle);
//水平样式
pHV = ui->twStudent->horizontalHeader();
QString hHeaderStyle=R"(
QHeaderView::section
{
background-color: rgba(88,25,0,125);
font: 18px "隶书";
height: 32px;
border: 1px solid #8faa34;
border-left: none;
color: white;
}
)";
pHV->setStyleSheet(hHeaderStyle);
//垂直样式
QString vHeader = R"(
QHeaderView::section
{
background-color: rgba(88,125,5,125);
font: 14px "微软雅黑";
width: 40px;
border: 1px solid #8f00c9;
border-left: none;
color: #00ffff;
}
)";
pHV= ui->twStudent->verticalHeader();
pHV->setStyleSheet(vHeader);
flag=-1;
}
else
{
pHV = ui->twStudent->horizontalHeader();
QString hHeaderStyle="";
pHV->setStyleSheet("hHeaderStyle");
ui->twStudent->setStyleSheet("");
QString vHeader="";
pHV=ui->twStudent->verticalHeader();
pHV->setStyleSheet(vHeader);
}
}
这是h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QButtonGroup>
#include <QTableWidgetItem>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QButtonGroup *m_rbGroup;
QHeaderView * pHV;
void onRbClicked();
void onItemClicked();
void appendRow(QString ,QString,int ,QString ,int =-1);
private slots:
void on_twStudent_itemClicked(QTableWidgetItem *item);
void on_btnAppend_clicked();
void on_btnInster_clicked();
void on_btnDelet_clicked();
void on_btnModify_clicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H