Qt中QTableWidget的常用功能

  1. 在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所在行列的方法就不能使用了。

  2. 刪除QTableWidget中的所有行

    ui.tableWidget->setRowCount(0);
    ui.tableWidget->clearContents();
    

    注意:並不是直接使用clear()函數,使用clear()的話,表頭內容也會刪除。

  3. 刪除選中行
    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);
    }

     

  4. QTableWidget中如果插入QComboBoxQLineEdit等控件,如果不想這一列被選中,可以加入如下代碼,然後再加入對應的控件: 

    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 &)));
    

     

  5. 刪除選中多行

 

    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]);
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章