QTableItem类

Qt 3.0.5

主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数

QTableItem类参考
[表格模块]

QTableItem类为QTable单元格提供内容。 详见……

#include <qtable.h>

继承了Qt

QComboTableItemQCheckTableItem所继承。

所有成员函数的列表。

公共成员


详细描述

QTableItem类为QTable单元格提供内容。

在很多应用中,QTableItem都适合于显示和编辑QTable单元格。而在需要生成很大的表格的情况下,你可能更喜欢另一种方法,而不是使用QTableItem:参见关于大表格的注意事项

QTableItem包含着一个单元格的数据,缺省情况下是一个字符串和一个象素映射。表项还包括单元格的显示大小和数据对齐方式,同时指定了单元格的EditType和用于内嵌编辑的编辑器(缺省为QLineEdit)。如果你需要多选框,使用QCheckTableItem;需要组合框则使用QComboTableItemEditType(在构造器中设置的)决定单元格的内容是否可以被编辑;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()。

表项可以以标准删除的方式来删去;表格和单元格将会相应地更新。

Table Items

也参见QCheckTableItemQComboTableItem高级部件


成员类型文档

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的一个子项。该表项的EditTypeet

该表项使用QLineEdit作为编辑器,文字不自动回行,占据一个单元格。可使用QTable::setItem()以把该表项插入到表格中。

表格拥有表项的所有权,所以一个表项不应该同时被插入多个表格中。

QTableItem::QTableItem ( QTable * table, EditType et, const QString & text, const QPixmap & p )

使用文本text和象素映射p来生成表格table的一个子项。该表项的EditTypeet

表项把象素映射显示在文本的左边。表项使用QLineEdit用于文本编辑,文字不自动回行,占据一个单元格。可使用QTable::setItem()以把该表项插入到表格中。

表格拥有表项的所有权,所以一个表项不应该同时被插入多个表格中。

QTableItem::~QTableItem () [virtual]

该解构器删去这个表项,并且释放所有分配的资源。

如果该表项在某个表格中(也就是说,被使用setItem()插入到表格中),将被从表格和它所占据的单元格中删去。

int QTableItem::alignment () const [virtual]

本对齐函数返回单元格的文本内容在绘制时如何对齐。缺省的实现是:数字右对齐,其他文本左对齐。

也参见Qt::AlignmentFlags

int QTableItem::col () const

返回表项所在列。如果单元格跨越多列,本函数返回最左一列。

也参见row()和setCol()。

int QTableItem::colSpan () const

返回表项跨越的列数,通常是1。

也参见setSpan()和rowSpan()。

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

返回表项的编辑类型。

这是在表项构造时设置的。

也参见EditTypeQTableItem()。

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]

返回表项的象素映射,如果没有则是一个空象素映射。

也参见setPixmap()和text()。

int QTableItem::row () const

返回表项所在行。如果单元格跨越多行,本函数返回最上一行。

也参见col()和setRow()。

int QTableItem::rowSpan () const

返回表项跨越的行数,通常是1。

也参见setSpan()和colSpan()。

int QTableItem::rtti () const [virtual]

返回这个表项的运行时类型判别(Returns the Run Time Type Identification)值,对于QTableItem为0。

尽管经常被主张正统的人(purist)所不取,对于QTable来说,运行时类型判别还是很有用的,原因是它考虑了有效的索引存储机制。

当你基于QTableItem生成子类时,确保每一个子类返回一个唯一的运行时类型判别rtti()值。建议使用大于1000的值,最好是大的随机数,以允许对该类的扩展。

也参见QCheckTableItem::rtti()和QComboTableItem::rtti()。

QComboTableItemQCheckTableItem中被重写。

void QTableItem::setCol ( int c ) [virtual]

设置列c为表项的列。通常不必调用本函数。

如果单元格跨越多列,本函数设置最左一列,并保持该多单元格表项的宽度。

也参见col()、setRow()和colSpan()。

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()来重绘单元格内容。

对于QComboTableItemQCheckTableItem,本函数没有可见的影响。

也参见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为表项的行。通常不必调用本函数。

如果单元格跨越多行,本函数设置最上一行,并保持该多单元格表项的高度。

也参见row()、setCol()和rowSpan()。

void QTableItem::setSpan ( int rs, int cs ) [virtual]

改变该QTableItem的范围,使其跨越多个单元格,覆盖rs个行和cs个列。左上的单元格为原始单元格。

警告:只有当表项已经使用例如QTable::setItem()等方法插入到表格中时,本函数才起作用。本函数也核对以确保rs行和cs列在表格范围内,如果不是则不改变跨越而直接返回。

也参见rowSpan()和colSpan()。

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()总是被调用,所以也总是返回编辑器当前显示的值。

也参见setText()和pixmap()。

bool QTableItem::wordWrap () const

如果单元格能自动回行,返回TRUE;否则返回FALSE。

也参见setWordWrap()。


Copyright © 2002 Trolltech Trademarks 译者:farfareast
Qt 3.0.5版