天天看點

QTableview

Qt QTableview的用法詳解

2012年05月10日 ⁄ 綜合⁄ 共 8933字 ⁄ 字号 小 中 大 ⁄ 評論關閉

一. 對QTableWidget本身的效果實作

1. 将表格變為禁止編輯

在預設情況下,表格裡的字元是可以更改的,比如輕按兩下一個單元格,就可以修改原來的内容,如果想禁止使用者的這種操作,讓這個表格對使用者隻讀,可以這樣:

tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚舉中的一個,都是觸發修改單元格内容的條件:

QAbstractItemView.NoEditTriggers

No editing possible. 不能對表格内容進行修改

QAbstractItemView.CurrentChanged

1

Editing start whenever current item changes.任何時候都能對單元格修改

QAbstractItemView.DoubleClicked

2

Editing starts when an item is double clicked.輕按兩下單元格

QAbstractItemView.SelectedClicked

4

Editing starts when clicking on an already selected item.單擊已選中的内容

QAbstractItemView.EditKeyPressed

8

Editing starts when the platform edit key has been pressed over an item.

QAbstractItemView.AnyKeyPressed

16

Editing starts when any key is pressed over an item.按下任意鍵就能修改

QAbstractItemView.AllEditTriggers

31

Editing starts for all above actions.以上條件全包括

2. 設定表格為整行選擇

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行選中的方式

QAbstractItemView.SelectionBehavior枚舉還有如下類型

Constant

Value

Description

QAbstractItemView.SelectItems

Selecting single items.選中單個單元格

QAbstractItemView.SelectRows

1

Selecting only rows.選中一行

QAbstractItemView.SelectColumns

2

Selecting only columns.選中一列

3.單個選中和多個選中的設定:

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //設定為可以選中多個目标

該函數的參數還可以是:

QAbstractItemView.NoSelection 不能選擇

QAbstractItemView.SingleSelection 選中單個目标

QAbstractItemView.MultiSelection 選中多個目标

QAbstractItemView.ExtendedSelection QAbstractItemView.ContiguousSelection 的差別不明顯,主要功能是正常情況下是單選,但按下Ctrl或Shift鍵後,可以多選

4. 表格表頭的顯示與隐藏

對于水準或垂直方法的表頭,可以用以下方式進行 隐藏/顯示 的設定:

 view plain

 tableWidget->verticalHeader()->setVisible(false); //隐藏清單頭

tableWidget->horizontalHeader()->setVisible(false); //隐藏行表頭

注意:需要 #include <QHeaderView>

5. 對表頭文字的字型、顔色進行設定

view plain

 QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //獲得水準方向表頭的Item對象

 columnHeaderItem0->setFont(QFont("Helvetica")); //設定字型

columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //設定單元格背景顔色

columnHeaderItem0->setTextColor(QColor(200,111,30)); //設定文字顔色

注意:需要 #include <QHeaderView>

6. 在單元格裡加入控件:

QTableWidget不僅允許把文字加到單元格,還允許把控件也放到單元格中。比如,把一個下拉框加入單元格,可以這麼做:

 view plain

 QComboBox *comBox = new QComboBox();

comBox->addItem("Y");

comBox->addItem("N");

tableWidget->setCellWidget(0,2,comBox);

二. 對單元格的進行設定

1. 單元格設定字型顔色和背景顔色 及字型字元

 view plain

 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"));

2. 設定單元格内文字的對齊方式

這個比較簡單,使用newItem.setTextAlignment()函數即可,該函數的參數為單元格内的對齊方式,和字元輸入順序是自左相右還是自右向左。

水準對齊方式有:

 Constant Value Description

 Qt.AlignLeft 0x0001 Aligns with the left edge.

 Qt.AlignRight 0x0002 Aligns with the right edge.

 Qt.AlignHCenter 0x0004 Centers horizontally in the available space.

 Qt.AlignJustify 0x0008 Justifies the text in the available space.

垂直對齊方式:

 Constant Value Description

 Qt.AlignTop 0x0020 Aligns with the top.

 Qt.AlignBottom 0x0040 Aligns with the bottom.

 Qt.AlignVCenter 0x0080 Centers vertically in the available space.

如果兩種都要設定,隻要用 Qt.AlignHCenter | Qt.AlignVCenter 的方式即可

3. 合并單元格效果的實作:

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

4. 設定單元格的大小

首先,可以指定某個行或者列的大小

 view plain

 tableWidget->setColumnWidth(3,200);

tableWidget->setRowHeight(3,60);

還可以将行和列的大小設為與内容相比對

 view plain

 tableWidget->resizeColumnsToContents();

tableWidget->resizeRowsToContents();

5. 獲得單擊單元格的内容

通過實作 itemClicked (QTableWidgetItem *) 信号的槽函數,就可以獲得滑鼠單擊到的單元格指針,進而獲得其中的文字資訊

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this, SLOT( getItem(QTreeWidgetItem*,int)) );

//将itemClicked信号與函數getItem綁定

1.QTableWidget不能在mainwindow中随主視窗的大小變化?

  解決:在表格外部添加布局。

  代碼:tableWidget = new QTableWidget;

         tableWidget ->setObjectName(QString::fromUtf8("tableWidget"));

         QVBoxLayout *verticalLayout;

         verticalLayout->addWidget(tableWidget );

2.将表格變為禁止編輯:

  tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

  (參數含義:QAbstractItemView.NoEditTriggers--不能對表格内容進行修改

              QAbstractItemView.CurrentChanged--任何時候都能對單元格修改

              QAbstractItemView.DoubleClicked--輕按兩下單元格

              QAbstractItemView.SelectedClicked--單擊已選中的内容

              QAbstractItemView.EditKeyPressed--

              QAbstractItemView.AnyKeyPressed--按下任意鍵就能修改

              QAbstractItemView.AllEditTriggers--以上條件全包括)

3.設定表格為整行選擇

  tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行選中的方式

  (參數含義:AbstractItemView.SelectItems--選中單個單元格

              QAbstractItemView.SelectRows--選中一行

              QAbstractItemView.SelectColumns--選中一列)

4.單個選中和多個選中的設定:

  tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  //設定為可以選中多個目标

 (參數含義:QAbstractItemView.NoSelection--不能選擇

             QAbstractItemView.SingleSelection--選中單個目标

             QAbstractItemView.MultiSelection--選中多個目标

  QAbstractItemView.ExtendedSelection/QAbstractItemView.ContiguousSelection 的差別不明顯,主要功能是正常情況下是單選,但按下Ctrl或Shift鍵後,可以多選)

5.表格表頭的顯示與隐藏

  對于水準或垂直方法的表頭,可以用以下方式進行 隐藏/顯示 的設定:

  tableWidget->verticalHeader()->setVisible(false);   //隐藏清單頭 

  tableWidget->horizontalHeader()->setVisible(false); //隐藏行表頭 

  注意:需要 #include <QHeaderView>

6.對表頭文字的字型、顔色進行設定

  QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //獲得水準方向表頭的Item對象 

  columnHeaderItem0->setFont(QFont("Helvetica")); //設定字型 

  columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //設定單元格背景顔色 

  columnHeaderItem0->setTextColor(QColor(200,111,30)); //設定文字顔色

  注意:需要 #include <QHeaderView>

7.在單元格裡加入控件:

   QComboBox *comBox = new QComboBox();

   comBox->addItem("Y");

   comBox->addItem("N");

   tableWidget->setCellWidget(0,2,comBox);

8.單元格中添加圖檔:

  tableWidget->setItem(row, 0, new QTableWidgetItem(QIcon(":/new/images/kingdemo.ico"),tr("")));

9設定單元格字型顔色、背景顔色和字型字元:

  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"));

10.設定單元格内文字的對齊方式

 水準對齊方式有:

 Constant Value Description

 Qt.AlignLeft 0x0001 Aligns with the left edge.

 Qt.AlignRight 0x0002 Aligns with the right edge.

 Qt.AlignHCenter 0x0004 Centers horizontally in the available space.

 Qt.AlignJustify 0x0008 Justifies the text in the available space.

 垂直對齊方式:

 Constant Value Description

 Qt.AlignTop 0x0020 Aligns with the top.

 Qt.AlignBottom 0x0040 Aligns with the bottom.

 Qt.AlignVCenter 0x0080 Centers vertically in the available space.

 如果兩種都要設定,隻要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可

11.合并單元格:

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

12.設定單元格的大小

  首先,可以指定某個行或者列的大小

   tableWidget->setColumnWidth(3,200);

   tableWidget->setRowHeight(3,60);

還可以将行和列的大小設為與内容相比對

   tableWidget->resizeColumnsToContents();

   tableWidget->resizeRowsToContents();

13.獲得單擊單元格的内容

  通過實作 itemClicked (QTableWidgetItem *) 信号的槽函數,就可以獲得滑鼠單擊到的單元格指針,進而獲得其中的文字資訊

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));

//将itemClicked信号與函數getItem綁定

14.QTableWidget要調整表格行寬主要涉及以下函數

  tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);//使列完全填充并平分

  tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);//行自适應寬度                                                                                                     

  tableWidget->resizeColumnsToContents(); //根據内容調整列寬

  tableWidget->resizeColumnToContents(int col);//根據内容自動調整給定列寬

  tableWidget->horizontalHeader()->setResizeMode//把給定列設定為給定模式

  主要模式有Stretch和Fixed

15.添加表頭内容:

  方法一:

  QStringList header;

  header<<""<<tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5");

  方法二:

  tableWidget->setHorizontalHeaderLabels(QStringList() << tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5"));

16.清除:

  tableWidget->clear();//清除所有可見資料(包括表頭),行還在

  tableWidget->clearContents();//隻清除表中資料,不清除表頭内容

  tableWidget->setRowCount(0);//連行也清除掉

15.一些零碎的知識點代碼:

  int row = tableWidget->rowCount();//擷取表格中目前總行數

  tableWidget->setRowCount(row+1);//添加一行

  tableWidget->removeRow(row);//清除已有的行列

  Int row1 = tableWidget->currentItem()->row();//目前選中行

  bool focus = tableWidget->isItemSelected(tableWidget->currentItem());//判斷是否選中一行

  QString proName = tableWidget->item(row, col)->text();//擷取某一格内容

  setShowGrid(true);//顯示表格線

  verticalHeader()->setVisible(false);//隐藏左邊垂直

  QHeaderView *headerView = horizontalHeader();

  headerView->setMovable(false);//去除表頭的移動

  headerView->resizeSection(0,284);//設定第一列寬

  headerView->resizeSection(1,127);//設定第二列寬

  headerView->setResizeMode(QHeaderView::Fixed);//清單不能移動

  headerView->setClickable(false);//不響應滑鼠單擊

  setEditTriggers(QTableWidget::NoEditTriggers);//不能編輯

  setSelectionBehavior(QTableWidget::SelectRows);//一次選中一行

  setSelectionMode(QAbstractItemView::SingleSelection);//隻能單選

  setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水準滾動條

  setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滾動條按項移動

  setAutoScroll(false);//去掉自動滾動

17.排序:

tableWidget->sortByColumn(0,Qt::AscendingOrder);//顧名思義,該函數意思是将某列按升序/降序的方式排列