(7条消息) QT QTableWidget用法总结

QTableWidget是QT程序中常用的显示数据表格的控件,其类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类,其主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

[cpp] view plain  copy

#include <QtGui/QApplication>#include <QTableWidget>#include <QTableWidgetItem>int main(int argc, char *argv[]){QApplication a(argc, argv);QTableWidget *tableWidget = new QTableWidget(10,5); // 构造了一个QTableWidget的对象,并且设置为10行,5列//    也可用下面的方法构造QTableWidget对象//    QTableWidget *tableWidget = new QTableWidget;//    tableWidget->setRowCount(10);     //设置行数为10//    tableWidget->setColumnCount(5);   //设置列数为5tableWidget->setWindowTitle("QTableWidget & Item");tableWidget->resize(350, 200);  //设置表格QStringList header;header<<"Month"<<"Description";tableWidget->setHorizontalHeaderLabels(header);tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));tableWidget->show();return a.exec();}一. 对QTableWidget本身的效果实现1. 将表格变为禁止编辑在默认情况下,表格里的字符是可以更改的,比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚举中的一个,都是触发修改单元格内容的条件:QAbstractItemView.NoEditTriggers0No editing possible. 不能对表格内容进行修改QAbstractItemView.CurrentChanged1Editing start whenever current item changes.任何时候都能对单元格修改QAbstractItemView.DoubleClicked2Editing starts when an item is double clicked.双击单元格QAbstractItemView.SelectedClicked4Editing starts when clicking on an already selected item.单击已选中的内容QAbstractItemView.EditKeyPressed8Editing starts when the platform edit key has been pressed over an item.QAbstractItemView.AnyKeyPressed16Editing starts when any key is pressed over an item.按下任意键就能修改QAbstractItemView.AllEditTriggers31Editing starts for all above actions.以上条件全包括2. 设置表格为整行选择tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式QAbstractItemView.SelectionBehavior枚举还有如下类型ConstantValueDescriptionQAbstractItemView.SelectItems0Selecting single items.选中单个单元格QAbstractItemView.SelectRows1Selecting only rows.选中一行QAbstractItemView.SelectColumns2Selecting only columns.选中一列3.单个选中和多个选中的设置:tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  //设置为可以选中多个目标该函数的参数还可以是:QAbstractItemView.NoSelection      不能选择QAbstractItemView.SingleSelection  选中单个目标QAbstractItemView.MultiSelection    选中多个目标QAbstractItemView.ExtendedSelection   QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选4. 表格表头的显示与隐藏对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:[cpp] view plain  copy

tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头注意:需要 #include <QHeaderView>5. 对表头文字的字体、颜色进行设置[cpp] view plain  copy

QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色注意:需要 #include <QHeaderView>6. 在单元格里加入控件:QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。比如,把一个下拉框加入单元格,可以这么做:[cpp] view plain  copy

QComboBox *comBox = new QComboBox();comBox->addItem("Y");comBox->addItem("N");tableWidget->setCellWidget(0,2,comBox);读取QComboBox 信息:[html] view plain  copy

QWidget * widget=ui->tableWidget->cellWidget(i,0);//获得widgetQComboBox *combox=(QComboBox*)widget;//强制转化为QComboBoxQString string=combox->currentText();qDebug()<<string;二. 对单元格的进行设置1. 单元格设置字体颜色和背景颜色 及字体字符[cpp] view plain  copy

QTableWidgetItem *item = new QTableWidgetItem("Apple");item->setBackgroundColor(QColor(0,60,10));item->setTextColor(QColor(200,111,100));item->setFont(QFont("Helvetica"));tableWidget->setItem(0,3,item);另:如果需要对所有的单元格都使用这种字体,则可以使用  tableWidget->setFont(QFont("Helvetica"));2. 设置单元格内文字的对齐方式这个比较简单,使用newItem.setTextAlignment()函数即可,该函数的参数为单元格内的对齐方式,和字符输入顺序是自左相右还是自右向左。水平对齐方式有:ConstantValueDescriptionQt.AlignLeft0x0001Aligns with the left edge.Qt.AlignRight0x0002Aligns with the right edge.Qt.AlignHCenter0x0004Centers horizontally in the available space.Qt.AlignJustify0x0008Justifies the text in the available space.垂直对齐方式:ConstantValueDescriptionQt.AlignTop0x0020Aligns with the top.Qt.AlignBottom0x0040Aligns with the bottom.Qt.AlignVCenter0x0080Centers vertically in the available space.如果两种都要设置,只要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可3. 合并单元格效果的实现:tableWidget->setSpan(0, 0, 3, 1)  # 其参数为: 要改变单元格的   1行数  2列数     要合并的  3行数  4列数4. 设置单元格的大小首先,可以指定某个行或者列的大小[cpp] view plain  copy

tableWidget->setColumnWidth(3,200);tableWidget->setRowHeight(3,60);还可以将行和列的大小设为与内容相匹配[cpp] view plain  copy

tableWidget->resizeColumnsToContents();tableWidget->resizeRowsToContents();5. 获得单击单元格的内容通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));//将itemClicked信号与函数getItem绑定6.QTableWidget要调整表格行宽主要涉及以下一个函数resizeColumnsToContents();//根据内容调整列宽resizeColumnToContents(int col);//根据内容自动调整给定列宽horizontalHeader()->setResizeMode;//把给定列设置为给定模式主要模式有Stretch和Fixed7.总结int row = rowCount();removeRow(row);//清除已有的行列setShowGrid(true);//显示表格线verticalHeader()->setVisible(false);//隐藏左边垂直QHeaderView *headerView = horizontalHeader();headerView->setMovable(false);//去除表头的移动headerView->resizeSection(0,284);//设置第一列宽headerView->resizeSection(1,127);//设置第二列宽headerView->setResizeMode(QHeaderView::Fixed);//列表不能移动headerView->setClickable(false);//不响应鼠标单击setEditTriggers(QTableWidget::NoEditTriggers);//不能编辑setSelectionBehavior(QTableWidget::SelectRows);//一次选中一行setSelectionMode(QAbstractItemView::SingleSelection);//只能单选/*QScrollBar *scrollBar = horizontalScrollBar();scrollBar->hide();*/setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动setAutoScroll(false);//去掉自动滚动

(0)

相关推荐