QTableWidget::row() 未按预期运行

Posted

技术标签:

【中文标题】QTableWidget::row() 未按预期运行【英文标题】:QTableWidget::row() not behaving as expected 【发布时间】:2013-05-15 22:11:11 【问题描述】:

当使用指向有效垂直标题项的指针调用 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】:

通过查看您的代码,我不确定您尝试做的事情是否有意义。

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

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

【讨论】:

为简洁起见,我省略了一些多余的代码。所以“内容行”不被认为包含标题?在我的表格中,垂直标题显示为行的一部分。这是典型的吗? 垂直标题是每行的,但它们本身不被认为是行,甚至不是它们所附加的行的一部分。如果您需要更精确地控制这些事情的工作方式,您应该研究子类化 QTableView。 我刚刚写了一个循环来遍历每一列,0columnCount 并且确实verticalHeaderItem 不存在于任何行。你是绝对正确的,即使我质疑这个设计决定:-) 谢谢!

以上是关于QTableWidget::row() 未按预期运行的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin - Firestore toObject 方法未按预期工作

Angular ngOnit () 未按预期工作

viewDidLoad 未按预期运行

PostAsJsonAsync 未按预期运行

$() 函数未按预期工作

UIStackView 未按预期显示