—— 均为自学笔记,如有错误请指正
一、说明
1. 区域说明
分为 3 个区域:
- 区域①:行表头,可自定义
- 区域②:列表头,可自定义
- 区域③:数据区,表格中所有的数据都位于此区域,该区域内可以存放单元格,也可以存放按钮、文本框等控件。
注:默认情况下,会显示表头,表头的内容为行号或列号。表头可隐藏
2. QTableWidget &QTableView 区别
- QTableWidget 继承自 QTableView 类,QTableView 类也可以用来显示表格控件。
- QTableWidget 只适合显示少量的数据(几百或几千个),若想要显示更多的数据,应该用 QTableView。
二、使用
1. 表格的创建
- 头文件
// 引入头文件
#include <QTableWidget>
- 构造函数
//(在指定父窗口中)创建一个空表格 不显示任何单元格
QTableWidget(QWidget *parent = Q_NULLPTR)
//(在指定父窗口中)创建一个有行列的表格
//QTableWidget 表格单元格的行标和列标都是从 0 开始
QTableWidget(int rows, int columns, QWidget *parent = Q_NULLPTR)
2. 单元格 <QTableWidgetItem类>
- 头文件
// 引入头文件
#include <QTableWidgetItem>
- 构造函数
QTableWidgetItem(int type = Type)
//text 指定单元格要显示的文本(字符串)
QTableWidgetItem(const QString &text, int type = Type)
//icon 指定单元格要显示的图标
//type 有默认值,很少使用
QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type)
QTableWidgetItem(const QTableWidgetItem &other) //复制(拷贝)构造函数
- 常用成员方法
3. QTableWidget类常用 成员方法
4. QTableWidget类信号和槽
- 信号函数
- 槽函数
三、举例
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStringList>
#include <QDebug>
#include <QPushButton>
using namespace std;
class QMyLabel:public QLabel{
Q_OBJECT
public slots:
void rsetText(QTableWidgetItem * item);
};
void QMyLabel::rsetText(QTableWidgetItem * item){
this->setText(item->text());
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//创建一个窗口,作为输入框和列表框的父窗口
QWidget widget;
//设置窗口的标题
widget.setWindowTitle("QTableWidget控件");
//自定义窗口的大小
widget.resize(900,500);
//在 widget 窗口中添加一个 4 行 3 列的表格
QTableWidget TableWidget(4,3,&widget);
//自定义表格的尺寸和字体大小
TableWidget.resize(900,350);
TableWidget.setFont(QFont("宋体",20));
//设置表格中每一行的表头
TableWidget.setHorizontalHeaderLabels(QStringList() << "教程" << "网址" << "状态");
//设置表格数据区内的所有单元格都不允许编辑
TableWidget.setEditTriggers(QAbstractItemView::NoEditTriggers);
//设置表格中每一行的内容
TableWidget.setItem(0,0,new QTableWidgetItem("C语言教程"));
TableWidget.setItem(0,1,new QTableWidgetItem("http://c.biancheng.net/c/"));
TableWidget.setItem(0,2,new QTableWidgetItem("已更新完毕"));
TableWidget.setItem(1,0,new QTableWidgetItem("Qt教程"));
TableWidget.setItem(1,1,new QTableWidgetItem("http://c.biancheng.net/qt/"));
TableWidget.setItem(1,2,new QTableWidgetItem("正在更新"));
TableWidget.setItem(2,0,new QTableWidgetItem("C++教程"));
TableWidget.setItem(2,1,new QTableWidgetItem("http://c.biancheng.net/cplus/"));
TableWidget.setItem(2,2,new QTableWidgetItem("已更新完毕"));
//向 widget 窗口中添加一个文本框
QMyLabel lab;
lab.setText("选中单元格");
lab.setParent(&widget);
//自定义文本框的尺寸和位置
lab.resize(900,150);
lab.move(0,350);
lab.setAlignment(Qt::AlignCenter);
lab.setFont(QFont("宋体",16));
widget.show();
//为表格和文本框之间建立关联,当用户点击表格中某个单元格时,文本框显示单元格内的文本内容。
QObject::connect(&TableWidget,&QTableWidget::itemClicked,&lab,&QMyLabel::rsetText);
return a.exec();
}
//QMyLabel类的定义应该放到 .h 文件中,本例中将其写到 main.cpp 中,程序最后需要添加 #include"当前源文件名.moc" 语句,否则无法通过编译。
#include "main.moc"