注意: QTableWiget 在使用前一定要设置行数以及列数 ( QTableWidget *tableWidget = new QTableWidget(15,5) 此种方法可不用)
QStringList headList;
headList<<"Test"<<"Value";
m_iRow = 5;//表格当前行数
m_iCol = headList.size();//表格当前列数
ui->tableWidget->setColumnCount(m_iCol);//设置列数
ui->tableWidget->setRowCount(m_iRow);//设置行数
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//自适应列宽
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格不能被编辑
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//整行选中效果
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);//设置为只能单选
ui->tableWidget->verticalHeader()->setVisible(false); //隐藏列表头
ui->tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头
ui->tableWidget->setHorizontalHeaderLabels(headList);//设置表头
ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、 Ctrl+A 等)
int iCurCount = ui->tableWidget->currentRow();//获取当前行数
//在单元格里面添加控件
QComboBox *comBox = new QComboBox(ui->tableWidget);
comBox->addItem("Y");
comBox->addItem("N");
ui->tableWidget->setCellWidget(4,0,comBox);
QLineEdit * l = new QLineEdit(ui->tableWidget);
l->setText("test");
ui->tableWidget->setCellWidget(4,1,l);
//设置表格某一列不能被编辑
QTableWidgetItem *item = ui->tableWidget->item(4,1);
item->setFlags(item->flags() & (~Qt::ItemIsEditable));
QString strText = ui->tableWidget->item(0, 0)->text(); //获取单元格内容
QList<QTableWidgetItem*> list = ui->tableWidget->selectedItems();//获取选择的Items
QTableWidget常用槽函数和信号:
void itemClicked(QTableWidgetItem *item);//单击单元格信号
void itemDoubleClicked(QTableWidgetItem *item)//双击单元格信号
[slot] void QTableWidget::clear()//清除表格 会释放单元格子所占据的空间 (槽函数) //清空掉表格内所有内容,包括标题头
[slot] void QTableWidget::clearContents()//清除表格 不会清除表格头(槽函数)
[signal] void QWidget::customContextMenuRequested(const QPoint &pos)(信号 实现右键菜单编写其槽函数即可)
QTableWidget之右键菜单实现
①启用右键菜单
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);//启用右键菜单
②编写响应槽函数
QObject::connect(ui->tableWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(SlotcustomContextMenuRequested(QPoint)));
③编写响应函数
void Widget::on_tableWidget_customContextMenuRequested(const QPoint &pos)
{
QMenu * menu = new QMenu;
QAction *action = new QAction;//构建菜单和菜单项
action->setText("Add");
connect(action,SIGNAL(triggered(bool)),this,SLOT(Test()));//绑定响应函数
menu->addAction(action);
menu->exec(QCursor::pos());
delete menu;
delete action;//释放空间
}
QTableWidget动态添加行
void Widget::Test()
{
ui->tableWidget->insertRow(m_iRow);//在尾部插入行
for(int j = 0;j<2;++j)
{
QTableWidgetItem * item = new QTableWidgetItem;
item->setText(QString("%1,%2").arg(m_iRow+1).arg(j+1));
ui->tableWidget->setItem(m_iRow,j,item);//设置表格项
}
m_iRow++;//行加一
}