欢迎光临散文网 会员登陆 & 注册

Qt学记六: QTableWidget(表格控件)

2021-11-28 16:07 作者:风菩提树  | 我要投稿

一.QT的QTableWidget简介

 QTabWidget是Qt中的表格组件。在窗体上,放一个QTabWidget,可以在Property Editor里对其进行属性设置,双击这个组件,可以打开一个编辑器,对其Colum、row和Item进行编辑。

表格第一行称为行表头,用于设置每一列的标题,第一列称为列表头,可以设置其标题(行号),一般缺省。行表头和列表头一般是不可编辑的。每个网格单元称为一个单元格。每个单元格有一个行号、列号。在QTableWidget表格中,每一个单元格是一个QTableWidgetItem对象,可以设置文字内容、字体等。

二、QTableWidget设置行表头

设置垂直方向的表头,即行表头

void QTableWidget::setHorizontalHeaderLabels(const QStringList &labels)

设置水平方向的表头,即列表头

void QStandardItemModel::setVerticalHeaderLabels(const QStringList &labels)
参数:
QStringList &labels:list容器中保存QSstring(字符串)


设置前,要用setColumnCount(int columns)设置好表格的列数,如下:

三、初始化表格数据

    在初始化时,表格要确定好填入数据的行数,即设置表格行。使用setRowCount确定表格的行数:

void QTableWidget::setRowCount(int rows)
参数:rows:表格行的行数目。

    在表格中,一个单元格就是一个QTableWidgetItem对象。在初始化数据时,new QTableWidgetItem;即是创建出一个单元格,然后设置QTableWidgetItem的数据或者文本属性等,再使用QTableWidget的setItem成员函数来将QTableWidgetItem添加到QTableWidget中。

1.QTableWidgetItem的构造函数: 

QTableWidgetItem(const QString &text, int type = Type)
参数:
text:QTableWidgetItem的文本内容是text,即单元格的内容是text;

type:类型

2.setItem:将QTableWidgetItem放入到QTableWidget的第row行第column列中。

void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)

代码使用如下:


四、QTableWidgetItem的属性设置函数

五、获取当前单元格的数据

使用currentCellChanged槽函数,根据column,row来使用获得QTableWidgetItem的单元格,然后用QTableWidgetItem的text方法获得数据。下面的槽函数是可以获得当前行的列的数据,而上面的槽函数仅仅可以获得当前单元格以及上一个单元格的数据。

六、插入、添加、删除行

void QTableWidget::insertRow(int row);

void QTableWidget::removeRow(int row);

插入行,删除行都要依靠row号,因此需要使用

int QTableWidget::currentRow() const函数获得当前所在的行号

如下


七、自动调整行高和列宽

八、设置表格内容是否可编辑


九、其他属性设置

1.行、列表头是否显示

2.选择模式

十、案列之程序界面:

十、案列之设置行表头

十、案列之初始化数据


十、案列之插入加入行

主要代码块

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTableWidgetItem>
#include <QFileDialog>
#include <ActiveQt/QAxObject>
#include <QDesktopServices>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_SetHeader_clicked();

    void on_InitForm_clicked();

    void on_InsertRow_clicked();

    void on_AddRow_clicked();

    void on_DeleteRow_clicked();

    void on_AutoDesignPosti_clicked();

    void on_checkBox_clicked(bool checked);

    void on_ShowFormRowHeader_clicked(bool checked);

    void on_ShowFormColuHeader_stateChanged(int arg1);



    void on_ROwSelect_clicked();

    void on_CellSelect_clicked();



    void on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);





private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

}

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


void MainWindow::on_SetHeader_clicked()
{
    QTableWidgetItem *headerItem;
    QStringList headerText;
    headerText<<"姓名"<<"性别"<<"年龄"<<"是否是党员"<<"new";
    ui->tableWidget->setColumnCount(headerText.count());
    //直接设置列表头为headerText中的内容
   //ui->tableWidget->setHorizontalHeaderLabels(headerText);
    //为每个行表头的单元格设置属性,通过setHorizontalHeaderItem将QTabWidgetItem,
   //将headerItem添加到列表头只能。
    for(int i=0; i < ui->tableWidget->columnCount(); i++)
    {
        headerItem = new QTableWidgetItem(headerText.at(i));
        headerItem->setTextColor(Qt::blue);
        ui->tableWidget->setHorizontalHeaderItem(i,headerItem);
    }
}
//初始化数据
void MainWindow::on_InitForm_clicked()
{
    //只清除工作区,不清除表头
    ui->tableWidget->clearContents();
    //设置 表格的行数
    ui->tableWidget->setRowCount(2);
    QTableWidgetItem *item;
    // 新建一个单元格,数据为哥,在第0行第0列的单元格中
    item = new QTableWidgetItem("哥",1000);
    //设置单元格垂直、水平居中
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(0,0,item);

    item = new QTableWidgetItem("男",1000);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(0,1,item);

    item = new QTableWidgetItem(QString::number(31),1001);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(0,2,item);

    item = new QTableWidgetItem("是",1000);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    //设置单元格的勾选状态,会在单元格显示QChexBox组件
    //Qt::Checked勾选状态,Qt::UnChecked不勾选状态
    item->setCheckState(Qt::Checked);
    ui->tableWidget->setItem(0,3,item);
}
//插入行
void MainWindow::on_InsertRow_clicked()
{
    QTableWidgetItem *item;
    //获取当前所在的行数
    int row = ui->tableWidget->currentRow();
    //不会自动创建QTableWidgetItem
    ui->tableWidget->insertRow(row);
    item = new QTableWidgetItem("新插入",1000);
    ui->tableWidget->setItem(row,0,item);
}
//加入行
void MainWindow::on_AddRow_clicked()
{
    QTableWidgetItem *item;
    //获取当前所在的行数
    int row = ui->tableWidget->rowCount();
    //不会自动创建QTableWidgetItem
    ui->tableWidget->insertRow(row);
    item = new QTableWidgetItem("新加入",1000);
    ui->tableWidget->setItem(row,0,item);
}
//删除行
void MainWindow::on_DeleteRow_clicked()
{
    int row = ui->tableWidget->currentRow();
    //删除当前行以及Item
    ui->tableWidget->removeRow(row);
}
//自动调整
void MainWindow::on_AutoDesignPosti_clicked()
{
    //自动调整列宽,使其适应其内容
    ui->tableWidget->resizeColumnsToContents();
    //自动调整行高,使其适应其内容
    ui->tableWidget->resizeRowsToContents();
}
//是否可编辑
void MainWindow::on_checkBox_clicked(bool checked)
{
    if(checked)
    {
        //双击或获取焦点单击进入编辑模式
       ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked
                                        |QAbstractItemView::SelectedClicked);
    }
    else
    {
        //不能编辑
        ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }

}

void MainWindow::on_ShowFormRowHeader_clicked(bool checked)
{    //是否显示行表头
    //verticalHeader()获取行表头,setvisible()设置是否可见,true可见
    ui->tableWidget->horizontalHeader()->setVisible(checked);

}

void MainWindow::on_ShowFormColuHeader_stateChanged(int arg1)
{
    //是否显示列表头
    //horizontalHeader()获取列表头,setvisible()设置是否可见,true可见
     ui->tableWidget->verticalHeader()->setVisible(arg1);
}



void MainWindow::on_ROwSelect_clicked()
{
    //设置选择模式为行选择模式
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
}

void MainWindow::on_CellSelect_clicked()
{
    //设置选择模式为单元格选择模式
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
}


//获取单元格的数据
void MainWindow::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
{
    if(current == NULL)return;
    ui->CellFormData->setText(current->text());
}


谢谢阅读,点个赞呗。


Qt学记六: QTableWidget(表格控件)的评论 (共 条)

分享到微博请遵守国家法律