2013-05-15 5 views
0

При вызове 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?

ответ

0

От взгляда на ваш код, я не уверен, что вы пытаетесь сделать, имеет смысл.

В вашем примере newRow инициализируется количеством строк в вашей таблице, что, кажется, равно 4, что является нормальным ответом.

Функция row() в QTableWidget вернет номер строки, на которой отображается данный элемент. Поскольку вы даете ему вертикальный заголовок для своей строки, он возвращает -1, потому что вертикальные заголовки НЕ считаются находящимися в строке - они отделены от «строк содержимого» виджета таблицы. Это ожидаемое поведение.

+0

Я кратко изложил часть избыточного кода для краткости. Таким образом, «строки содержимого» не считаются содержащими заголовок? В моей таблице вертикальный заголовок отображается как часть строки. Это типично? –

+0

Вертикальные заголовки для каждой строки, но они не считаются самими строками или даже частью строки, к которой они прикреплены. Если вам нужен более точный контроль над тем, как эти вещи работают, вы должны изучить подклассы QTableView. – CmdrMoozy

+0

Я просто написал цикл для итерации по каждому столбцу, '0' thru' columnCount' и достаточно правды, что 'verticalHeaderItem' отсутствует для * любых * строк. Вы абсолютно правы, хотя я сомневаюсь в этом дизайнерском решении :-) Спасибо! –

Смежные вопросы