首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(转)QTableWidget 用法小结

2012-09-05 
(转)QTableWidget 用法总结http://blog.csdn.net/polokang/article/details/6696982添加其他控件作为QTabl

(转)QTableWidget 用法总结

http://blog.csdn.net/polokang/article/details/6696982

添加其他控件作为QTableWidgetItem应该用setCellWidget而非setItem

NoEditTriggers对这些添加的控件(如QCheckBox)是无效的

?

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

?

view plain
  1. #include?<QtGui/QApplication>??
  2. #include?<QTableWidget>??
  3. #include?<QTableWidgetItem>??
  4. ??
  5. int?main(int?argc,?char?*argv[])??
  6. {??
  7. ????QApplication?a(argc,?argv);??
  8. ????QTableWidget?*tableWidget?=?new?QTableWidget(10,5);?//?构造了一个QTableWidget的对象,并且设置为10行,5列??
  9. ????//????也可用下面的方法构造QTableWidget对象??
  10. ????//????QTableWidget?*tableWidget?=?new?QTableWidget;??
  11. ????//????tableWidget->setRowCount(10);?????//设置行数为10??
  12. ????//????tableWidget->setColumnCount(5);???//设置列数为5??
  13. ????tableWidget->setWindowTitle("QTableWidget?&?Item");??
  14. ????tableWidget->resize(350,?200);??//设置表格??
  15. ????QStringList?header;??
  16. ????header<<"Month"<<"Description";??
  17. ????tableWidget->setHorizontalHeaderLabels(header);??
  18. ????tableWidget->setItem(0,0,new?QTableWidgetItem("Jan"));??
  19. ????tableWidget->setItem(1,0,new?QTableWidgetItem("Feb"));??
  20. ????tableWidget->setItem(2,0,new?QTableWidgetItem("Mar"));??
  21. ??
  22. ????tableWidget->setItem(0,1,new?QTableWidgetItem(QIcon("images/IED.png"),?"Jan's?month"));??
  23. ????tableWidget->setItem(1,1,new?QTableWidgetItem(QIcon("images/IED.png"),?"Feb's?month"));??
  24. ????tableWidget->setItem(2,1,new?QTableWidgetItem(QIcon("images/IED.png"),?"Mar's?month"));??
  25. ????tableWidget->show();??
  26. ??
  27. ????return?a.exec();??
  28. }??


(转)QTableWidget 用法小结

?

一. 对QTableWidget本身的效果实现

1. 将表格变为禁止编辑

在默认情况下,表格里的字符是可以更改的,比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:

?tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

?

QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚举中的一个,都是触发修改单元格内容的条件:

?

0

1

2

4

8

16

31

Constant

Value

Description

0

1

2

view plain
  1. tableWidget->verticalHeader()->setVisible(false);???//隐藏列表头??
  2. tableWidget->horizontalHeader()->setVisible(false);?//隐藏行表头??

注意:需要?#include?<QHeaderView>

?

5. 对表头文字的字体、颜色进行设置

view plain
  1. QTableWidgetItem?*columnHeaderItem0?=?tableWidget->horizontalHeaderItem(0);?//获得水平方向表头的Item对象??
  2. columnHeaderItem0->setFont(QFont("Helvetica"));?//设置字体??
  3. columnHeaderItem0->setBackgroundColor(QColor(0,60,10));?//设置单元格背景颜色??
  4. columnHeaderItem0->setTextColor(QColor(200,111,30));?//设置文字颜色??

注意:需要?#include?<QHeaderView>

?

6. 在单元格里加入控件:

QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。比如,把一个下拉框加入单元格,可以这么做:

view plain
  1. QComboBox?*comBox?=?new?QComboBox();??
  2. comBox->addItem("Y");??
  3. comBox->addItem("N");??
  4. tableWidget->setCellWidget(0,2,comBox);??


二. 对单元格的进行设置

1. 单元格设置字体颜色和背景颜色 及字体字符

view plain
  1. QTableWidgetItem?*item?=?new?QTableWidgetItem("Apple");??
  2. item->setBackgroundColor(QColor(0,60,10));??
  3. item->setTextColor(QColor(200,111,100));??
  4. item->setFont(QFont("Helvetica"));??
  5. tableWidget->setItem(0,3,item);??

另:如果需要对所有的单元格都使用这种字体,则可以使用??tableWidget->setFont(QFont("Helvetica"));

2. 设置单元格内文字的对齐方式

这个比较简单,使用newItem.setTextAlignment()函数即可,该函数的参数为单元格内的对齐方式,和字符输入顺序是自左相右还是自右向左。

水平对齐方式有:

?

ConstantValueDescription0x00010x00020x00040x0008ConstantValueDescription0x00200x00400x0080view plain
  1. tableWidget->setColumnWidth(3,200);??
  2. tableWidget->setRowHeight(3,60);??

还可以将行和列的大小设为与内容相匹配

view plain
  1. tableWidget->resizeColumnsToContents();??
  2. 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和Fixed

7.

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);//去掉自动滚动

热点排行