1. 程式人生 > >QT控件之Qtable Widget

QT控件之Qtable Widget

index 雙擊 ima 定義 sele 自適應 center nco image

目錄

  • QT控件之Qtable Widget
    • 1、表格基礎屬性
    • 2、表格編輯屬性
    • 3、單元格選中屬性
    • 3、表頭的顯示與隱藏
    • 4、單元格字體設置
    • 5、設置單元格內文字的對齊方式
    • 6、合並單元格
    • 7、設置行列寬
    • 8、其它示例設置

QT控件之Qtable Widget

1、表格基礎屬性

  • 表格的定義
//方法1:
QTableWidget *tableWidget = new QTableWidget(10,5); // 構造了一個QTableWidget的對象,並且設置為10行,5列 
//方法2:

QTableWidget *tableWidget = new QTableWidget; 

tableWidget->setRowCount(10); //設置行數為10 

tableWidget->setColumnCount(5); //設置列數為5 
  • 表頭的設置
QStringList header; 

header<<"Month"<<"Description"; 

tableWidget->setHorizontalHeaderLabels(header); 
  • 表格內容設置
tableWidget->setItem(0,0,new QTableWidgetItem("Jan")); 
tableWidget->show(); 

2、表格編輯屬性

  • 在默認情況下,表格裏的字符是可以更改的,比如雙擊一個單元格,就可以修改原來的內容,如果想禁止用戶的這種操作,讓這個表格對用戶只讀,也是可以進行設置的。
 原型:tableWidget->setEditTriggers(QAbstractItemView::EditTrigger);

QAbstractItemView.EditTrigger參數有多個,QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚舉中的一個。

參數 XX XX
QAbstractItemView.NoEditTriggers 0 不能對表格內容進行修改
QAbstractItemView.CurrentChanged 1 任何時候都能對單元格修改
QAbstractItemView.DoubleClicked 2 雙擊單元格
QAbstractItemView.SelectedClicked 4 單擊已選中的內容
QAbstractItemView.CurrentChanged 8 任何時候都能對單元格修改
QAbstractItemView.AnyKeyPressed 16 雙擊單元格
QAbstractItemView.AllEditTriggers 31 雙擊單元格

3、單元格選中屬性

  • 整行選中
原型: tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行選中的方式
參數 含義
QAbstractItemView.SelectItems 選中單個單元格
QAbstractItemView.SelectRows 選中一行
QAbstractItemView.SelectColumns 選中一列
  • 單個選中和多個選中的設置
 原型:tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //設置為可以選中多個目標
參數 含義
QAbstractItemView.NoSelection 不能選擇
QAbstractItemView.SingleSelection 選中單個目標
QAbstractItemView.MultiSelection 選中多個目標

3、表頭的顯示與隱藏

  • 對於水平或垂直方法的表頭,可以用以下方式進行 隱藏/顯示 的設置。
 //註意:需要 #include <QHeaderView>
 tableWidget->verticalHeader()->setVisible(false);   //隱藏列表頭
 tableWidget->horizontalHeader()->setVisible(false); //隱藏行表頭

4、單元格字體設置

QTableWidgetItem *item = new QTableWidgetItem("Apple");

item->setBackgroundColor(QColor(0,60,10));

item->setTextColor(QColor(200,111,100));

item->setFont(QFont("Helvetica"));

tableWidget->setItem(0,3,item);

//另:如果需要對所有的單元格都使用這種字體,則可以使用  tableWidget->setFont(QFont("Helvetica"));

5、設置單元格內文字的對齊方式

使用newItem.setTextAlignment()函數進行設置,該函數的參數為單元格內的對齊方式,和字符輸入順序是自左相右還是自右向左,如果兩種都要設置,只要用 Qt.AlignHCenter | Qt.AlignVCenter 的方式即可 。

//方法
ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignCenter);

//方法
QTableWidgetItem *t_test  = new QTableWidgetItem(xList);
t_test->setTextAlignment(Qt::AlignCenter);

技術分享圖片

6、合並單元格

tableWidget->setSpan(0, 0, 3, 1)  //# 其參數為: 要改變單元格的  1行數  2列數  要合並的  3行數  4列數

7、設置行列寬

  • 指定行列寬
//方法一:
    tableWidget->setColumnWidth(3,200);
    tableWidget->setRowHeight(3,60);
//方法二:    
  ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::fix); //指定列寬
 ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::fix);  //制定行高
  • 自動調整行列寬
//根據內容自動調整所有行的行高

//方法一:
    tableWidget->resizeColumnsToContents();
    tableWidget->resizeRowsToContents();
    
//方法二:
   ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch); 自適應列寬
   ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch); 自適應行高
 
 //根據內容自動調整某一行的行高
    tableWidget->resizeColumnsToContents(2);//2行 
    tableWidget->resizeRowsToContents(2);
    
//另類表格效果:    
    table->horizontalHeader()->setStretchLastSection(true); //其它列保持默認寬度,最後一列拉伸填滿。

8、其它示例設置

int rowIndex = m_pAttrbuteList->rowCount();
 tableWidget->setRowCount(rowIndex + 1);//總行數增加1

 tableWidget->setRowHeight(rowIndex, 24);//設置行的高度

--------------------------------------------------------------------------------

QTableWidget *table = new QTableWIdget(this);

table->setColumnCount(5);    //設置列數

table->setRowCount(3);        //設置行數/

/*設置列名*/

QStringList headers;

headers<<"列名1"<<"列名2"<<"列名3";

table->setHorizontalHeaderLabels(headers);

/*給單元格添加內容*/

void addItemContent(int row, int column, QString content)

{

      QTableWidgetItem *item = new QTableWidgetItem (content);

      table->setItem(row, column, item);

}

/*給單元格中增加圖標*/

QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL);  //只加入圖標,沒有字符串

QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString);   //加入圖標和字符串

table->setItem(row, column, item);

/*插入一行*/

int row = table->rowCount();

table->insertRow(row);

/*插入一列*/

int column = table->columnCount();

table->insertColumn(column);

 //使行列頭自適應寬度,最後一列將會填充空白部分

table->horizontalHeader()->setStretchLastSection(true);          

//使行列頭自適應寬度,所有列平均分來填充空白部分            

table->horizontalHeader()->setResizeMode(QHeaderView::Strtch);       

//使行自適應高度,假如行很多的話,行的高度不會一直減小,當達到一定值時會自動生成一個QScrollBar

table->verticalHeader()->setResizeMode(QHeaderView::Strtch);

//設置單擊選擇一行

table->setSelectionBehuavior(QAbstractItemView::SelectRows);

//設置每行內容不可編輯

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

//設置只能選擇一行,不能選擇多行

table->setSelectionMode(QAbstractItemView::SingleSelection);

/*去掉每行的行號*/

QHeaderView *headerView = table->verticalHeader();

headerView->setHidden(true);

/*設置讓某個單元格或某行選中*/

選中單元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);

選中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(註意此處的列沒有值)

QT控件之Qtable Widget