天天看點

QT之表格控件一:表格控件

目錄

一:表格控件

1.QTableWidget表格的建立

1.QTableWidgetItem單元格

2.表格的信号和槽

3.代碼引例

1.在.h檔案中定義

2.在main檔案中建立并實作

4.結果示範 GIF

一:表格控件

QTableWidget 是 Qt 提供的一種表格控件(如圖 1 所示),類似于我們經常使用的 Excel 表格,可以将資料以表格的方式展示給使用者。QTableWidget 的結構布局如圖 1 所示。

QT之表格控件一:表格控件

整個 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 表格,可以禁止使用者編輯所有單元格。

QT之表格控件一:表格控件
QT之表格控件一:表格控件

2.表格的信号和槽

QT之表格控件一:表格控件
QT之表格控件一:表格控件

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

QT之表格控件一:表格控件

繼續閱讀