目錄
一:表格控件
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();
}