📄 qtable.html
字号:
<li><div class=fn>virtual void <a href="#setColumnMovingEnabled"><b>setColumnMovingEnabled</b></a> ( bool b )</div></li><li><div class=fn>virtual void <a href="#setRowMovingEnabled"><b>setRowMovingEnabled</b></a> ( bool b )</div></li><li><div class=fn>virtual void <a href="#setReadOnly"><b>setReadOnly</b></a> ( bool b )</div></li><li><div class=fn>virtual void <a href="#setRowReadOnly"><b>setRowReadOnly</b></a> ( int row, bool ro )</div></li><li><div class=fn>virtual void <a href="#setColumnReadOnly"><b>setColumnReadOnly</b></a> ( int col, bool ro )</div></li><li><div class=fn>virtual void <a href="#setDragEnabled"><b>setDragEnabled</b></a> ( bool b )</div></li><li><div class=fn>bool <a href="#dragEnabled"><b>dragEnabled</b></a> () const</div></li><li><div class=fn>virtual void <a href="#insertRows"><b>insertRows</b></a> ( int row, int count = 1 )</div></li><li><div class=fn>virtual void <a href="#insertColumns"><b>insertColumns</b></a> ( int col, int count = 1 )</div></li><li><div class=fn>virtual void <a href="#removeRow"><b>removeRow</b></a> ( int row )</div></li><li><div class=fn>virtual void <a href="#removeRows"><b>removeRows</b></a> ( const QMemArray<int> & rows )</div></li><li><div class=fn>virtual void <a href="#removeColumn"><b>removeColumn</b></a> ( int col )</div></li><li><div class=fn>virtual void <a href="#removeColumns"><b>removeColumns</b></a> ( const QMemArray<int> & cols )</div></li><li><div class=fn>virtual void <a href="#editCell"><b>editCell</b></a> ( int row, int col, bool replace = FALSE )</div></li></ul><h2>信号</h2><ul><li><div class=fn>void <a href="#currentChanged"><b>currentChanged</b></a> ( int row, int col )</div></li><li><div class=fn>void <a href="#clicked"><b>clicked</b></a> ( int row, int col, int button, const QPoint & mousePos )</div></li><li><div class=fn>void <a href="#doubleClicked"><b>doubleClicked</b></a> ( int row, int col, int button, const QPoint & mousePos )</div></li><li><div class=fn>void <a href="#pressed"><b>pressed</b></a> ( int row, int col, int button, const QPoint & mousePos )</div></li><li><div class=fn>void <a href="#selectionChanged"><b>selectionChanged</b></a> ()</div></li><li><div class=fn>void <a href="#valueChanged"><b>valueChanged</b></a> ( int row, int col )</div></li><li><div class=fn>void <a href="#contextMenuRequested"><b>contextMenuRequested</b></a> ( int row, int col, const QPoint & pos )</div></li><li><div class=fn>void <a href="#dropped"><b>dropped</b></a> ( QDropEvent * e )</div></li></ul><h2>属性</h2><ul><li><div class=fn>bool <a href="#columnMovingEnabled-prop"><b>columnMovingEnabled</b></a> - 用户是否可以移动列</div></li><li><div class=fn>FocusStyle <a href="#focusStyle-prop"><b>focusStyle</b></a> - 当前的(焦点所在的)单元格如何绘制</div></li><li><div class=fn>int <a href="#numCols-prop"><b>numCols</b></a> - 表格中的列数</div></li><li><div class=fn>int <a href="#numRows-prop"><b>numRows</b></a> - 表格中的行数</div></li><li><div class=fn>bool <a href="#readOnly-prop"><b>readOnly</b></a> - 表格是否是只读的</div></li><li><div class=fn>bool <a href="#rowMovingEnabled-prop"><b>rowMovingEnabled</b></a> - 用户是否可以移动行</div></li><li><div class=fn>SelectionMode <a href="#selectionMode-prop"><b>selectionMode</b></a> - 当前的选中模式</div></li><li><div class=fn>bool <a href="#showGrid-prop"><b>showGrid</b></a> - 是否显示表格的栅格</div></li><li><div class=fn>bool <a href="#sorting-prop"><b>sorting</b></a> - 点击列标题是否对该列排序</div></li></ul><h2>保护成员</h2><ul><li><div class=fn>enum <a href="#EditMode-enum"><b>EditMode</b></a> { NotEditing, Editing, Replacing }</div></li><li><div class=fn>virtual void <a href="#drawContents"><b>drawContents</b></a> ( QPainter * p, int cx, int cy, int cw, int ch )</div></li><li><div class=fn>void <a href="#setEditMode"><b>setEditMode</b></a> ( EditMode mode, int row, int col )</div></li><li><div class=fn>virtual void <a href="#contentsDragEnterEvent"><b>contentsDragEnterEvent</b></a> ( QDragEnterEvent * e )</div></li><li><div class=fn>virtual void <a href="#contentsDragMoveEvent"><b>contentsDragMoveEvent</b></a> ( QDragMoveEvent * e )</div></li><li><div class=fn>virtual void <a href="#contentsDragLeaveEvent"><b>contentsDragLeaveEvent</b></a> ( QDragLeaveEvent * e )</div></li><li><div class=fn>virtual void <a href="#contentsDropEvent"><b>contentsDropEvent</b></a> ( QDropEvent * e )</div></li><li><div class=fn>virtual QDragObject * <a href="#dragObject"><b>dragObject</b></a> ()</div></li><li><div class=fn>virtual void <a href="#startDrag"><b>startDrag</b></a> ()</div></li><li><div class=fn>virtual void <a href="#paintEmptyArea"><b>paintEmptyArea</b></a> ( QPainter * p, int cx, int cy, int cw, int ch )</div></li><li><div class=fn>virtual void <a href="#activateNextCell"><b>activateNextCell</b></a> ()</div></li><li><div class=fn>virtual QWidget * <a href="#createEditor"><b>createEditor</b></a> ( int row, int col, bool initFromCell ) const</div></li><li><div class=fn>virtual void <a href="#setCellContentFromEditor"><b>setCellContentFromEditor</b></a> ( int row, int col )</div></li><li><div class=fn>virtual QWidget * <a href="#beginEdit"><b>beginEdit</b></a> ( int row, int col, bool replace )</div></li><li><div class=fn>virtual void <a href="#endEdit"><b>endEdit</b></a> ( int row, int col, bool accept, bool replace )</div></li><li><div class=fn>virtual void <a href="#resizeData"><b>resizeData</b></a> ( int len )</div></li><li><div class=fn>virtual void <a href="#insertWidget"><b>insertWidget</b></a> ( int row, int col, QWidget * w )</div></li><li><div class=fn>int <a href="#indexOf"><b>indexOf</b></a> ( int row, int col ) const</div></li><li><div class=fn>bool <a href="#isEditing"><b>isEditing</b></a> () const</div></li><li><div class=fn>EditMode <a href="#editMode"><b>editMode</b></a> () const</div></li><li><div class=fn>int <a href="#currEditRow"><b>currEditRow</b></a> () const</div></li><li><div class=fn>int <a href="#currEditCol"><b>currEditCol</b></a> () const</div></li></ul><h2>保护槽</h2><ul><li><div class=fn>virtual void <a href="#columnWidthChanged"><b>columnWidthChanged</b></a> ( int col )</div></li><li><div class=fn>virtual void <a href="#rowHeightChanged"><b>rowHeightChanged</b></a> ( int row )</div></li><li><div class=fn>virtual void <a href="#columnIndexChanged"><b>columnIndexChanged</b></a> ( int section, int fromIndex, int toIndex )</div></li><li><div class=fn>virtual void <a href="#rowIndexChanged"><b>rowIndexChanged</b></a> ( int section, int fromIndex, int toIndex )</div></li><li><div class=fn>virtual void <a href="#columnClicked"><b>columnClicked</b></a> ( int col )</div></li></ul><hr><a name="details"></a><h2>详细描述</h2> <p>QTable类提供了一个灵活的和可编辑的表格部件。<p>鉴于所提供功能的复杂性,QTable确实包含了许多API,尽管如此,它还是易于使用的。QTable提供的功能可以处理<a href="#headers">标题(headers)</a>、<a href="#columnsrows">行列(rows和columns)</a>、<a href="#cells">单元格(cells)</a>和<a href="#selections">选中区域(selections)</a>。QTable还含有内嵌编辑(in-place editing)和<a href="dnd.html">拖放(drag和drop)</a>,以及一批有用的<a href="#signals">信号</a>。QTable有效率地支持很大的表格,例如有百万行乘百万列单元格的表格也毫无问题。QTable内存使用节约,未用的单元格没有内存开销。<p> <pre> QTable *table = new QTable( 100, 250, this ); table-><a href="#setPixmap">setPixmap</a>( 3, 2, pix ); table-><a href="#setText">setText</a>( 3, 2, "A pixmap" ); </pre> <p>第一行代码构造了一个指定行列数目的表格。然后我们在<em>同一个</em><a href="#cells">单元格</a>插入一个象素映射(pixmap)和一些文本,象素映射在文本的左边。QTable的单元格可以使用<a href="qtableitem.html">QTableItem</a>、<a href="qcombotableitem.html">QComboTableItem</a>或者<a href="qchecktableitem.html">QCheckTableItem</a>来填充。缺省情况下显示行号的垂直标题在表格的左部,而显示列标的水平标题在上部。(显示的数字从1开始,尽管在QTable内部行列都是由零开始计数。)<p>如果你想使用鼠标跟踪(mouse tracking),对<em>视口(viewport)</em>调用<a href="qwidget.html#setMouseTracking">setMouseTracking</a>(TRUE) (参见<a href="qscrollview.html#allviews">QScrollView</a>)。<p> <center><img src="qtableitems.png" alt="Table Items"></center> <p> <a name="headers"></a><h3>标题</h3><a name="1"></a><p>QTable支持一个标题列,用来显示行号;以及一个标题行,用来显示列标。要设置行列标签(label),需要对由<a href="#verticalHeader">verticalHeader</a>()和<a href="#horizontalHeader">horizontalHeader</a>()分别返回的指针使用<a href="qheader.html#setLabel">QHeader::setLabel</a>()。垂直标题显示在表格的左边内,宽度由<a href="#setLeftMargin">setLeftMargin</a>()设置。水平标题显示在表格的上边内,高度由<a href="#setTopMargin">setTopMargin</a>()设置。表格的栅格可以通过<a href="#setShowGrid">setShowGrid</a>()来开关。如果要隐藏水平标题,调用<a href="qwidget.html#hide">hide</a>(),以及setTopMargin( 0 ),以使得标题所在的区域减为零尺寸。<p>标题标签是通过他们的区域编号(section number)来生成索引的。注意,<a href="qheader.html">QHeader</a>关于区域编号的缺省行为为QTable而覆盖(overrided)了。参见下面在“行列”一节讨论行列移动时的相关解释。<p> <a name="columnsrows"></a><h3>行列</h3><a name="1-1"></a><p>行列的尺寸由<a href="#setRowHeight">setRowHeight</a>()和<a href="#setColumnWidth">setColumnWidth</a>()设置。如果要使得某行高到足以全部显示最高的表项(item),可以使用<a href="#adjustRow">adjustRow</a>()。类似地,<a href="#adjustColumn">adjustColumn</a>()使某列宽至全部显示最宽的表项。使用<a href="#setRowStretchable">setRowStretchable</a>()和<a href="#setColumnStretchable">setColumnStretchable</a>(),可以让行高、列宽在表格的高宽变化时自动调整。<p>行列的隐藏显示可以使用<a href="#hideRow">hideRow</a>()、<a href="#hideColumn">hideColumn</a>()、<a href="#showRow">showRow</a>()和<a href="#showColumn">showColumn</a>()。插入新的行列使用<a href="#insertRows">insertRows</a>()和<a href="#insertColumns">insertColumns</a>()。如果你设置<a href="#setNumRows">setNumRows</a>()或者<a href="#setNumCols">setNumCols</a>()为比<a href="#numRows">numRows</a>()或者<a href="#numCols">numCols</a>()还要大,额外的行列会添加在下面(行)或者右边(列)。已有的行列可以使用<a href="#removeRow">removeRow</a>()和<a href="#removeColumn">removeColumn</a>()来删除,多个行列则是<a href="#removeRows">removeRows</a>()和<a href="#removeColumns">removeColumns</a>()。<p>使用<a href="#rowMovingEnabled">rowMovingEnabled</a>()和<a href="#columnMovingEnabled">columnMovingEnabled</a>(),行列可以设置为可移动的,也就是说,用户能够拖动放置他们。基于性能原因,<a href="qheader.html">QHeader</a>区域编号的缺省行为被QTable重写。现在在QTable中,当一行或者一列被拖放,其区域编号也变为新的位置。这样,QHeader的区域(section)和索引就没有不同了。QTable中的QHeader类没有提供独立于用户界面次序的索引机制。<p>表格可以使用<a href="#sortColumn">sortColumn</a>()来排序。如果<a href="#setSorting">setSorting</a>()设置为TRUE,用户可以点击列标题以对该列排序。行之间可以用<a href="#swapRows">swapRows</a>()来交换;列则是<a href="#swapColumns">swapColumns</a>();而单元格则是<a href="#swapCells">swapCells</a>()。<p>对于可编辑的表格(参见<a href="#setReadOnly">setReadOnly</a>()),可以使用<a href="#setRowReadOnly">setRowReadOnly</a>()和<a href="#setColumnReadOnly">setColumnReadOnly</a>()来设置个别行列的只读属性。(单元格是可编辑还是只读取决于其设置和该单元格的<a href="qtableitem.html#wheneditable">QTableItem::EditType</a>。)<p>焦点所在的行和列分别由<a href="#currentRow">currentRow</a>()和<a href="#currentColumn">currentColumn</a>()返回。<p>尽管许多QTable函数以行列进行操作,<a href="#indexOf">indexOf</a>()函数可以返回一个识别特定单元格的整数。<p> <a name="cells"></a><h3>单元格</h3><a name="1-2"></a><p>表格构造初始,QTable所有的单元格都是空的。<p>有两种方法来填充表格的单元格。首先也是最简单的方法是使用<a href="qtableitem.html">QTableItem</a>或者QTableItem的子类。第二种方法对很大的稀疏表格有用,它不使用QTableItem,而是自己重新实现一些函数。我们下面按顺序看看这两种方法。<p>在单元格内放置一个字符串,使用<a href="#setText">setText</a>()。这个函数将为还不存在的单元格生成一个新的QTableItem,然后显示里面的文本。缺省情况下表项的部件是<a href="qlineedit.html">QLineEdit</a>。使用<a href="#setPixmap">setPixmap</a>(),单元格也可以放置一个象素映射,而且也在必要时生成表项。单元格可以<em>同时</em>包括象素映射和文本,象素映射显示在文本的左边。另一种方法是构造一个QTableItem或者QTableItem的子类,设置其属性,然后使用<a href="#setItem">setItem</a>()以插入到单元格中。<p>如果需要含有组合框的单元格,使用<a href="qcombotableitem.html">QComboTableItem</a>类;类似地,含有多选框的单元格要用<a href="qchecktableitem.html">QCheckTableItem</a>类。这些表项的样子和行为都类似组合框或者多选框,然而极少耗费内存。<p> <pre> for ( int j = 0; j < numRows; ++j ) <a name="x2449"></a> table.<a href="#setItem">setItem</a>( j, 1, new <a href="qchecktableitem.html">QCheckTableItem</a>( &table, "Check me" ) );</pre>上面的例子中,我们生成了一列QCheckTableItem,用setItem()插入到表格中。<p>QTable拥有其QTableItem的所有权,在自己被销毁时也会删除他们。你可以使用<a href="#takeItem">takeItem</a>()来获得一个表项的所有权,用它来在单元格之间移动单元格的内容,不论是不是属于同一个表格。(也参见<a href="#swapCells">swapCells</a>())。<p>QTableItem中的文本,与QComboTableItem和QCheckTableItem中的值一样,其内嵌编辑都是自动进行的。单元格可以是可编辑或者只读的,参见<a href="qtableitem.html#wheneditable">QTableItem::EditType</a>。如果要精细地控制编辑,参见<a href="#beginEdit">beginEdit</a>()和<a href="#endEdit">endEdit</a>()。<p>使用<a href="#item">item</a>(),可以把单元格的内容作为一个<a href="qtableitem.html">QTableItem</a>取得;类似地,使用<a href="#text">text</a>()作为字符串取得,使用<a href="#pixmap">pixmap</a>()作为象素映射取得(如果有的话)。单元格的范围矩形由<a href="#cellGeometry">cellGeometry</a>()来给定。使用<a href="#updateCell">updateCell</a>()来重绘单元格,例如在使用<a href="#clearCell">clearCell</a>()删除单元格之后,清除其显示。可以使用<a href="#ensureCellVisible">ensureCellVisible</a>()来迫使表格滚动至显示某个特定单元格的位置。<a href="#isSelected">isSelected</a>()函数表明一个单元格是否被选中。<p>可以使用<a href="#setCellWidget">setCellWidget</a>()来使你自己的部件代替单元格的部件,但是写QTableItem的子类可能更为简便。单元格的部件(如果有的话)可以使用<a href="#clearCellWidget">clearCellWidget</a>()来删去。<p> <!-- index notes on large tables --><a name="notes-on-large-tables"></a><a name="bigtables"></a><h4>大表格</h4><a name="1-2-1"></a><p>对于大稀疏表格,使用QTableItem或者其他部件的效率不高。解决的办法是:如应该表现的那样<em>绘制</em>单元格,在需求时生成和销毁单元格编辑器。<p>这种方法需要你重新实现几个函数。重写<a href="#paintCell">paintCell</a>()以显示你的数据,<a href="#createEditor">createEditor</a>()和<a href="#setCellContentFromEditor">setCellContentFromEditor</a>()以方便内嵌编辑。重要的是,重写<a href="#resizeData">resizeData</a>()为空,以防止QTable试图生成一个大数组。还需要重写<a href="#item">item</a>()、<a href="#setItem">setItem</a>()、<a href="#clearCell">clearCell</a>(),和<a href="#insertWidget">insertWidget</a>()、<a href="#cellWidget">cellWidget</a>()和<a href="#clearCellWidget">clearCellWidget</a>()。几乎所有情况下(像排序、删除和插入行列等)你必须重写<a href="#swapRows">swapRows</a>()、<a href="#swapCells">swapCells</a>()和<a href="#swapColumns">swapColumns</a>(),包括标题操作。<p>如果你用一个QTableItem和QWidget的字典来表述活动的单元格,也就是说,只保存了对实际使用的单元格的引用,大部分函数可以用一行代码来实现。(参见<a href="table-bigtable-main-cpp.html">table/bigtable/main.cpp</a>的例子。)<p>更多单元格的信息参见<a href="qtableitem.html">QTableItem</a>文档。<p> <a name="selections"></a><h3>选中区域</h3><a name="1-3"></a><p>QTable支持单一选中区域、多重选中区域(多个单元格)和无选中区域。选中模式由<a href="#setSelectionMode">setSelectionMode</a>()设置。使用<a href="#isSelected">isSelected</a>()来判断一个特定的单元格是否被选中,而<a href="#isRowSelected">isRowSelected</a>()和<a href="#isColumnSelected">isColumnSelected</a>()则是判断行、列。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -