2013-06-25 125 views
1

我有qtable項目 書面串一個問題,我已經取得了表,並設置它的項目,我想從用戶(通過lineEdit)來獲取字符串,然後將它們在選定的項目寫。這是我的代碼:字符串寫入

QTableWidgetItem *item[10][10]; 
. 
. 
. 

for(int i=0; i<10; i++) 
for(int j=0; j<10; j++){ 
item[i][j] = new QTableWidgetItem; 
item[i][j]->setText(0); 
ui->tableWidget->setItem(i, j, item[i][j]);} 
. 
. 
. 

int j = ui->tableWidget->currentColumn(); 
int i = ui->tableWidget->currentRow(); 
QString str = ui->formulaLineEdit->text(); 
ui->tableWidget->item(i,j)->setText(str); 

,然後它說這個對我說:project.exe退出,代碼爲-1073741819

什麼不對的代碼? (如果我刪除最後一行其他部分的工作,問題就在這裏,但我不知道是什麼)

回答

1

設置的行和列數:

void setRowCount(int rows)
void setColumnCount(int columns)

(編輯:必須設置它setItems之前,否則它會悄悄地什麼都不做)

ui->tableWidget->setRowCount(10); 
ui->tableWidget->setColumnCount(10); 

for(int i=0; i<10; i++) 
{ 
    for(int j=0; j<10; j++) 
    { 
    ui->tableWidget->setItem(i, j, new QTableWidgetItem()); 
    } 
} 

. 
. 

QString str = ui->formulaLineEdit->text(); 
// Get the item this way 
int j = ui->tableWidget->currentColumn(); 
int i = ui->tableWidget->currentRow(); 
QTableWidgetItem *my_item = ui->tableWidget->item(i,j); 
// Or 
QTableWidgetItem *my_item = ui->tableWidget->currentItem(); 
// Check it's not 0!!! 
if (my_item) 
    my_item->setText(str); 

你應該總是檢查是用戶界面 - > tableWidget->項(我,j)正在返回一些東西。

從文檔:

QTableWidgetItem * QTableWidget的::項目(INT行,詮釋列)常量,如果已設置 返回給定的行和列的項目; 否則返回0

和訪問一個空指針崩潰程序..

一些觀察:

  • theres一個QTableWidgetItem * TableWidget::currentItem() const 方法。這可能是有用的,不是讓當前的行和列 更好。但請檢查它返回的結果!

  • 在表中設置的項目給予該項目的所有權表, 這意味着,你沒有保持指針數組,表將 採取刪除項目時沒有需要照顧