【qt】QTableWidget 表格组件2

简介: 【qt】QTableWidget 表格组件

【qt】QTableWidget 表格组件1:https://developer.aliyun.com/article/1523067

5.添加每个单元格

①:设置单元格信息

我们可以来创建一个函数来实现我们行信息的初始化,这里使用了随机数来模拟我们的数据。

QStringList jobs={"开发商","高级工程师","架构师","程序员","牛马"};
for(int i=0;i<rows;i++)
    {
        MaxNo++;//每创建一行,我就计数加1
        creatRows(i,QString::asprintf("员工%d",MaxNo),MaxNo,rand()%2?"男":"女",
                  QDate(rand()%2000+10,rand()%12+1,rand()%30+1),jobs[rand()%5],rand()%2);
    }

在mainwindow.cpp中添加一个成员函数和一个计数的MaxNo,记得对于时间参数姚家一个头文件。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDate>

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;
    void initUI();
    int MaxNo;
    void creatRows(int rowNumber,QString name,int number,QString gender,QDate birthday,QString job,bool married);
};
#endif // MAINWINDOW_H

②:添加单元格

基本逻辑就是先创建一个单元格,然后用setItem来加到表格中。

void MainWindow::creatRows(int rowNumber,QString name,int number,QString gender,QDate birthday,QString job,bool married)
{
    QTableWidgetItem*item=new QTableWidgetItem(name);
    item->setData(Qt::UserRole,QVariant(number));//添加附加值
    ui->tableWidget->setItem(rowNumber,0,item);//设置单元格信息

    item=new QTableWidgetItem(gender);
    QIcon icon;
    if(gender=="男")
    {
        icon.addFile(":/image/boy.png");
    }
    else
    {
        icon.addFile(":/image/girl.png");
    }
    item->setIcon(icon);//这个是显示图片的,下面的截图忘记添加了
    ui->tableWidget->setItem(rowNumber,1,item);

    item=new QTableWidgetItem(birthday.toString("yyyy-MM-dd"));
    ui->tableWidget->setItem(rowNumber,2,item);

    item=new QTableWidgetItem(job);
    ui->tableWidget->setItem(rowNumber,3,item);

    item=new QTableWidgetItem(married?"已婚":"未混");
    if(married)
    {
        item->setBackground(Qt::gray);//还可以设置背景色
    }
    ui->tableWidget->setItem(rowNumber,4,item);

}

③:单元格附加值

item->setData(Qt::UserRole,QVariant(number));//添加附加值

④:单元格文本对其方式

现在的运行结果:

我们可以发现我们单元格的信息没有居中,我们可以通过setTextAlignment接口来设置

item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

参数可以在F1文档中去查找:

运行结果:

哈哈,我们的表格就生成好了,是不是很完美哈哈,接下来我们要来添加功能了,让表格动起来!

三.编辑功能

1.编辑逻辑

就是有一个接口可以设置表格编辑的触发器,来使我们可以控制表格是否可以被编辑。

2.设置编辑触发器

默认状态下表格是可以进行编辑的


现在我们来设置不能对其进行编辑。

在mianWindow的构造函数里添加

ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

参数还是可以通过F1在线文档去找。

现在就不可以编辑了。

3.实现编辑action

根据是否打开复选框acyion来设置编辑触发器的模式来控制是否能编辑。

void MainWindow::on_actionEdit_triggered(bool checked)
{
    if(checked)
    {
        //双击和选中单击都可以进行编辑
        ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);
    }
    else
    {
        //禁止编辑
        ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }
}

运行结果:

四.插入功能

1.插入逻辑

我们要获取我们鼠标的位置来确定我们要插入的位置,其次插入有一个接口可以实现插入一行,但是是空行,所以首先需要我们先创建一行。

2.获取当前行

int currentRow=ui->tableWidget->currentRow();

3.插入行

通过我们刚刚的函数来创建行信息

    MaxNo++;//插一行计算加1
    ui->tableWidget->insertRow(currentRow);
    creatRows(currentRow,"未知",MaxNo,"男",QDate(2000,1,1),"未知",false);


4.选择新行

现在有个问题就是当我插入新行时,他会选择刚刚插入的那个位置,而不是我们新插入的位置。

解决办法:

ui->tableWidget->selectRow(currentRow);

5.能否编辑

现在还有一个问题,我们新插入的数据居然不能编辑,这不就插了更没有插入一样的嘛。

void MainWindow::on_actionInsert_triggered()
{
    int currentRow=ui->tableWidget->currentRow();
    //对当前行添加信息

    MaxNo++;
    ui->tableWidget->insertRow(currentRow);
    ui->tableWidget->selectRow(currentRow);
    creatRows(currentRow,"未知",MaxNo,"男",QDate(2000,1,1),"未知",false);
    on_actionEdit_triggered(true);//插入的时候,可以将编辑功能打开
}

现在就可以进行编辑了。

但是又出现一个小问题

就是我们肯定只希望只能编辑插入的数据,结果这样一开,所有的行都能编辑了。

解决方案:我们可以通过表格的信号来判断,我当前的光标位置是不是在我刚刚插入的位置,是就打开编辑,不是就关闭编辑。

如果默认打开编辑功能,那这种情况不存在。

选择这个信号:

在插入功能函数中记录插入的位置

insertRow=currentRow;
void MainWindow::on_tableWidget_itemSelectionChanged()
{
    if(ui->actionEdit->isChecked()) return;

    if(insertRow==ui->tableWidget->currentRow())
    {
        on_actionEdit_triggered(true);
    }
    else
    {
        on_actionEdit_triggered(false);
    }
}

运行结果:


【qt】QTableWidget 表格组件3:https://developer.aliyun.com/article/1523077

相关文章
|
30天前
【qt】Tool Box组件
【qt】Tool Box组件
20 0
|
2天前
Qt安装之后添加或移除组件(Qt Creator 10.0.1)
Qt安装之后添加或移除组件(Qt Creator 10.0.1)
14 2
|
30天前
【qt】QTableWidget 表格组件3
【qt】QTableWidget 表格组件
18 0
|
30天前
【qt】QTableWidget 表格组件1
【qt】QTableWidget 表格组件
17 0
|
30天前
|
索引 Windows
【qt】QTreeWidget 树形组件2
【qt】QTreeWidget 树形组件
21 0
|
30天前
|
C++
【qt】QTreeWidget 树形组件1
【qt】QTreeWidget 树形组件
26 0
|
30天前
【qt】QListWidget 组件3
【qt】QListWidget 组件
11 0
|
30天前
【qt】QListWidget 组件2
【qt】QListWidget 组件
28 0
|
9天前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
9天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库