При звонке 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
?
Глядя на ваш код, я не уверен, имеет ли смысл то, что вы пытаетесь сделать.
В вашем примере, newRow инициализируется числом строк в вашей таблице, которое, по-видимому, равно 4, что является нормальным ответом.
Функция row () в QTableWidget вернет номер строки, в которой указан данный элемент. Так как вы даете ему элемент вертикального заголовка для своей строки, он возвращает -1, потому что вертикальные заголовки НЕ считаются в строке — они отделены от «строк содержимого» виджета таблицы. Это ожидаемое поведение.
Других решений пока нет …