QT之表格控件

目录

一:表格控件

1.QTableWidget表格的创建

1.QTableWidgetItem单元格

2.表格的信号和槽

3.代码引例

1.在.h文件中定义

2.在main文件中创建并实现

4.结果演示 GIF


一:表格控件

QTableWidget 是 Qt 提供的一种表格控件(如图 1 所示),类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。QTableWidget 的结构布局如图 1 所示。

整个 QTableWidget 表格可以分为 3 个区域:

  • 区域 ① 和 ② 都是表头,区域 ① 设置每一行的表头,区域 ② 设置每一列的表头。我们可以自定义两个区域内的表头,比如第一列是各个教程的名称,所以第一列的表头可以修改为“教程名称”;
  • 区域 ③ 为数据区,表格中所有的数据都位于此区域,该区域内可以存放单元格,也可以存放按钮、文本框等控件。

1.QTableWidget表格的创建

使用 QTableWidget 控件,必须先引入<QTableWidget>头文件。

QTableWidget 类提供了 2 个构造函数,分别是:

QTableWidget(QWidget *parent = Q_NULLPTR)
QTableWidget(int rows, int columns, QWidget *parent = Q_NULLPTR)

第一个构造函数可以在指定的 parent 父窗口中创建一个空的表格,表格中不显示任何单元格。第二个构造函数可以在指定的 parent 父窗口中创建一个表格,表格中整齐地排列着 rows 行 columus 列的单元格,每个单元格都是空的。 

1.QTableWidgetItem单元格

定义 QTableWidgetItem 类的实例对象之前,程序中要引入<QTableWidgetItem>头文件。QTableWidgetItem 类提供了 4 个构造函数:

QTableWidgetItem(int type = Type)
QTableWidgetItem(const QString &text, int type = Type)
QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type)
QTableWidgetItem(const QTableWidgetItem &other)        //复制(拷贝)构造函数

text 参数用于指定单元格要显示的文本(字符串),icon 参数用于指定单元格要显示的图标,type 参数配有默认值,很少用到。

QTableWidgetItem 单元格通常用来存放 text 文本和 icon 图标,借助该类提供的 setBackground()、setTextAlignment() 等成员方法,我们可以轻松设置每个单元格的字体、颜色、背景等。

QTableWidgetItem 类还对<小于运算符进行了重载,根据各个单元格存储的文本内容(字符串),多个单元格之间可以直接比较大小。借助这一特性,我们可以很轻易地实现“单元格排序”功能。

默认情况下,用户可以选中 QTableWidget 表格中的某个单元格,还可以对目标单元格中的文本内容进行修改。通过设置 QTableWidget 表格,可以禁止用户编辑所有单元格。

 

 

 


2.表格的信号和槽

  

3.代码引例

1.在.h文件中定义

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem>

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;
};
class QMyLabel:public QLabel{
    Q_OBJECT
public slots:
    void rsetText(QTableWidgetItem *item);
};

#endif // MAINWINDOW_H

2.在main文件中创建并实现

#include "mainwindow.h"

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStringList>
using namespace std;

void QMyLabel::rsetText(QTableWidgetItem *item){
    this->setText(item->text());
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    //设置窗口的标题
    w.setWindowTitle("QTableWidget控件");
    //自定义窗口的大小
    w.setGeometry(930,175,900,500);
    //在 widget 窗口中添加一个 4 行 3 列的表格
    QTableWidget TableWidget(4,3,&w);
    //自定义表格的尺寸和字体大小
    TableWidget.resize(900,350);
    TableWidget.setFont(QFont("宋体",20));
    //设置表格中每一行的表头
    TableWidget.setHorizontalHeaderLabels(QStringList() << "书名" << "作者" << "出版社");
    //设置表格数据区内的所有单元格都不允许编辑
    TableWidget.setEditTriggers(QAbstractItemView::NoEditTriggers);
    //设置指定行的宽度

    TableWidget.setColumnWidth(0,260);
    TableWidget.setColumnWidth(1,260);
    TableWidget.setColumnWidth(2,260);
    //设置表格中每一行的内容
    TableWidget.setItem(0,0,new QTableWidgetItem("水浒传")); //向下复制一行 ctrl+alt+down
    TableWidget.setItem(0,1,new QTableWidgetItem("施耐庵"));
    TableWidget.setItem(0,2,new QTableWidgetItem("人民文学"));
    TableWidget.setItem(1,0,new QTableWidgetItem("西游记"));
    TableWidget.setItem(1,1,new QTableWidgetItem("吴承恩"));
    TableWidget.setItem(1,2,new QTableWidgetItem("人民文学"));
    TableWidget.setItem(2,0,new QTableWidgetItem("红楼梦"));
    TableWidget.setItem(2,1,new QTableWidgetItem("曹雪芹,高鹗"));
    TableWidget.setItem(2,2,new QTableWidgetItem("人民文学"));
    TableWidget.setItem(3,0,new QTableWidgetItem("三国演义"));
    TableWidget.setItem(3,1,new QTableWidgetItem("罗贯中"));
    TableWidget.setItem(3,2,new QTableWidgetItem("人民文学"));

    //向 widget 窗口中添加一个文本框
    QMyLabel lab;
    lab.setText("选中单元格");
    lab.setParent(&w);
    //自定义文本框的尺寸和位置
    lab.resize(900,150);
    lab.move(0,350);
    lab.setAlignment(Qt::AlignCenter);
    lab.setFont(QFont("宋体",16));
    //为表格和文本框之间建立关联,当用户点击表格中某个单元格时,文本框显示单元格内的文本内容。
    QObject::connect(&TableWidget,&QTableWidget::itemClicked,&lab,&QMyLabel::rsetText);

    w.show();
    return a.exec();
}



4.结果演示 GIF

  • 16
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 中,可以使用 `QTableWidget` 件来显示表格数据。`QTableWidget` 是一个基于表格件,可以显示行列数据,支持编辑、排序、选择等功能。 `QTableWidget` 的使用方法比较简单,可以通过代码或者在 Qt Designer 中创建。在代码中创建 `QTableWidget` 的示例代码如下: ```cpp QTableWidget *tableWidget = new QTableWidget(this); // 设置表格的行数和列数 tableWidget->setRowCount(3); tableWidget->setColumnCount(4); // 设置表头 tableWidget->setHorizontalHeaderLabels({"Name", "Age", "Gender", "Address"}); // 设置表格数据 tableWidget->setItem(0, 0, new QTableWidgetItem("Tom")); tableWidget->setItem(0, 1, new QTableWidgetItem("20")); tableWidget->setItem(0, 2, new QTableWidgetItem("Male")); tableWidget->setItem(0, 3, new QTableWidgetItem("Beijing")); tableWidget->setItem(1, 0, new QTableWidgetItem("Lucy")); tableWidget->setItem(1, 1, new QTableWidgetItem("22")); tableWidget->setItem(1, 2, new QTableWidgetItem("Female")); tableWidget->setItem(1, 3, new QTableWidgetItem("Shanghai")); tableWidget->setItem(2, 0, new QTableWidgetItem("Jack")); tableWidget->setItem(2, 1, new QTableWidgetItem("25")); tableWidget->setItem(2, 2, new QTableWidgetItem("Male")); tableWidget->setItem(2, 3, new QTableWidgetItem("Guangzhou")); // 自适应列宽 tableWidget->resizeColumnsToContents(); // 显示表格 tableWidget->show(); ``` 以上示例代码创建了一个 3 行 4 列的表格,并设置了表头和表格数据。注意,可以通过 `setRowCount()` 和 `setColumnCount()` 方法设置表格的行数和列数,通过 `setHorizontalHeaderLabels()` 和 `setVerticalHeaderLabels()` 方法设置表头,通过 `setItem()` 方法设置表格数据。 在 Qt Designer 中创建 `QTableWidget` 件的方法也比较简单,可以通过拖拽的方式将 `QTableWidget` 件拖入窗口中,并在属性编辑器中设置属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值