• 8963阅读
  • 0回复

qt setRangeSelected 与 selectRow 比较 [复制链接]

上一主题 下一主题
离线many_many
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-30
为了做一个多选项的表格,花了好多力气,走了好多弯路。其中的,selectRow(int)把我差点儿害死了。
qt的qtablewidget封装得很好,正因为如此,它非常的消耗时间,也非常消耗资源。尤其以selectRow(int)为代表。
selectRow(int)其实使用很方便,如果需要选择的数据两很小,几十条,一两百条还是不错了。但当数据达到400~500条的时候就感觉到它相当相当的缓慢了。甚至可以导致程序卡在界面上不动。
界面卡住,可用性就不高了。
为了解决这个问题,幸好qt  4.6 版本还做了其他准备来弥补这个不足。setRangeSelected(QTableWidgetSelectionRange   , bool );
这个是区域选择,你可以根据你的需要进行不定的选择。
qt文档上原话是这样的:void QTableWidget::setRangeSelected ( const QTableWidgetSelectionRange & range, bool select )Selects or deselects the range depending on select.
QTableWidgetSelectionRange ( int top, int left, int bottom, int right )Constructs the table selection range from the given top, left, bottom and right table rows and columns.
其实它解释得不怎么恰当。
bottom - top = 选择的行数。
right  - left = 选择的列数。 

就像这样:

 

试试看,好用吧?!


还有,使用selectedRanges(),与使用selectedIndexes ()一样好用,并且selectedRanges()还不是protected的呢。
利用旗下的bottomRow(),columnCount(),leftColumn(), rightColumn(),rowCount(),topRow()完全可以达到你要的效果。
[ 此帖被many_many在2010-05-04 14:29重新编辑 ]
联系方式:
lishenzhi123@163.com
QQ:904421718
快速回复
限100 字节
 
上一个 下一个