2013-05-15 32 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,這是一個正常的答案。

QTableWidget上的row()函數將返回給定項目出現的行號。由於您爲您的行提供垂直標題項,因此將返回-1,因爲垂直標題不會被視爲一行 - 它們與表格窗口小部件的「內容行」分開。這是預期的行爲。

+0

爲了簡潔起見,我省去了一些額外的代碼。所以「內容行」不被視爲包含頭部?在我的表格中,垂直標題顯示爲行的一部分。這是典型的嗎? –

+0

垂直標題是按行排列的,但它們本身不被視爲行,甚至不屬於它們所連接的行的一部分。如果您需要更精確地控制這些事情的工作方式,您應該查看子類化QTableView。 – CmdrMoozy

+0

我剛剛寫了一個循環遍歷每一列,通過'columnCount'通過'0',並且足夠true'verticalHeaderItem'不存在用於任何*行。你是對的,即使我質疑設計決定:-)謝謝! –