2013-08-02 45 views
0

我有奇怪的行爲與QComboBox,基本上我listenIn currentIndexChanged信號,然後基於該索引第二QComboBox得到從QStrList填充。我的問題是第二個QComboBox正常填寫但沒有正確顯示文本,直到我點擊項目然後顯示,我用一個插槽來填補QComboBoxQComboBox沒有正確渲染添加項目

InfoEmployer::InfoEmployer(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::InfoEmployer) 
{ 
    ui->setupUi(this); 

    ui->gradeCombo->addItem(""); 
    ui->gradeCombo->addItem("200"); 
    ui->gradeCombo->addItem("300"); 
    ui->gradeCombo->addItem("400"); 
    ui->gradeCombo->addItem("500"); 
    ui->gradeCombo->addItem("600"); 
    ui->gradeCombo->addItem("700"); 

    QStringList levels; 
    levels << "10" << "20" << "30" << "40" << "50" << "60" << "70" << "80" << "90" << "100" << "110" << "120"; 
    m_levelsContainer[0] = levels; 
    levels.clear(); 
    levels << "11" << "22" << "33" << "44" << "55" << "66" << "77" << "88" << "99" << "110" << "120" << "131"; 
    m_levelsContainer[1] = levels; 
    levels.clear(); 
    levels << "12" << "24" << "36" << "48" << "60" << "72" << "84" << "96" << "108" << "120" << "132" << "144"; 
    m_levelsContainer[2] = levels; 
    levels.clear(); 
    levels << "13" << "26" << "39" << "53" << "66" << "79" << "92" << "105" << "118" << "132" << "145" << "158"; 
    m_levelsContainer[3] = levels; 
    levels.clear(); 
    levels << "14" << "29" << "43" << "58" << "72" << "86" << "101" << "115" << "130" << "144" << "158" << "173"; 
    m_levelsContainer[4] = levels; 
    levels.clear(); 
    levels << "16" << "32" << "47" << "63" << "79" << "95" << "110" << "126" << "142" << "158" << "173" << "189"; 
    m_levelsContainer[5] = levels; 
    levels.clear(); 

    connect(ui->gradeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(getGradeLevels(int))); 
} 

// The slot 
    void InfoEmployer::getGradeLevels(int indx) 
    { 
     if(indx != 0) 
     { 
      ui->levelCombo->clear(); 
      QStringList levels = m_levelsContainer[indx - 1]; 
      for(int i = 0; i < levels.length(); ++i) 
       ui->levelCombo->addItem(levels[i]); 
     } 
    } 

注意,當我填寫QComboBox編程這個問題只發生在我身上。

UPDATE

我發現,這個問題是不是在我的代碼,但它是QComboBox!在QComboBox上插入多於10個項目,使其不能正確顯示項目,如果插入的項目少於或等於10個,則所有項目都顯示正確。 我的Qt版本是5.0.2與MinGW 4.7,請測試並確認。

+0

user2644295,我看到你的代碼沒有問題。請你再解釋一下你的問題是什麼?如果你的意思是_「...直到我點擊項目才顯示正確的文本,那麼它就會顯示出來......」_就是在啓動第二個'QComboBox'時沒有包含任何值,這是因爲你沒有初始化它。它是第一次填充,這是第一次發射'ui-> gradeCombo'的'currentIndexChanged(int)'信號。 – mhcuervo

+0

@mhcuervo當我的應用程序啓動時,我從gradeCombo中選擇一個值witch是第一個'QComboBox',基於該值填充第二個'QComboBox'(levelCombo)。我的問題是文本不可見,直到我點擊項目,如果我下拉第二個'QComboBox'我仍然可以看到它填滿了但文本不可見。我希望你現在能理解我。 – user2644295

+0

我現在明白了。我準備了一個測試項目,一切都按照它應該運行。我調用'ui-> gradeCombo-> setCurrentIndex();'爲'gradeCombo'設置一個起始值,'levelCombo'的值正確顯示。你是否在連接信號connect(ui-> gradeCombo,SIGNAL(currentIndexChanged(int)),this,SLOT(getGradeLevels(int)));''後調用'setCurrentIndex() – mhcuervo

回答

0

你可以嘗試這樣做

ui->levelCombo->setCurrentIndex(-1); // deselect items, i have some proplems without this line 
ui->levelCombo->setCurrentIndex(0); // select first item in combobox 
+0

看起來我的Qt有一個bug,我下載到Qt 4.8.3並且問題沒有了。 – user2644295

0

好像我的Qt有一個錯誤,我倒年級的Qt 4.8.3,問題就消失了。