QTableWidget介绍
QTbaleWidget是QT对话框设计中常用的显示数据表格的控件。
学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研究人一样一样的),因为QTableWidget继承于类QTableView。
两者主要区别是QTableView可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型。
QTableWidget单元格数据是QTableWidgetItem对象来实现的(即就是不需要数据源,单元格内的信息需要逐个填充即可)。
这主要由于QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。
使用QTableWidget就离不开QTableWidgetItem。
QTableWidgetItem用来表示表格中的其中一个单元格,整个表格都需要用逐个单元格对象QTableWidgetItem构建起来。
QTableWidget使用总结
(1)禁止编辑表格
在默认情况下,表格里的字符是可以更改的。
比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:
[cpp] view plain copy print?
- ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
(2)设置表格为选择整行
[cpp] view plain copy print?
- ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows);
(3)设置单个选中和多个选中
单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。
[cpp] view plain copy print?
- ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
(4)表格表头的显示与隐藏
对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:
[cpp] view plain copy print?
- ui.qtablewidget->verticalHeader()->setVisible(true);
- ui.qtablewidget->horizontalHeader()->setVisible(false);
ui.qtablewidget->verticalHeader()->setVisible(true); ui.qtablewidget->horizontalHeader()->setVisible(false);
(5)设置具体单元格中字体的对齐方式
[cpp] view plain copy print?
- ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);
ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);
(6)设置具体单元格中字体格式
[cpp] view plain copy print?
- 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->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"));
(7)设置具体单元格的值
[cpp] view plain copy print?
- ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));
ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));
(8)把QTableWidgetItem对象内容转换为QString
[cpp] view plain copy print?
- QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();
QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();
(9)具体单元格中添加控件
[cpp] view plain copy print?
- QComboBox *comBox = new QComboBox();
- comBox->addItem("F");
- comBox->addItem("M");
- ui.qtablewidget->setCellWidget(0,3,comBox);
QComboBox *comBox = new QComboBox(); comBox->addItem("F"); comBox->addItem("M"); ui.qtablewidget->setCellWidget(0,3,comBox);
(10)合并单元格
[cpp] view plain copy print?
- //合并单元格的效果
- ui.qtablewidget->setSpan(2, 2, 3, 2);
- //第一个参数:要改变的单元格行数
- //第二个参数:要改变的单元格列数
- //第三个参数:需要合并的行数
- 6 //第四个参数:需要合并的列数
//合并单元格的效果 ui.qtablewidget->setSpan(2, 2, 3, 2); //第一个参数:要改变的单元格行数 //第二个参数:要改变的单元格列数 //第三个参数:需要合并的行数 6 //第四个参数:需要合并的列数
(11)具体单元格中插入图片
[cpp] view plain copy print?
- ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));
ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));
(12)设置显示网格
[cpp] view plain copy print?
- ui.qtablewidget->setShowGrid(true);//显示表格线
ui.qtablewidget->setShowGrid(true);//显示表格线
(13)设置滚动条
[cpp] view plain copy print?
- ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
(14)设置列标签
[cpp] view plain copy print?
- //初始化界面
- 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);
//初始化界面 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);
(15)设置行和列的大小设为与内容相匹配
[cpp] view plain copy print?
- ui.qtablewidget->resizeColumnsToContents();
- ui.qtablewidget->resizeRowsToContents();
ui.qtablewidget->resizeColumnsToContents(); ui.qtablewidget->resizeRowsToContents();
(16)设置字体
[cpp] view plain copy print?
- ui.qtablewidget->setFont(font); //设置字体
ui.qtablewidget->setFont(font); //设置字体
(17)获取某一单元格的内容
[cpp] view plain copy print?
- <p>QString strText = ui.qtablewidget->item(0, 0)->text();</p>
QString strText = ui.qtablewidget->item(0, 0)->text();
(18)清除单元格测内容
[cpp] view plain copy print?
- ui.tablewidget->clearContents( ); // 清除表项
ui.tablewidget->clearContents( ); // 清除表项
(19)删除整个列表
[cpp] view plain copy print?
- while(ui.tablewidget->rowCount( ) > 0)
- {
- ui.tablewidget->removeRow(0); // 删除第0行
- }
while(ui.tablewidget->rowCount( ) > 0) { ui.tablewidget->removeRow(0); // 删除第0行 }
(20)获取选定的行
[cpp] view plain copy print?
- // QTableWidget选中所有单元格及取消选中所有单元格
- // ui->allowSelectKeyTableWidget->selectAll();
- // ui->allowSelectKeyTableWidget->setFocus();
- introwCount=ui->TableWidget->rowCount();
- qDebug()<<"rowcount"<<rowCount;
- intcolCount=ui->TableWidget->columnCount();
- qDebug()<<"colcount"<<colCount;
- QTableWidgetSelectionRangerange(0,0,rowCount-1,colCount-1);
- ui->TableWidget->setRangeSelected(range,true);//false不选中
- ui->TableWidget->setFocus();
// QTableWidget选中所有单元格及取消选中所有单元格 // ui->allowSelectKeyTableWidget->selectAll(); // ui->allowSelectKeyTableWidget->setFocus(); introwCount=ui->TableWidget->rowCount(); qDebug()<<"rowcount"<<rowCount; intcolCount=ui->TableWidget->columnCount(); qDebug()<<"colcount"<<colCount; QTableWidgetSelectionRangerange(0,0,rowCount-1,colCount-1); ui->TableWidget->setRangeSelected(range,true);//false不选中 ui->TableWidget->setFocus();
方法1
[cpp] view plain copy print?
- QList<QTableWidgetItem*>items=ui->TableWidget->selectedItems();
- intcount=items.count();
- for(inti=0;i<count;i++)
- {
- introw=ui->TableWidget->row(items.at(i));//获取选中的行
- QTableWidgetItem*item=items.at(i);
- QStringname=item->text();//获取内容
- }
QList<QTableWidgetItem*>items=ui->TableWidget->selectedItems(); intcount=items.count(); for(inti=0;i<count;i++) { introw=ui->TableWidget->row(items.at(i));//获取选中的行 QTableWidgetItem*item=items.at(i); QStringname=item->text();//获取内容 }
方法2
[cpp] view plain copy print?
- QList<QTableWidgetSelectionRange>ranges=ui->TableWidget->selectedRanges();
- intcount=ranges.count();
- for(inti=0;i<count;i++)
- {
- inttopRow=ranges.at(i).topRow();
- intbottomRow=ranges.at(i).bottomRow();
- for(intj=topRow;j<=bottomRow;j++)
- {
- qDebug()<<"selectRow"<<j;
- }
- }
转载:http://blog.csdn.net/gatieme/article/details/17991269