2013-05-26 51 views
1

我有很奇怪的問題。將對象的矢量傳遞給新的對話窗口(Qt C++)

我已經創建類,它包含幾個字符串和整數:

class muzyka 
{ 
    string artist; 
    string album; 
    string genre; 
    string type; 
    string label; 
    string cat_nr; 
    int songs; 
    int year; 

public: 

    muzyka(); 
    muzyka(string ar, string al, string g, string t, string l, string c, int s, int y); 
    ~muzyka(); 

    void setartist(string ar); 
    void setalbum(string al); 
    void setgenre(string g); 
    void settype(string t); 
    void setlabel(string l); 
    void setcat_nr(string c); 
    void setsongs(int s); 
    void setyear(int y); 

    void setall(string ar, string al, string g, string t, string l, string c, int s, int y); 

    string getartist(); 
    string getalbum(); 
    string getgenre(); 
    string gettype(); 
    string getlabel(); 
    string getcat_nr(); 
    int getsongs(); 
    int getyear(); 

}; 

我創建了一個矢量,用於存儲該對象。我的問題是我有2個類(MainWindow和Dialog)。在MainWindow中,我有QTableWidget顯示所有記錄。新的記錄添加到包含行編輯框的對話窗口中。

此矢量在mainwindow.cpp中創建爲全局變量(我知道這是一個壞習慣) 我在mainwindow和dialog類中創建了函數作爲公共方法來發送和接收我的矢量。它看起來像這樣:

對話框(臨危舊載體,這是顯示在QTable

void add::recieve(QVector<muzyka> &db) 
{ 
    cont = db; 

} 

主窗口(編輯臨危向量)對話框window.cpp的

void MainWindow::pass(QVector<muzyka> cont) 
{ 
    db = cont; 

} 

部分看起來是這樣的:

cont.push_back(muzyka(ar, al, g, t, l, c, s, y)); 

MainWindow a; 

a.pass(cont); 

並在mainwindow.cpp我刷新按鈕:

void MainWindow::on_pushButton_clicked() 
{ 

    ui->tableWidget->setRowCount(db.size()); 
    ui->tableWidget->setColumnCount(8); 


    QVector<muzyka>::iterator i; 

    for(i = db.begin(); i != db.end(); ++i) 
    { 
    for(int row = 0; row < db.size(); row++) 
    { 
     QString temp_1,temp_2,temp_3,temp_4,temp_5,temp_6; 
     int temp1,temp2; 

     temp_1=(*i).getartist().c_str(); 
     ui->tableWidget->setItem(row,0,new QTableWidgetItem(temp_1)); 

     temp_2=(*i).getalbum().c_str(); 
     ui->tableWidget->setItem(row,1,new QTableWidgetItem(temp_2)); 

     temp1=(*i).getsongs(); 
     ui->tableWidget->setItem(row,2,new QTableWidgetItem(temp1)); 

     temp2=(*i).getyear(); 
     ui->tableWidget->setItem(row,3,new QTableWidgetItem(temp2)); 

     temp_3=(*i).getgenre().c_str(); 
     ui->tableWidget->setItem(row,4,new QTableWidgetItem(temp_3)); 

     temp_4=(*i).getlabel().c_str(); 
     ui->tableWidget->setItem(row,5,new QTableWidgetItem(temp_4)); 

     temp_5=(*i).gettype().c_str(); 
     ui->tableWidget->setItem(row,6,new QTableWidgetItem(temp_5)); 

     temp_6=(*i).getcat_nr().c_str(); 
     ui->tableWidget->setItem(row,7,new QTableWidgetItem(temp_6)); 

    } 

} 

當我添加的第一個記錄,按刷新按鈕QTable我看到我的數據(不exacly相當不錯,但它不是問題現在)。但是,當我嘗試刷新後添加下一個記錄時,我看到第二個對象的兩行。 我真的不知道什麼是錯的。我想這可能是通過向窗口傳遞矢量的東西。

你有什麼解決方案嗎?

我會非常感謝任何幫助。

+0

好的,我發現了這是怎麼回事。我刷新按鈕的循環。 我改變了'for(int row = 0; row user2423265

回答

-1

你只需要刪除你的第一個循環,然後使用db.at(row)來代替(* i)。