- 在QTableWidget中添加button
QPushButton *pBtn = new QPushButton(); connect(pBtn, SIGNAL(clicked()), this, SLOT(OnBtnClicked())); ui.tableWidget->setCellWidget(_row, _column, pBtn);
基於上面添加QPushButton的方式,獲取button所在QTableWidget的行和列:
QPushButton *obj= (QPushButton*)sender(); int x = obj->frameGeometry().x(); int y = obj->frameGeometry().y(); QModelIndex index = ui.tableWidget->indexAt(QPoint(x, y)); int row = index.row(); int column = index.column();
注意:上面代碼要放在button對應的槽函數中。在某些情況下,不能把button控件直接放到QTableWidget中,這個時候需要添加QWidget設置爲button控件的父類,通過添加widget,再將button添加到tableWidget中。如果是這樣的話,上面獲取button所在行列的方法就不能使用了。
-
刪除QTableWidget中的所有行
ui.tableWidget->setRowCount(0); ui.tableWidget->clearContents();
注意:並不是直接使用clear()函數,使用clear()的話,表頭內容也會刪除。
- 刪除選中行
QList<QTableWidgetSelectionRange> _ranges = ui.tableWidget->selectedRanges(); int _selectRows = _ranges.count(); for (int j = 0; j < _selectRows; j++) { int _topRow = _ranges.at(j).topRow(); //獲取所在行 ui.tableWidget->remove(_topRow); }
-
QTableWidget中如果插入QComboBox、QLineEdit等控件,如果不想這一列被選中,可以加入如下代碼,然後再加入對應的控件:
cell = new QTableWidgetItem(); cell->setTextAlignment(Qt::AlignCenter); cell->setFlags(cell->flags() ^ Qt::ItemIsEditable); cell->setFlags(cell->flags() & ~Qt::ItemIsSelectable); ui.tableWidget->setItem(1 + i * 2, 2,cell); QWidget *_widgetUpDown = new QWidget(ui.tableWidget); QHBoxLayout *_hlayoutUpDown = new QHBoxLayout; _hlayoutUpDown->setMargin(0); MyLineEdit *_lineEditUpDown = new MyLineEdit(); _lineEditUpDown->setValidator(m_pRevalidotor); _lineEditUpDown->setAlignment(Qt::AlignCenter); _lineEditUpDown->setText(_schedule->getRunNextTime()); //獲取數據 _lineEditUpDown->setFixedSize(70, 25); connect(_lineEditUpDown, SIGNAL(textEdited(const QString &)), this, SLOT(slotChangeRunTime(const QString &)));
-
刪除選中多行
std::vector<int> _vecItemIndex; //保存選中行的行號
QList<QTableWidgetItem*> _selections = ui.tableWidget->selectedItems();
for (int i = 0; i < _selections.size(); ++i)
{
_vecItemIndex.push_back(_selections.at(i)->row()); //存儲選中的行
}
std::sort(_vecItemIndex.begin(), _vecItemIndex.end(), std::greater<int>()); //將行號從大到小排序
_vecItemIndex.erase(std::unique(_vecItemIndex.begin(), _vecItemIndex.end()), _vecItemIndex.end()); //去除重複的行號
for (int k = 0; k < _vecItemIndex.size(); ++k)
{
QString _name = ui.tableWidget->item(_vecItemIndex[k], 0)->text();
//..刪除數據部分
m_ui.tableWidget_4->removeRow(_vecItemIndex[k]);
}