最近天氣真熱啊,下午的話,基本沒什么效率,熱死人了。今天吃飯的時候看了一下Qt中的QTableWidget的API。官方文檔是:
http://qt-project.org/doc/qt-4.8/QTableWidget.html
QTableWidget ( QWidget * parent = 0 ) |
|
QTableWidget ( int rows, int columns, QWidget * parent = 0 ) | |
~QTableWidget () | |
QWidget * | cellWidget ( int row, int column ) const |
void | closePersistentEditor ( QTableWidgetItem * item ) |
int | column ( const QTableWidgetItem * item ) const |
int | columnCount () const |
int | currentColumn () const |
QTableWidgetItem * | currentItem () const |
int | currentRow () const |
void | editItem ( QTableWidgetItem * item ) |
QList<QTableWidgetItem *> | findItems ( const QString & text, Qt::MatchFlags flags ) const |
QTableWidgetItem * | horizontalHeaderItem ( int column ) const |
QTableWidgetItem * | item ( int row, int column ) const |
QTableWidgetItem * | itemAt ( const QPoint & point ) const |
QTableWidgetItem * | itemAt ( int ax, int ay ) const |
const QTableWidgetItem * | itemPrototype () const |
void | openPersistentEditor ( QTableWidgetItem * item ) |
void | removeCellWidget ( int row, int column ) |
int | row ( const QTableWidgetItem * item ) const |
int | rowCount () const |
QList<QTableWidgetItem *> | selectedItems () |
QList<QTableWidgetSelectionRange> | selectedRanges () const |
void | setCellWidget ( int row, int column, QWidget * widget ) |
void | setColumnCount ( int columns ) |
void | setCurrentCell ( int row, int column ) |
void | setCurrentCell ( int row, int column, QItemSelectionModel::SelectionFlags command ) |
void | setCurrentItem ( QTableWidgetItem * item ) |
void | setCurrentItem ( QTableWidgetItem * item, QItemSelectionModel::SelectionFlags command ) |
void | setHorizontalHeaderItem ( int column, QTableWidgetItem * item ) |
void | setHorizontalHeaderLabels ( const QStringList & labels ) |
void | setItem ( int row, int column, QTableWidgetItem * item ) |
void | setItemPrototype ( const QTableWidgetItem * item ) |
void | setRangeSelected ( const QTableWidgetSelectionRange & range, bool select ) |
void | setRowCount ( int rows ) |
void | setVerticalHeaderItem ( int row, QTableWidgetItem * item ) |
void | setVerticalHeaderLabels ( const QStringList & labels ) |
void | sortItems ( int column, Qt::SortOrder order = Qt::AscendingOrder ) |
QTableWidgetItem * | takeHorizontalHeaderItem ( int column ) |
QTableWidgetItem * | takeItem ( int row, int column ) |
QTableWidgetItem * | takeVerticalHeaderItem ( int row ) |
QTableWidgetItem * | verticalHeaderItem ( int row ) const |
int | visualColumn ( int logicalColumn ) const |
QRect | visualItemRect ( const QTableWidgetItem * item ) const |
int | visualRow ( int logicalRow ) const |
- 34 public functions inherited from QTableView
- 57 public functions inherited from QAbstractItemView
- 17 public functions inherited from QAbstractScrollArea
- 14 public functions inherited from QFrame
- 221 public functions inherited from QWidget
- 29 public functions inherited from QObject
- 13 public functions inherited from QPaintDevice
Public Slots
void | clear () |
void | clearContents () |
void | insertColumn ( int column ) |
void | insertRow ( int row ) |
void | removeColumn ( int column ) |
void | removeRow ( int row ) |
void | scrollToItem ( const QTableWidgetItem * item, QAbstractItemView::ScrollHint hint = EnsureVisible ) |
- 11 public slots inherited from QTableView
- 9 public slots inherited from QAbstractItemView
- 19 public slots inherited from QWidget
- 1 public slot inherited from QObject
Signals
void | cellActivated ( int row, int column ) |
void | cellChanged ( int row, int column ) |
void | cellClicked ( int row, int column ) |
void | cellDoubleClicked ( int row, int column ) |
void | cellEntered ( int row, int column ) |
void | cellPressed ( int row, int column ) |
void | currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn ) |
void | currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous ) |
void | itemActivated ( QTableWidgetItem * item ) |
void | itemChanged ( QTableWidgetItem * item ) |
void | itemClicked ( QTableWidgetItem * item ) |
void | itemDoubleClicked ( QTableWidgetItem * item ) |
void | itemEntered ( QTableWidgetItem * item ) |
void | itemPressed ( QTableWidgetItem * item ) |
void | itemSelectionChanged () |
- 6 signals inherited from QAbstractItemView
- 1 signal inherited from QWidget
- 1 signal inherited from QObject
Protected Functions
virtual bool | dropMimeData ( int row, int column, const QMimeData * data, Qt::DropAction action ) |
QModelIndex | indexFromItem ( QTableWidgetItem * item ) const |
QTableWidgetItem * | itemFromIndex ( const QModelIndex & index ) const |
QList<QTableWidgetItem *> | items ( const QMimeData * data ) const |
virtual QMimeData * | mimeData ( const QList<QTableWidgetItem *> items ) const |
virtual QStringList | mimeTypes () const |
virtual Qt::DropActions | supportedDropActions () const |
Reimplemented Protected Functions
virtual void | dropEvent ( QDropEvent * event ) |
virtual bool | event ( QEvent * e ) |
- 14 protected functions inherited from QTableView
- 36 protected functions inherited from QAbstractItemView
- 18 protected functions inherited from QAbstractScrollArea
- 3 protected functions inherited from QFrame
- 37 protected functions inherited from QWidget
- 8 protected functions inherited from QObject
- 1 protected function inherited from QPaintDevice
Additional Inherited Members
- 4 static public members inherited from QWidget
- 7 static public members inherited from QObject
- 6 protected slots inherited from QTableView
- 9 protected slots inherited from QAbstractItemView
- 1 protected slot inherited from QAbstractScrollArea
- 1 protected slot inherited from QWidget
1. 將表格變為禁止編輯
在默認情況下,表格里的字符是可以更改的,比如 雙擊一個單元格,就可以修改原來的內容,如果想禁止用戶的這種操作,讓這個表格對用戶只讀,可以這樣:
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
QAbstractItemView.NoEditTriggers 是QAbstractItemView.EditTrigger枚舉中的一個,都是觸發修改單元格內容的條件:
QAbstractItemView.NoEditTriggers
0
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
0
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綁定
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);(注意此處的列沒有值)