主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QTableItem类参考
[表格模块]
QTableItem类为QTable单元格提供内容。 详见……
#include <qtable.h>
继承了Qt。
被QComboTableItem和QCheckTableItem所继承。
公共成员
- enum EditType { Never, OnTyping, WhenCurrent, Always }
- QTableItem ( QTable * table, EditType et, const QString & text )
- QTableItem ( QTable * table, EditType et, const QString & text, const QPixmap & p )
- virtual ~QTableItem ()
- virtual QPixmap pixmap () const
- virtual QString text () const
- virtual void setPixmap ( const QPixmap & p )
- virtual void setText ( const QString & str )
- QTable * table () const
- virtual int alignment () const
- virtual void setWordWrap ( bool b )
- bool wordWrap () const
- EditType editType () const
- virtual QWidget * createEditor () const
- virtual void setContentFromEditor ( QWidget * w )
- virtual void setReplaceable ( bool b )
- bool isReplaceable () const
- virtual QString key () const
- virtual QSize sizeHint () const
- virtual void setSpan ( int rs, int cs )
- int rowSpan () const
- int colSpan () const
- virtual void setRow ( int r )
- virtual void setCol ( int c )
- int row () const
- int col () const
- virtual void paint ( QPainter * p, const QColorGroup & cg, const QRect & cr, bool selected )
- virtual void setEnabled ( bool b )
- bool isEnabled () const
- virtual int rtti () const
详细描述
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和高级部件。
成员类型文档
QTableItem::EditType
本枚举用于定义单元格是可编辑还是只读(与其他设置共同作用),和单元格应如何被显示。
- QTableItem::Always - 单元格总是看起来可编辑。
使用这个EditType确保了用createEditor()生成的编辑器(缺省为QLineEdit)总是可见。这暗示了内容的对齐方式:缺省编辑器的所有东西(即使数字)都是左对齐,而单元格的数字值缺省为右对齐。
如果编辑类型为Always的单元格对齐不正确,你可以为这些表项重写createEditor()。
- QTableItem::WhenCurrent - 只有当单元格有键盘焦点(参见QTable::setCurrentCell())时,该单元格是看起来可编辑的。
- QTableItem::OnTyping - 只有当用户在单元格中打字或者对单元格双击时,该单元格是看起来可编辑的。这类似于WhenCurrent的作用,但是也许更好一点。
当QTableItem对象在使用方便的函数如QTable::setText()和QTable::setPixmap()时生成的时候,其编辑类型缺省为OnTyping。
- QTableItem::Never - 单元格不可编辑。
只有当对于该单元格所在的行QTable::isRowReadOnly()为FALSE,对于该单元格所在的行QTable::isColumnReadOnly()为FALSE,而且QTable::isReadOnly()为FALSE时,单元格才是实际可编辑的。
QComboTableItem有一个isEditable()属性,用于指示用户是可以输入自己的文本还是限制于从已有列表中选择。只有当QComboTableItem依照以上描述的EditType一样是可编辑的时,它才可以交互。
成员函数文档
QTableItem::QTableItem ( QTable * table, EditType et, const QString & text )
使用文本text来生成表格table的一个子项。该表项的EditType为et。该表项使用QLineEdit作为编辑器,文字不自动回行,占据一个单元格。可使用QTable::setItem()以把该表项插入到表格中。
表格拥有表项的所有权,所以一个表项不应该同时被插入多个表格中。
QTableItem::QTableItem ( QTable * table, EditType et, const QString & text, const QPixmap & p )
使用文本text和象素映射p来生成表格table的一个子项。该表项的EditType为et。表项把象素映射显示在文本的左边。表项使用QLineEdit用于文本编辑,文字不自动回行,占据一个单元格。可使用QTable::setItem()以把该表项插入到表格中。
表格拥有表项的所有权,所以一个表项不应该同时被插入多个表格中。
QTableItem::~QTableItem () [virtual]
该解构器删去这个表项,并且释放所有分配的资源。如果该表项在某个表格中(也就是说,被使用setItem()插入到表格中),将被从表格和它所占据的单元格中删去。
int QTableItem::alignment () const [virtual]
本对齐函数返回单元格的文本内容在绘制时如何对齐。缺省的实现是:数字右对齐,其他文本左对齐。
int QTableItem::col () const
返回表项所在列。如果单元格跨越多列,本函数返回最左一列。
int QTableItem::colSpan () const
返回表项跨越的列数,通常是1。
QWidget * QTableItem::createEditor () const [virtual]
本虚拟函数生成一个编辑器,用户用它来编辑单元格的内容。缺省的实现是生成一个QLineEdit。如果本函数返回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::editType () const
返回表项的编辑类型。这是在表项构造时设置的。
也参见EditType和QTableItem()。
bool QTableItem::isEnabled () const
如果表项为激活,返回TRUE;否则返回FALSE。
也参见setEnabled()。
bool QTableItem::isReplaceable () const
本函数返回的是,单元格的内容是否能被另一个表项的内容替换。跨越多个单元格的表项不管这个设置,其内容不能被另一个表项替换。(这不同于EditType,因为EditType是关于用户是否能改变单元格的内容。)
也参见setReplaceable()和EditType。
QString QTableItem::key () const [virtual]
本虚拟函数返回用于排序的关键字。缺省的实现是返回相关表项的text()。
也参见QTable::sorting。
void QTableItem::paint ( QPainter * p, const QColorGroup & cg, const QRect & cr, bool selected ) [virtual]
本虚拟函数用于在矩形区域cr内绘制一个表项的内容,使用的画具为p,颜色组为cg。若selected为TRUE,单元格高亮显示。
通常不必使用本函数,但如果要绘制单元格的定制内容,你就需要重写。
注意:为提高效率,该画具缺省并未剪裁。如果需要剪裁,使用
p->setClipRect( table()->cellRect(row, col), QPainter::ClipPainter ); //... your drawing code p->setClipping( FALSE );
例子:table/statistics/statistics.cpp。
QPixmap QTableItem::pixmap () const [virtual]
返回表项的象素映射,如果没有则是一个空象素映射。
int QTableItem::row () const
返回表项所在行。如果单元格跨越多行,本函数返回最上一行。
int QTableItem::rowSpan () const
返回表项跨越的行数,通常是1。
int QTableItem::rtti () const [virtual]
返回这个表项的运行时类型判别(Returns the Run Time Type Identification)值,对于QTableItem为0。尽管经常被主张正统的人(purist)所不取,对于QTable来说,运行时类型判别还是很有用的,原因是它考虑了有效的索引存储机制。
当你基于QTableItem生成子类时,确保每一个子类返回一个唯一的运行时类型判别rtti()值。建议使用大于1000的值,最好是大的随机数,以允许对该类的扩展。
也参见QCheckTableItem::rtti()和QComboTableItem::rtti()。
在QComboTableItem和QCheckTableItem中被重写。
void QTableItem::setCol ( int c ) [virtual]
设置列c为表项的列。通常不必调用本函数。如果单元格跨越多列,本函数设置最左一列,并保持该多单元格表项的宽度。
void QTableItem::setContentFromEditor ( QWidget * w ) [virtual]
只要单元格的内容被编辑器w编辑过,QTable调用本虚拟函数,把新值拷贝到QTableItem中。如果你重写了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。
void QTableItem::setEnabled ( bool b ) [virtual]
如果b为TRUE,该表项被激活;如果b为FALSE,该表项被设为失效。失效的表项不响应用户交互。
也参见isEnabled()。
void QTableItem::setPixmap ( const QPixmap & p ) [virtual]
设置象素映射p为本表项的象素映射。注意:setPixmap()并没有更新表项所属的单元格。使用QTable::updateCell()来重绘单元格内容。
对于QComboTableItem和QCheckTableItem,本函数没有可见的影响。
也参见QTable::setPixmap()、pixmap()和setText()。
void QTableItem::setReplaceable ( bool b ) [virtual]
如果b为TRUE,可以用一个QTableItem的内容来替换另一个单元格的内容。如果b为FALSE,则不可以。跨越多个单元格的表项,其内容不能被其他表项替换。(这不同于EditType,因为EditType是关于用户是否能改变单元格的内容。)
也参见isReplaceable()。
void QTableItem::setRow ( int r ) [virtual]
设置行r为表项的行。通常不必调用本函数。如果单元格跨越多行,本函数设置最上一行,并保持该多单元格表项的高度。
void QTableItem::setSpan ( int rs, int cs ) [virtual]
改变该QTableItem的范围,使其跨越多个单元格,覆盖rs个行和cs个列。左上的单元格为原始单元格。警告:只有当表项已经使用例如QTable::setItem()等方法插入到表格中时,本函数才起作用。本函数也核对以确保rs行和cs列在表格范围内,如果不是则不改变跨越而直接返回。
void QTableItem::setText ( const QString & str ) [virtual]
把表项的文本改变为str。注意在;setText()并没有更新表项所属的单元格。使用QTable::updateCell()来重绘单元格内容。
也参见QTable::setText()、text()、setPixmap()和QTable::updateCell()。
例子:table/statistics/statistics.cpp。
void QTableItem::setWordWrap ( bool b ) [virtual]
如果b为TRUE,单元格的文本将在必要时多行自动回行,以适应单元格的宽度;否则文本将只在一行内显示。
也参见wordWrap()、QTable::adjustColumn()和QTable::setColumnStretchable()。
QSize QTableItem::sizeHint () const [virtual]
本虚拟函数单元格要显示全部内容所需要的大小。如果写QTableItem的子类,一般要重写本函数。
QTable * QTableItem::table () const
返回该表项所属的QTable。
也参见QTable::setItem()和QTableItem()。
QString QTableItem::text () const [virtual]
提供该表项的文本,如果没有文本则是一个空字符串。如果editMode()为Always,之前setContentFromEditor()被调用,以使编辑器的当前值被返回。
如果editMode()是别的,而且单元格的编辑器激活,那么如果编辑器不是QLineEdit,setContentFromEditor()就被调用。这意味着,在这种情况下,如果用户输入文本,那么直到用户认可新数据(比如说按下回车或者Tab键),text()返回的都是表项的原始值。对于其他的编辑器(例如组合框),setContentFromEditor()总是被调用,所以也总是返回编辑器当前显示的值。
bool QTableItem::wordWrap () const
如果单元格能自动回行,返回TRUE;否则返回FALSE。
也参见setWordWrap()。
Copyright © 2002 Trolltech | Trademarks | 译者:farfareast | Qt 3.0.5版
|