QTableWidget中单元格包含的内容成为QTableWidgetItem。如果想向QTableWidget中添加文字或图片,则需要先创建一个QTableWidgetItem,然后使用QTableWidget的方法setItem()将其添加到QTableWidget中。当然,如果要对QTableWidget中的任意一个单元格项进行特殊设置,比如字体、颜色等也需要使用QTableWidgetItem。而对于向QTableWidget中添加控件则只需使用QTableWidget的方法setCellWidget()将创建的控件指针作为参数传递进来即可。
而QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
4、实例。
QTableWidget * pTableWidget = new QTableWidget( this );
pTableWidget->setColumnCount( 5 ); //设置列数
pTableWidget->setRowCount( 3 ); //设置行数
//pTableWidget = new QTableWidget( 5, 3, this ); //带参构造函数
/*设置列名*/
QStringList headers;
headers << tr( "列名1" ) << tr( "列名2" ) << tr( "列名3" ) << tr( "列名4" ) << tr( "列名5" ); //乱码???
pTableWidget->setHorizontalHeaderLabels( headers );
/*给单元格添加内容*/
addItemContent( 0, 0, tr( "ad" ) );
/*给单元格中增加图标*/
QTableWidgetItem * pItem1 = new QTableWidgetItem( QIcon( ".//Resources//Male.png" ), NULL ); //只加入图标,没有字符串
QTableWidgetItem * pItem2 = new QTableWidgetItem( QIcon( ".//Resources//Male.png" ), tr( "Male" ) );//加入图标和字符串
pTableWidget->setItem( 0, 1, pItem1 );
pTableWidget->setItem( 0, 2, pItem2 );
/*插入一行*/
int row = pTableWidget->rowCount();
pTableWidget->insertRow( row );
/*插入一列*/
int column = pTableWidget->columnCount();
pTableWidget->insertColumn( column ); //设置某一列的标题
//使行列头自适应宽度,最后一列将会填充空白部分???,注意需要头文件“QHeaderView”
//pTableWidget->horizontalHeader()->setStretchLastSection( true );
//是行列头自适应宽度,所有列平均分来填充空白部分,注意需要头文件“QHeaderView”
//pTableWidget->horizontalHeader()->setResizeMode( QHeaderView::Stretch );
//使行自适应高度。假如行很多的话,行的高度不会一直减小,当达到一定值时会自动生成一个QScrollBar,注意需要头文件“QHeaderView”
//pTableWidget->verticalHeader()->setResizeMode( QHeaderView::Stretch );
//设置单击选择一行,注意需要头文件“QAbstractItemView”
pTableWidget->setSelectionBehavior( QAbstractItemView::SelectRows );
//设置每行内容不可编辑,注意需要头文件“QAbstractItemView”
//pTableWidget->setEditTriggers( QAbstractItemView::NoEditTriggers );
//设置只能选择一行,不能选择多行,注意需要头文件“QAbstractItemView”
//pTableWidget->setSelectionMode( QAbstractItemView::SingleSelection );
//去掉每行的行号,注意需要头文件“QHeaderView”
//QHeaderView * pHeaderView = pTableWidget->verticalHeader();
//pHeaderView->setHidden( true );
//设置选中某个单元格,注意需要头文件“QItemSelectionModel”
//pTableWidget->setCurrentCell( 0, 1, QItemSelectionModel::Select );
//设置选中某行,注意需要头文件“QItemSelectionModel”
//pTableWidget->setCurrentCell( 1, QItemSelectionModel::Select );
//表头的显示与隐藏,注意需要头文件“QHeaderView”
//pTableWidget->verticalHeader()->setVisible( false ); //隐藏列表头,也可通过去掉行号实现
//pTableWidget->horizontalHeader()->setVisible( false ); //隐藏行表头
//对表头文字的字体、颜色进行设置
//QTableWidgetItem * pColumnHeaderItem = pTableWidget->horizontalHeaderItem( 1 ); //获得水平方向表头的Item对象
//pColumnHeaderItem->setFont( QFont( "Helvetia" ) ); //设置字体
//pColumnHeaderItem->setBackgroundColor( QColor( 0, 60, 10 ) );//设置单元格背景颜色
//pColumnHeaderItem->setTextColor( QColor( 200, 111, 30 ) ); //设置文字颜色
//pColumnHeaderItem->setText( tr( "Column" ) );
//在单元格中加入控件
QComboBox * pComboBox = new QComboBox();
pComboBox->addItem( tr( "Male" ) );
pComboBox->addItem( tr( "FeMale" ) );
pTableWidget->setCellWidget( 1, 0, pComboBox );
/********************************************************/
//设置行和列的大小与内容匹配
pTableWidget->resize( 700, 500 ); //设置整个表格的大小
pTableWidget->resizeColumnsToContents();
pTableWidget->resizeRowsToContents();
//设置某行或某列的大小
//pTableWidget->setColumnWidth( 3, 200 );
//pTableWidget->setRowHeight( 3, 60 );
//合并单元格
pTableWidget->setSpan( 2, 0, 2, 2 );
//单元格设置字体颜色和背景颜色 及字体字符
QTableWidgetItem * pItem3 = new QTableWidgetItem("Apple");
pItem3->setBackgroundColor( QColor( 0, 60, 10 ) );
pItem3->setTextColor( QColor( 200, 111, 100 ) );
pItem3->setFont( QFont( "Helvetica" ) );
pItem3->setTextAlignment( Qt::AlignCenter ); //设置单元格内文字的对齐方式,如果两种都要设置,只要用 Qt.AlignHCenter | Qt.AlignVCenter 的方式即可
pTableWidget->setItem( 2, 0, pItem3 );
//另:如果需要对所有的单元格都使用这种字体,则可以使用 pTableWidget->setFont(QFont("Helvetica"));
pTableWidget->show();