主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QTableItem类为QTable单元格提供内容。 详见……
#include <qtable.h>
继承了Qt。
被QComboTableItem和QCheckTableItem所继承。
QTableItem类为QTable单元格提供内容。
在很多应用中,QTableItem都适合于显示和编辑QTable单元格。而在需要生成很大的表格的情况下,你可能更喜欢另一种方法,而不是使用QTableItem:参见关于大表格的注意事项。
QTableItem包含着一个单元格的数据,缺省情况下是一个字符串和一个象素映射。表项还包括单元格的显示大小和数据对齐方式,同时指定了单元格的EditType和用于内嵌编辑的编辑器(缺省为QLineEdit)。如果你需要多选框,使用QCheckTableItem;需要组合框则使用QComboTableItem。EditType(在构造器中设置的)决定单元格的内容是否可以被编辑;setReplaceable()设置了单元格是否可以被另外一个单元格的内容所替换。
如果指定了象素映射,总是显示在文本在左边。可以分别用setText()和setPixmap()来改变文本或者象素映射。对于文本可以使用setWordWrap()。表项的对齐方式在构造器中设置。
如果你想用自己的部件而不是QLineEdit来编辑单元格内容,那就重新实现createEditor()和setContentFromEditor()。如果要显示定制的内容,就重写paint()。
对表项排序使用了key()函数;缺省情况下返回表项的文本()。重写key()以定制你的表项排序方式。
使用QTable::setItem()把表项插入到表格中。如果你把表项插入到一个已经有表项的单元格中,原有的表项被删去。
例子:
for ( int row = 0; row < table->numRows(); row++ ) { for ( int col = 0; col < table->numCols(); col++ ) { table->setItem( row, col, new QTableItem( table, WhenCurrent, QString::number( row * col ) ) ); } }
如果要在相同或者不同的表格中把表项从一个单元格移到另一个,可以使用QTable::takeItem()和QTable::setItem(),但是也可以参见QTable::swapCells()。
表项可以以标准删除的方式来删去;表格和单元格将会相应地更新。
也参见QCheckTableItem、QComboTableItem和高级部件。
本枚举用于定义单元格是可编辑还是只读(与其他设置共同作用),和单元格应如何被显示。
使用这个EditType确保了用createEditor()生成的编辑器(缺省为QLineEdit)总是可见。这暗示了内容的对齐方式:缺省编辑器的所有东西(即使数字)都是左对齐,而单元格的数字值缺省为右对齐。
如果编辑类型为Always的单元格对齐不正确,你可以为这些表项重写createEditor()。
当QTableItem对象在使用方便的函数如QTable::setText()和QTable::setPixmap()时生成的时候,其编辑类型缺省为OnTyping。
只有当对于该单元格所在的行QTable::isRowReadOnly()为FALSE,对于该单元格所在的行QTable::isColumnReadOnly()为FALSE,而且QTable::isReadOnly()为FALSE时,单元格才是实际可编辑的。
QComboTableItem有一个isEditable()属性,用于指示用户是可以输入自己的文本还是限制于从已有列表中选择。只有当QComboTableItem依照以上描述的EditType一样是可编辑的时,它才可以交互。
该表项使用QLineEdit作为编辑器,文字不自动回行,占据一个单元格。可使用QTable::setItem()以把该表项插入到表格中。
表格拥有表项的所有权,所以一个表项不应该同时被插入多个表格中。
表项把象素映射显示在文本的左边。表项使用QLineEdit用于文本编辑,文字不自动回行,占据一个单元格。可使用QTable::setItem()以把该表项插入到表格中。
表格拥有表项的所有权,所以一个表项不应该同时被插入多个表格中。
如果该表项在某个表格中(也就是说,被使用setItem()插入到表格中),将被从表格和它所占据的单元格中删去。
如果本函数返回0,则单元格为只读。
返回的部件最好是可见的,理想状态下以QTable::viewport()为父部件。
如果重写本函数,你几乎肯定需要重写setContentFromEditor(),可能需要重写sizeHint()。
QWidget *ComboItem::createEditor() const { // create an editor - a combobox in our case ( (ComboItem*)this )->cb = new QComboBox( table()->viewport() ); QObject::connect( cb, SIGNAL( activated( int ) ), table(), SLOT( doValueChanged() ) ); cb->insertItem( "Yes" ); cb->insertItem( "No" ); // and initialize it cb->setCurrentItem( text() == "No" ? 1 : 0 ); return cb;
也参见QTable::createEditor()、setContentFromEditor()和QTable::viewport()。
例子:table/statistics/statistics.cpp。
这是在表项构造时设置的。
也参见EditType和QTableItem()。
也参见setEnabled()。
(这不同于EditType,因为EditType是关于用户是否能改变单元格的内容。)
也参见setReplaceable()和EditType。
也参见QTable::sorting。
若selected为TRUE,单元格高亮显示。
通常不必使用本函数,但如果要绘制单元格的定制内容,你就需要重写。
注意:为提高效率,该画具缺省并未剪裁。如果需要剪裁,使用
p->setClipRect( table()->cellRect(row, col), QPainter::ClipPainter ); //... your drawing code p->setClipping( FALSE );
例子:table/statistics/statistics.cpp。
尽管经常被主张正统的人(purist)所不取,对于QTable来说,运行时类型判别还是很有用的,原因是它考虑了有效的索引存储机制。
当你基于QTableItem生成子类时,确保每一个子类返回一个唯一的运行时类型判别rtti()值。建议使用大于1000的值,最好是大的随机数,以允许对该类的扩展。
也参见QCheckTableItem::rtti()和QComboTableItem::rtti()。
在QComboTableItem和QCheckTableItem中被重写。
如果单元格跨越多列,本函数设置最左一列,并保持该多单元格表项的宽度。
如果你重写了createEditor(),而且返回的不是QLineEdit,你几乎肯定要重写本函数。
void ComboItem::setContentFromEditor( QWidget *w ) { // the user changed the value of the combobox, so synchronize the // value of the item (its text), with the value of the combobox if ( w->inherits( "QComboBox" ) ) setText( ( (QComboBox*)w )->currentText() ); else QTableItem::setContentFromEditor( w );
也参见QTable::setCellContentFromEditor()。
例子:table/statistics/statistics.cpp。
失效的表项不响应用户交互。
也参见isEnabled()。
注意:setPixmap()并没有更新表项所属的单元格。使用QTable::updateCell()来重绘单元格内容。
对于QComboTableItem和QCheckTableItem,本函数没有可见的影响。
也参见QTable::setPixmap()、pixmap()和setText()。
(这不同于EditType,因为EditType是关于用户是否能改变单元格的内容。)
也参见isReplaceable()。
如果单元格跨越多行,本函数设置最上一行,并保持该多单元格表项的高度。
警告:只有当表项已经使用例如QTable::setItem()等方法插入到表格中时,本函数才起作用。本函数也核对以确保rs行和cs列在表格范围内,如果不是则不改变跨越而直接返回。
注意在;setText()并没有更新表项所属的单元格。使用QTable::updateCell()来重绘单元格内容。
也参见QTable::setText()、text()、setPixmap()和QTable::updateCell()。
例子:table/statistics/statistics.cpp。
也参见wordWrap()、QTable::adjustColumn()和QTable::setColumnStretchable()。
如果写QTableItem的子类,一般要重写本函数。
返回该表项所属的QTable。
也参见QTable::setItem()和QTableItem()。
如果editMode()为Always,之前setContentFromEditor()被调用,以使编辑器的当前值被返回。
如果editMode()是别的,而且单元格的编辑器激活,那么如果编辑器不是QLineEdit,setContentFromEditor()就被调用。这意味着,在这种情况下,如果用户输入文本,那么直到用户认可新数据(比如说按下回车或者Tab键),text()返回的都是表项的原始值。对于其他的编辑器(例如组合框),setContentFromEditor()总是被调用,所以也总是返回编辑器当前显示的值。
也参见setWordWrap()。
Copyright © 2002 Trolltech | Trademarks | 译者:farfareast | Qt 3.0.5版
|