一.定義
QTableWidget是一個用于顯示表格數據的Qt控件,它是一個基于Qt Model/View框架的視圖組件。QTableWidget提供了一種簡單的方式來展示和編輯表格數據,用戶可以通過添加行、列和單元格來構建一個完整的數據表格。
下面是一些QTableWidget的主要特點和功能:
顯示數據:QTableWidget可以顯示表格形式的數據,用戶可以通過設置行數、列數和單元格內容來展示具體的數據。
編輯數據:用戶可以在QTableWidget中直接編輯單元格的內容,以便對數據進行修改。
行列操作:用戶可以通過API添加、刪除、移動行列,來靈活地管理數據表格的結構。
布局調整:用戶可以通過設置行高、列寬、單元格合并等方式來調整數據表格的布局。
選中操作:用戶可以通過鼠標或鍵盤操作來選中單元格、行或列,以便進行相關的操作。
樣式設置:用戶可以通過設置表格的樣式、顏色、字體等屬性來美化表格的顯示效果。
數據導出:QTableWidget支持將表格數據導出為文件(如CSV格式),以便用戶進行其他處理或分享數據。
二.代碼示例
#include <QtWidgets>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建一個QTableWidget對象,并設置行數和列數QTableWidget tableWidget;tableWidget.setRowCount(3);tableWidget.setColumnCount(2);// 設置表頭QStringList headers;headers << "Name" << "Age";tableWidget.setHorizontalHeaderLabels(headers);// 向表格中添加數據QTableWidgetItem *item1 = new QTableWidgetItem("Alice");tableWidget.setItem(0, 0, item1);QTableWidgetItem *item2 = new QTableWidgetItem("25");tableWidget.setItem(0, 1, item2);QTableWidgetItem *item3 = new QTableWidgetItem("Bob");tableWidget.setItem(1, 0, item3);QTableWidgetItem *item4 = new QTableWidgetItem("30");tableWidget.setItem(1, 1, item4);QTableWidgetItem *item5 = new QTableWidgetItem("Eve");tableWidget.setItem(2, 0, item5);QTableWidgetItem *item6 = new QTableWidgetItem("22");tableWidget.setItem(2, 1, item6);// 顯示表格tableWidget.show();return app.exec();
}
三.部分功能介紹
1.設置行高
#include <QtWidgets>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建一個QTableWidget對象,并設置行數和列數QTableWidget tableWidget;tableWidget.setRowCount(3);tableWidget.setColumnCount(2);// 設置表格每一行的高度tableWidget.verticalHeader()->setDefaultSectionSize(50); // 設置行高為50像素// 添加數據到表格中// 顯示表格tableWidget.show();return app.exec();
}
2.設置自適應大小
setSizeAdjustPolicy()方法是用于設置QTableWidget的自適應策略的方法。可以通過該方法設置表格的大小自適應方式,以確保表格可以根據內容調整大小。
以下是該方法的常用參數:
- QTableWidget::AdjustToContents:根據內容自動調整表格大小。
- QTableWidget::AdjustToContentsOnFirstShow:第一次顯示時根據內容自動調整表格大小。
- QTableWidget::AdjustToContentsOnResize:調整表格大小以適應內容變化。
- QTableWidget::Fixed:固定大小。
#include <QtWidgets>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建一個QTableWidget對象,并設置行數和列數QTableWidget tableWidget;tableWidget.setRowCount(3);tableWidget.setColumnCount(2);// 設置表格每一行的高度tableWidget.verticalHeader()->setDefaultSectionSize(50); // 設置行高為50像素// 設置表格的自適應策略tableWidget.setSizeAdjustPolicy(QTableWidget::AdjustToContents);// 添加數據到表格中// 顯示表格tableWidget.show();return app.exec();
}
3.插入數據
Qt中的 QTableWidget 類提供了方便的方法來插入和操作表格中的行和列,而您無需手動設置行號。當您向 QTableWidget 插入行時,會自動更新當前的行號,并且您可以通過該行號來訪問和操作該行的數據。
#include <QtWidgets>int main(int argc, char *argv[])
{QApplication app(argc, argv);// 創建 QTableWidgetQTableWidget tableWidget;tableWidget.setColumnCount(2);// 插入一行并設置數據tableWidget.insertRow(0);tableWidget.setItem(0, 0, new QTableWidgetItem("Row 1, Column 1"));tableWidget.setItem(0, 1, new QTableWidgetItem("Row 1, Column 2"));// 插入另一行并設置數據tableWidget.insertRow(1);tableWidget.setItem(1, 0, new QTableWidgetItem("Row 2, Column 1"));tableWidget.setItem(1, 1, new QTableWidgetItem("Row 2, Column 2"));// 顯示 QTableWidgettableWidget.show();return app.exec();
}
4.設置文字居中
要設置表格單元格中的文字居中,可以使用
setAlignment()
方法來指定單元格的對齊方式。
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PyQt5.QtCore import Qtapp = QApplication([])tableWidget = QTableWidget()
tableWidget.setRowCount(2)
tableWidget.setColumnCount(2)tableWidget.setItem(0, 0, QTableWidgetItem("Item 1"))
tableWidget.setItem(0, 1, QTableWidgetItem("Item 2"))
tableWidget.setItem(1, 0, QTableWidgetItem("Item 3"))
tableWidget.setItem(1, 1, QTableWidgetItem("Item 4"))# 設置單元格文字居中
for i in range(tableWidget.rowCount()):for j in range(tableWidget.columnCount()):item = tableWidget.item(i, j)item.setTextAlignment(Qt.AlignCenter)widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(tableWidget)
widget.setLayout(layout)widget.show()app.exec_()
5.設置是否可編輯
要設置Qt TableWidget中的單元格為可編輯或不可編輯模式,可以使用
setEditTriggers()
方法。以下是一個示例代碼,演示如何設置單元格為可編輯
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget, QAbstractItemViewapp = QApplication([])tableWidget = QTableWidget()
tableWidget.setRowCount(2)
tableWidget.setColumnCount(2)tableWidget.setItem(0, 0, QTableWidgetItem("Editable"))
tableWidget.setItem(0, 1, QTableWidgetItem("Not Editable"))
tableWidget.setItem(1, 0, QTableWidgetItem("Editable"))
tableWidget.setItem(1, 1, QTableWidgetItem("Not Editable"))# 設置第一列為可編輯模式,第二列為不可編輯模式
tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked) # 設置雙擊可編輯widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(tableWidget)
widget.setLayout(layout)widget.show()app.exec_()
?