2015-05-02 11 views
0

所以在我的程序中,我動態生成一些QCheckBox,數量取決於查詢的結果和每個QCheckBox旁邊我想有一個QLineEdit這將只有當QCheckBox被選中時纔會顯示 ,那麼我怎樣才能連接它。qt創建動態對象和分配不同的功能,以相同的信號

到目前爲止, 我只有類似的東西,我不如何做到這一點,而不必動態創建的一切的指針的矢量(像vector<vector<QObject*> > objets;):

sondage_page2::sondage_page2(QWidget *parent) : 
QWidget(parent), 
ui(new Ui::sondage_page2) 
{ 
    // ... 
    if(query.exec()) 
    { 
     if(query.size()>0) 
     { 
      while(query.next()) 
      { 
       QCheckBox* check=new QCheckBox(query.value("Marque").toString()); 
       ui->gridLayout->addWidget(check,row,0,Qt::AlignHCenter); 

       vector<QObject*> temp; 
       temp.push_back(check); 
       objets.push_back(temp); 

       QObject::connect(check,SIGNAL(stateChanged(int)),this,SLOT(checked(int))); 
      } 
      // ... 
     } 
    } 
} 

void sondage_page2::checked(int state) 
{ 
    // très broken 
    if(state==2) // checked 
    { 
     QLineEdit* edit=new QLineEdit(); 
     objets.at(objets.size()-1).push_back(edit); 
     ui->gridLayout->addWidget(edit,row-1,1,Qt::AlignHCenter); 
    } 
    else 
    { 
     delete objets.at(row-1).at(1); 
     objets.at(row-1).pop_back(); 
    } 
} 

編輯:基本上,當QCheckBox被創建時,我想要在與QCheckBox相同的行上顯示(或創建)QLineEdit,並且使用QObject :: connect函數,我只能將objets鏈接到相同的函數,我怎麼能這工作?

+0

謝謝你告訴我們。呃......這個問題是什麼? – Greenflow

+0

對不起,如果它不是很清晰,我想在創建QCheckBox的時候在'QCheckBox'的同一行顯示(或創建)'QLineEdit', 'QObject :: connect'函數我只能將objets鏈接到同一個函數,我怎麼能這樣工作? –

+0

Btw ..你應該改變你的標題...不同的功能,以同一事件。信號,而不是事件。事件在Qt中有一個明確的完全不同的含義。 – Greenflow

回答

1

以下是沒有交鑰匙解決方案。它只是說明你如何做到這一點的可能方式。最有可能不是最好的解決方案。

你可以使用一個

QMAP < QCheckBox *,* QLineEdit的>

關聯的QCheckBox與QLineEdit的。

在sondage_page2 :: sondage_page2:

QCheckBox* check=new QCheckBox(query.value("Marque").toString()); 
...add to grid... 
map[check] = nullptr; 
connect(.....) 

在sondage_page2 ::檢查:

QCheckBox *check = qobject_cast<QCheckBox *>(sender()); 
if(check){ 
    if(state == 2){ 
    QLineEdit* edit=new QLineEdit(); 
    map[check] = edit; 
    ...enter edit in gridlayout... 
    }else{ 
    ...remove from layout.... 
    map[check].take()->deleteLater() // delete the QLineEdit; 
    edit->deleteLater(); 
    } 
}else{ 
    // should not be possible... I think 
} 

這些片段究竟應該做你上面列出的代碼做打算......至於我明白了。並非所有必要的理智檢查都已到位,例如是真的在地圖上檢查?

+0

所以,你的代碼工作和QMap是真正有用的,但我想要的是,如果2 QCheckBox被選中,然後2 QLineEdit將顯示 但我不知道如何獲得當前QCheckBox點擊我的選中函數顯示QLineEdit關聯 –

+1

Erm ...您看到我在checked槽中使用了sender()函數嗎? – Greenflow

+0

是的,對不起,它可以工作 –

相關問題