2014-11-05 61 views
1

所以我已經達到了我對Qt和C++的總體認識上限。我正在基於QComboBox的輸入創建QScrollArea中的複選框。根據QComboBox中選定的值,創建特定數量的複選框。一旦我創建了這些複選框,我在理解如何與他們交互(在我的情況下,只是檢查它們是否被選中)與他們正在創建和調用函數之外有一個問題。我知道如何與他們一起工作,如果按鈕是靜態的,但由於複選框是動態的(這是正確的詞?),可以改變,我不知道該怎麼做。以下是關於如何創建複選框的代碼片段。如果我現在想簡單地檢查是否有任何框被選中,我該怎麼做。能否以某種方式「返回」或「調用」另一個功能中創建的複選框?我知道我只需要遍歷數組並檢查,我只是簡單地不知道如何將複選框數組置入另一個函數或如何在下面的函數中返回它們。Qt 5.3:動態創建的訪問/返回/調用複選框(?)

感謝您的幫助!

void MyProgram::create_checkboxes(QString opnum) 
{ 
QWidget* MDAcheckboxes = new QWidget(ui->MDA); 
QVBoxLayout* MDAlayout = new QVBoxLayout(MDAcheckboxes); 
QCheckBox *MDAmycheckBox[9]; 
QList<QString> boxes; 

if (opnum == "640") 
{ 
    boxes << "16-1" << "16-2"; 

    for (int i = 0; i < 2; i++) 
    { 
    MDAmycheckBox[i] = new QCheckBox(MDAcheckboxes); 
    MDAmycheckBox[i]->setText(boxes[i]); 
    MDAlayout->addWidget(MDAmycheckBox[i]); 
    } 
    ui->MDA->setWidget(MDAcheckboxes); 
} 
else if (opnum == "645") 
{ 
    boxes << "13-01"<<"13-2"<<"13-3"<<"13-4"<<"13-5"; 

    for (int i = 0; i < 5; i++) 
    { 
    MDAmycheckBox[i] = new QCheckBox(MDAcheckboxes); 
    MDAmycheckBox[i]->setText(boxes[i]); 
    MDAlayout->addWidget(MDAmycheckBox[i]); 
    } 
    ui->MDA->setWidget(MDAcheckboxes); 
} 
else if (opnum == "650") 
{ 

    boxes << "13-6"<<"13-7"<<"13-8"<<"13-9"<<"13-10"<<"13-11"<<"13-12"<<"13-13"<<"13-14"; 
    for (int i = 0; i < 9; i++) 
    { 
    MDAmycheckBox[i] = new QCheckBox(MDAcheckboxes); 
    MDAmycheckBox[i]->setText(boxes[i]); 
    MDAlayout->addWidget(MDAmycheckBox[i]); 
    } 
    ui->MDA->setWidget(MDAcheckboxes); 
} 
} 

回答

1

你所有的checkBoxes應該有一個父母。在這種情況下,您將能夠通過findChildren找到它。如果您確定該應用程序沒有任何其他複選框,並且findChildren不會返回您不需要的複選框,則也可以在沒有groupBox的情況下完成。

試試這個:

QList<QCheckBox *> allButtons = ui->groupBox->findChildren<QCheckBox *>(); 
qDebug() <<allButtons.size(); 
for(int i = 0; i < allButtons.size(); ++i) 
{ 
    if(allButtons.at(i)->isChecked()) 
     qDebug() << "Use" << allButtons.at(i)->text()<< i;//or what you need 
} 

在一般情況下:

QList<QCheckBox*> allButtons = parentOfCheckBoxes->findChildren<QCheckBox *>(); 

而且findChildren讓你找到有特殊objectName孩子可以在某些情況下是有用的。請注意,您可以將相同的objectName設置爲不同的對象。

http://qt-project.org/doc/qt-5/qobject.html#findChildren

+0

此代碼不適用於ScrollArea嗎?爲什麼我必須使用groupBox?這絕對有助於我,謝謝。 – Gundown64 2014-11-05 20:35:07

+0

@ Gundown64你不應該像我在我的回答中說的那樣應該有一個父母,父母可以是ScrollArea,groupBox或另一個小工具,爲你的任務選擇最好的。在你的情況下,pareint是:'MDAcheckboxes'和'ui-> MDA'是'MDAcheckboxes'的父項' – Chernobyl 2014-11-05 20:36:57

+0

@ Gundown64我從我的答案中刪除了groupBox,所以現在它不會混淆。 – Chernobyl 2014-11-05 20:39:33