最近用QT中表格用的比較多,使用的是QTableWidget這個控件,總結一下QTableWidget的一些相關函數。
1.將表格變為禁止編輯:
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); (參數含義:QAbstractItemView.NoEditTriggers--不能對表格內容進行修改 QAbstractItemView.CurrentChanged--任何時候都能對單元格修改 QAbstractItemView.DoubleClicked--雙擊單元格 QAbstractItemView.SelectedClicked--單擊已選中的內容 QAbstractItemView.EditKeyPressed-- QAbstractItemView.AnyKeyPressed--按下任意鍵就能修改 QAbstractItemView.AllEditTriggers--以上條件全包括)
2.設置表格為整行選擇
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行選中的方式 (參數含義:AbstractItemView.SelectItems--選中單個單元格 QAbstractItemView.SelectRows--選中一行 QAbstractItemView.SelectColumns--選中一列)
3.單個選中和多個選中的設置
tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //設置為可以選中多個目標 (參數含義:QAbstractItemView.NoSelection--不能選擇 QAbstractItemView.SingleSelection--選中單個目標 QAbstractItemView.MultiSelection--選中多個目標 QAbstractItemView.ExtendedSelection/QAbstractItemView.ContiguousSelection 的區別不明顯,主要功能是正常情況下是單選,但按下Ctrl或Shift鍵后,可以多選)
4.表格表頭的顯示與隱藏
注意:需要 #include <QHeaderView>
對於水平或垂直方法的表頭,可以用以下方式進行 隱藏/顯示 的設置:
tableWidget->verticalHeader()->setVisible(false); //隱藏列表頭 tableWidget->horizontalHeader()->setVisible(false); //隱藏行表頭
5.對表頭文字的字體、顏色進行設置
注意:需要 #include <QHeaderView>
QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //獲得水平方向表頭的Item對象 columnHeaderItem0->setFont(QFont("Helvetica")); //設置字體 columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //設置單元格背景顏色 columnHeaderItem0->setTextColor(QColor(200,111,30)); //設置文字顏色
6.在單元格里加入控件
QComboBox *comBox = new QComboBox(); comBox->addItem("Y"); comBox->addItem("N"); tableWidget->setCellWidget(0,2,comBox);
7.單元格中添加圖片
tableWidget->setItem(row, 0, new QTableWidgetItem(QIcon(":/new/images/kingdemo.ico"),tr("")));
8.設置單元格字體顏色、背景顏色和字體字符
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"));
9.設置單元格內文字的對齊方式
// 水平對齊方式有: 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 的方式即可
10.合並單元格
tableWidget->setSpan(0, 0, 3, 1) //其參數為: 要改變單元格的1行數、2列數,要合並的3行數、4列數
11.設置單元格的大小
//首先,可以指定某個行或者列的大小 tableWidget->setColumnWidth(3,200); tableWidget->setRowHeight(3,60); //還可以將行和列的大小設為與內容相匹配 tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents();
12.獲得單擊單元格的內容
通過實現 itemClicked (QTableWidgetItem *) 信號的槽函數,就可以獲得鼠標單擊到的單元格指針,進而獲得其中的文字信息
connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int))); //將itemClicked信號與函數getItem綁定
13.QTableWidget要調整表格行寬主要涉及以下函數
tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);//使列完全填充並平分 tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);//行自適應寬度 tableWidget->resizeColumnsToContents(); //根據內容調整列寬 tableWidget->resizeColumnToContents(int col);//根據內容自動調整給定列寬 tableWidget->horizontalHeader()->setResizeMode//把給定列設置為給定模式 //主要模式有Stretch和Fixed
14.添加表頭內容
//方法一: 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"));
15.清除
tableWidget->clear();//清除所有可見數據(包括表頭),行還在 tableWidget->clearContents();//只清除表中數據,不清除表頭內容 tableWidget->setRowCount(0);//連行也清除掉
16.排序
tableWidget->sortByColumn(0, Qt::AscendingOrder);//顧名思義,該函數意思是將某列按升序/降序的方式排列
17.一些零碎的知識點代碼
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);//去掉自動滾動
18.使用實例
ui.Retina_1->setRowCount(8); //設置行數為8 ui.Retina_1->setColumnCount(6); //設置列數為6 ui.Retina_1->clear(); //自適應寬度 ui.Retina_1->horizontalHeader()->setStretchLastSection(true); ui.Retina_1->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //設置默認高度 ui.Retina_1->verticalHeader()->setDefaultSectionSize(25); //隱藏滾動條 ui.Retina_1->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui.Retina_1->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui.Retina_1->setEditTriggers(QAbstractItemView::NoEditTriggers);//不可編輯 ui.Retina_1->setSelectionMode(QAbstractItemView::NoSelection);//不可選擇 ui.Retina_1->verticalHeader()->setVisible(false); //隱藏列表頭 //設置表頭 QStringList header; header << "類型" << "厚度" << "體積" << "類型" << "厚度" << "體積"; ui.Retina_1->setHorizontalHeaderLabels(header); ui.Retina_1->setSpan(0, 3, 1, 5);//將無用單元格合並 //設置每一項 ui.Retina_1->setItem(0, 0, new QTableWidgetItem("F"));// ui.Retina_1->setItem(1, 0, new QTableWidgetItem("PF"));// ui.Retina_1->setItem(2, 0, new QTableWidgetItem("P_S_H")); // ui.Retina_1->setItem(3, 0, new QTableWidgetItem("P_I_H"));// ui.Retina_1->setItem(4, 0, new QTableWidgetItem("P_T"));// ui.Retina_1->setItem(5, 0, new QTableWidgetItem("P_S"));// ui.Retina_1->setItem(6, 0, new QTableWidgetItem("P_N"));// ui.Retina_1->setItem(7, 0, new QTableWidgetItem("P_I"));// ui.Retina_1->setItem(1, 3, new QTableWidgetItem("PF")); // ui.Retina_1->setItem(2, 3, new QTableWidgetItem("P_S_H"));// ui.Retina_1->setItem(3, 3, new QTableWidgetItem("P_I_H"));// ui.Retina_1->setItem(4, 3, new QTableWidgetItem("P_T"));// ui.Retina_1->setItem(5, 3, new QTableWidgetItem("P_S"));// ui.Retina_1->setItem(6, 3, new QTableWidgetItem("P_N"));// ui.Retina_1->setItem(7, 3, new QTableWidgetItem("P_I"));////每一項的厚度值 if (true) { ui.Retina_1->setItem(0, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(1, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(2, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(3, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(4, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(5, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(6, 1, new QTableWidgetItem(QString::number(g_Scan)));// ui.Retina_1->setItem(7, 1, new QTableWidgetItem(QString::number(g_Scan)));// }