1. 程式人生 > >QTableWidget用法總結

QTableWidget用法總結

轉載:https://blog.csdn.net/u010002704/article/details/40071467

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);//只能單選

  /*QScrollBar *scrollBar = horizontalScrollBar();

  scrollBar->hide();*/

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

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

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

/*********************************************************************************************/

 

【1】QTableWidget簡介

QTableWidget是QT對話方塊設計中常用的顯示資料表格的控制元件。

學習QTableWidget就要首先看看QTableView控制元件(控制元件也是有”家世“的!就像研究人一樣一樣的),因為QTableWidget繼承於類QTableView。

兩者主要區別是QTableView可以使用自定義的資料模型來顯示內容(也就意味著使用時先要通過setModel來繫結資料來源),而QTableWidget則只能使用標準的資料模型。

QTableWidget單元格資料是QTableWidgetItem物件來實現的(即就是不需要資料來源,單元格內的資訊需要逐個填充即可)。

這主要由於QTableView類中有setModel成員函式,而到了QTableWidget類中,該成員函式變成了私有。

使用QTableWidget就離不開QTableWidgetItem。QTableWidgetItem用來表示表格中的其中一個單元格,整個表格都需要用逐個單元格物件QTableWidgetItem構建起來。

【2】QTableWidget控制元件屬性

(1)禁止編輯表格

在預設情況下,表格裡的字元是可以更改的。

比如雙擊一個單元格,就可以修改原來的內容,如果想禁止使用者的這種操作,讓這個表格對使用者只讀,可以這樣:

1 ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

(2)設定表格為選擇整行

1 /*設定表格為整行選中*/
2 ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows); 

(3)設定單個選中和多個選中

單個選中意味著每次只可以選中一個單元格,多個就是相當於可以選擇”一片“那種模式。

1 /*設定允許多個選中*/ 
2     ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  

(4)表格表頭的顯示與隱藏

對於水平或垂直方向的表頭,如果不想顯示可以用以下方式進行(隱藏/顯示)設定:

1 ui.qtablewidget->verticalHeader()->setVisible(true);  
2 ui.qtablewidget->horizontalHeader()->setVisible(false);

(5)設定具體單元格中字型的對齊方式

1 ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);

(6)設定具體單元格中字型格式

1 ui.qtablewidget->item(1, 0)->setBackgroundColor(QColor(0,60,10));   
2 ui.qtablewidget->item(1, 0)->setTextColor(QColor(200,111,100)); 
3 ui.qtablewidget->item(1, 0)->setFont(QFont("Helvetica")); 

(7)設定具體單元格的值

1 ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));

(8)把QTableWidgetItem物件內容轉換為QString

1 QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();

(9)具體單元格中新增控制元件

1 QComboBox *comBox = new QComboBox(); 
2 comBox->addItem("F"); 
3 comBox->addItem("M"); 
4 ui.qtablewidget->setCellWidget(0,3,comBox);

(11)合併單元格

1 //合併單元格的效果
2 ui.qtablewidget->setSpan(2, 2, 3, 2);
3 //第一個引數:要改變的單元格行數
4 //第二個引數:要改變的單元格列數
5 //第三個引數:需要合併的行數
6 //第四個引數:需要合併的列數

(12)具體單元格中插入圖片

ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));

(13)設定顯示網格

ui.qtablewidget->setShowGrid(true);//顯示錶格線

(14)設定滾動條

ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滾動條

(15)設定列標籤

複製程式碼

 1     //初始化介面
 2     QStringList  HStrList;
 3     HStrList.push_back(QString("name"));
 4     HStrList.push_back(QString("id"));
 5     HStrList.push_back(QString("age"));
 6     HStrList.push_back(QString("sex"));
 7     HStrList.push_back(QString("department"));
 8     
 9 
10     //設定行列數(只有列存在的前提下,才可以設定列標籤)
11     int HlableCnt = HStrList.count();
12     ui.qtablewidget->setRowCount(10);
13     ui.qtablewidget->setColumnCount(HlableCnt);
14 
15     //設定列標籤
16     ui.qtablewidget->setHorizontalHeaderLabels(HStrList);

複製程式碼

(16)設定行和列的大小設為與內容相匹配

1 ui.qtablewidget->resizeColumnsToContents();  
2 ui.qtablewidget->resizeRowsToContents();  

(17)設定字型

ui.qtablewidget->setFont(font);   //設定字型

(18)獲取某一單元格的內容

1 QString strText = ui.qtablewidget->item(0, 0)->text();

 

 

 

public:
    enum SelectionMode {
        NoSelection,
        SingleSelection,
        MultiSelection,
        ExtendedSelection,
        ContiguousSelection
    };
    Q_ENUM(SelectionMode)
 
    enum SelectionBehavior {
        SelectItems,
        SelectRows,
        SelectColumns
    };
    Q_ENUM(SelectionBehavior)
 
    enum ScrollHint {
        EnsureVisible,
        PositionAtTop,
        PositionAtBottom,
        PositionAtCenter
    };
    Q_ENUM(ScrollHint)
 
    enum EditTrigger {
        NoEditTriggers = 0,
        CurrentChanged = 1,
        DoubleClicked = 2,
        SelectedClicked = 4,
        EditKeyPressed = 8,
        AnyKeyPressed = 16,
        AllEditTriggers = 31
    };
 
    Q_DECLARE_FLAGS(EditTriggers, EditTrigger)
 
    enum ScrollMode {
        ScrollPerItem,
        ScrollPerPixel
    };
    Q_ENUM(ScrollMode)