При вызове QTableWidget::row(const QTableWidgetItem * item)
с указателем на действительный элемент вертикального заголовка функция возвращает -1
. Я бы не ожидал этого, потому что я явно установил вертикальный заголовочный элемент строки в виджет таблицы для элемента, на который указывает указатель, вызывая QTableWidget::setVerticalHeaderItem (int row, QTableWidgetItem * item)
.QTableWidget :: row() не ведет себя как ожидалось
Пример кода:
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
?
Я кратко изложил часть избыточного кода для краткости. Таким образом, «строки содержимого» не считаются содержащими заголовок? В моей таблице вертикальный заголовок отображается как часть строки. Это типично? –
Вертикальные заголовки для каждой строки, но они не считаются самими строками или даже частью строки, к которой они прикреплены. Если вам нужен более точный контроль над тем, как эти вещи работают, вы должны изучить подклассы QTableView. – CmdrMoozy
Я просто написал цикл для итерации по каждому столбцу, '0' thru' columnCount' и достаточно правды, что 'verticalHeaderItem' отсутствует для * любых * строк. Вы абсолютно правы, хотя я сомневаюсь в этом дизайнерском решении :-) Спасибо! –