2015-10-07 52 views
1

我有Qt Creator中爲QTableView中QT setItem導致「程序沒有響應」

添加值到表在下面我的代碼中的問題,我已經從數據庫中插入數據的表的功能。

QSqlQuery q; 
//counts the number of rows that contain the value acicn 
q.prepare("select count(*) from checkdata where acic_num=:acicn"); 
q.bindValue(":acicn", acicn); 
q.exec(); 

int rowtablecount = 0; 
if(q.next()){ 
    rowtablecount = q.value(0).toInt(); 
    //using value acicn, inserts into the table the number of rows found in database 
    QAbstractItemModel *mdl; 
    mdl = ui->editEntry_tbl->model(); 
     mdl->insertRows(0,rowtablecount); 
}else{ 
    qDebug() << "table error in edit entry"; 
} 
q.finish(); 

QSqlQuery q2; 
q2.prepare("select *from acic where acic_num=:acicnum"); 
q2.bindValue(":acicnum", acicn); 
q2.exec(); 
//above extracts data from database table acic, below from table checkdata 

q.prepare("select * from checkdata where acic_num=:acicnum"); 
q.bindValue(":acicnum", acicn); 
q.exec(); 

QStandardItemModel *model; 
QString temp; 
while(q.next()){ 
    for(int r=0; r<rowtablecount-1; r++){ 
     temp =q.value(6).toString(); //date paid 
     QStandardItem *cellFiller8 = new QStandardItem(temp); 
     model->setItem(r,10,cellFiller8); //<<--- PART WHERE PROGRAM FAILS AND HANGS, SHOWING PROGRAM NOT RESPONDING 

     temp =q.value(5).toString(); //amount of check 
     QStandardItem *cellFiller6 = new QStandardItem(temp); 
     model->setItem(r,7,cellFiller6); 

     temp =q.value(4).toString(); //account code 
     QStandardItem *cellFiller5 = new QStandardItem(temp); 
     model->setItem(r,6,cellFiller5); 

     temp =q.value(3).toString(); //particulars 
     QStandardItem *cellFiller4 = new QStandardItem(temp); 
     model->setItem(r,5,cellFiller4); 

     temp =q.value(2).toString(); //payee name 
     QStandardItem *cellFiller3 = new QStandardItem(temp); 
     model->setItem(r,4,cellFiller3); 

     temp =q.value(1).toString(); //alobs 
     QStandardItem *cellFiller2 = new QStandardItem(temp); 
     qDebug() << temp; 
     model->setItem(r,3,cellFiller2); 

     temp =q.value(0).toString(); //check number 
     QStandardItem *cellFiller1 = new QStandardItem(temp); 
     qDebug() << temp; 
     model->setItem(r,2,cellFiller1); 
    } 
} 
while(q2.next()){ 
    for(int r=0; r<rowtablecount-1; r++){ 
     temp =q2.value(3).toString(); //amount of acic 
     QStandardItem *cellFiller7 = new QStandardItem(temp); 
     model->setItem(r,8,cellFiller7); 

     temp =q2.value(0).toString(); //check date 
     QStandardItem *cellFiller = new QStandardItem(temp); 
     qDebug() << "before setitem" << temp; 
     model->setItem(r,1,cellFiller); 
     qDebug() << "after setItem"; 

    } 
} 

基本上,使用model->setItem(r,1,cellFiller)會導致程序掛起。我發現這非常令人困惑,因爲我在多次偶爾填寫QTableView時使用了同樣的方法,但這是第一次發生這種情況。

任何想法爲什麼發生這種情況?

回答

2

您忘記初始化您的QStandardItemModel *model變量。

+0

我現在看到問題了。我對'QStandardItemModel * model'的初始化位於代碼的不同部分,與上面的函數分開。我應該看到初始化錯誤,它取消了那個。它已被修復。謝謝 – excogitare

+0

@excogitare有一個很好的規則 - 總是初始化所有變量/成員。並使用智能指針。空指針異常的檢測速度比未初始化的變量快得多。 –