QTableWidget :: row()的行为不符合预期

时间:2013-05-15 22:11:12

标签: c++ qt qt4 qtablewidget qtablewidgetitem

使用指向有效垂直标题项的指针调用QTableWidget::row( const QTableWidgetItem * item )时,函数返回-1。我不希望这样,因为我通过调用QTableWidget::setVerticalHeaderItem ( int row, QTableWidgetItem * item )将表格小部件中的行的垂直标题项显式设置为指针指向的项目。

示例代码:

qint32 newRow = ui->tableWidget->rowCount();
ui->tableWidget->insertRow( newRow );

QTableWidgetItem *vertHeadItem = new QTableWidgetItem( "Row Header" ); 
ui->tableWidget->setVerticalHeaderItem( newRow, vertHeadItem );

     /* these two outputs print the same address, as expected */
// output is 0xb855b90
qDebug() << vertHeadItem;
// output is 0xb855b90
qDebug() << ui->tableWidget->verticalHeaderItem( newRow );

     /* These two outputs are not the same, but I would expect them to be */
// output is "4"
qDebug() << newRow; // this is the row that contains the verticalHeaderItem
// output is "-1"
qDebug() << ui->tableWidget->row( ui->tableWidget->verticalHeaderItem( newRow ) );

为什么使用verticalHeaderItem地址检索行会返回-1的无效行?

1 个答案:

答案 0 :(得分:0)

从查看代码开始,我不确定你要做的事情是否有意义。

在您的示例中,newRow被初始化为表中的行数 - 似乎是4,这是正常答案。

QTableWidget上的row()函数将返回给定项目出现的行号。由于您为它提供了行的垂直标题项,因此返回-1,因为垂直标题不被视为连续 - 它们与表格小部件的“内容行”分开。这是预期的行为。