兩者主要區別是QTableView可以使用自訂的資料模型來顯示內容(也就意味著使用時先要通過setModel來綁定資料來源),而QTableWidget則只能使用標準的資料模型。
QTableWidget單元格資料是QTableWidgetItem對象來實現的(即就是不需要資料來源,單元格內的資訊需要逐個填充即可)。
這主要由於QTableView類中有setModel成員函數,而到了QTableWidget類中,該成員函數變成了私人。
使用QTableWidget就離不開QTableWidgetItem。
QTableWidget使用總結
在預設情況下,表格裡的字元是可以更改的。
比如雙擊一個單元格,就可以修改原來的內容,如果想禁止使用者的這種操作,讓這個表格對使用者唯讀,可以這樣:
ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows);
單個選中意味著每次只可以選中一個單元格,多個就是相當於可以選擇”一片“那種模式。
ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
對於水平或垂直方向的表頭,如果不想顯示可以用以下方式進行(隱藏
ui.qtablewidget->verticalHeader()->setVisible(true); ui.qtablewidget->horizontalHeader()->setVisible(false);
ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);
ui.qtablewidget->item(1, 0)->setBackgroundColor(QColor(0,60,10)); ui.qtablewidget->item(1, 0)->setTextColor(QColor(200,111,100)); ui.qtablewidget->item(1, 0)->setFont(QFont("Helvetica"));
ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));
QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();
QComboBox *comBox = new QComboBox(); comBox->addItem("F"); comBox->addItem("M"); ui.qtablewidget->setCellWidget(0,3,comBox);
//合併儲存格的效果ui.qtablewidget->setSpan(2, 2, 3, 2);//第一個參數:要改變的儲存格行數//第二個參數:要改變的儲存格列數//第三個參數:需要合并的行數6 //第四個參數:需要合并的列數
ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));
ui.qtablewidget->setShowGrid(true);//顯示表格線
ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平捲軸
//初始化介面QStringList HStrList;HStrList.push_back(QString("name"));HStrList.push_back(QString("id"));HStrList.push_back(QString("age"));HStrList.push_back(QString("sex"));HStrList.push_back(QString("department")); //設定行列數(只有列存在的前提下,才可以設定欄標籤)int HlableCnt = HStrList.count();ui.qtablewidget->setRowCount(10);ui.qtablewidget->setColumnCount(HlableCnt);//設定欄標籤ui.qtablewidget->setHorizontalHeaderLabels(HStrList);
ui.qtablewidget->resizeColumnsToContents(); ui.qtablewidget->resizeRowsToContents();
ui.qtablewidget->setFont(font); //設定字型
QString strText = ui.qtablewidget->item(0, 0)->text();