2013-08-02 4 views
0

У меня странное поведение с QComboBox, в основном я слушаю сигнал currentIndexChanged, а затем на основе этого индекса второй QComboBox заполняется с QStrList. Моя проблема в том, что второй QComboBox заполняется нормально, но не показывает текст правильно, пока я не нажму на элемент, а затем он появится, я использую слот для заполнения QComboBox.QComboBox не оказывает правильное добавление элементов

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! Вставьте более 10 предметов на QComboBox, чтобы они не отображали элементы правильно, если я вставляю меньше или десять предметов, все предметы отображаются правильно. Мои версии Qt 5.0.2 с MinGW 4.7, пожалуйста, проверьте и подтвердите это.

+0

user2644295, я не вижу проблем в вашем коде. Пожалуйста, не могли бы вы еще раз объяснить свою проблему? Если вы имеете в виду: «... не отображая текст правильно, пока я не нажму на элемент, тогда он появится ...» _ заключается в том, что при запуске ваш второй «QComboBox» не содержит никакого значения, это потому, что вы 'не инициализировать его. Он заполняется в первый раз, только в первый раз выдается сигнал 'currentIndexChanged (int)' ui-> gradeCombo'. – mhcuervo

+0

@mhcuervo Когда мое приложение запускается, я выбрал значение от gradeCombo witch - это первый 'QComboBox', основанный на этом значении, я заполняю второй' QComboBox' (levelCombo). Моя проблема заключается в том, что текст не отображается до тех пор, пока я не нажму на элемент, если я сниму второй «QComboBox», я все еще вижу его заполненным, но текст не отображается. Надеюсь, теперь ты меня понимаешь. – user2644295

+0

Теперь я понимаю. Я подготовил тестовый проект, и все работает так, как должно. Я вызываю 'ui-> gradeCombo-> setCurrentIndex();' для установки начального значения в 'gradeCombo', и значения' levelCombo' отображаются правильно. Вы вызываете 'setCurrentIndex()' после подключения сигнала 'connect (ui-> gradeCombo, SIGNAL (currentIndexChanged (int)), это SLOT (getGradeLevels (int));'? – 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 есть ошибка, я до уровня Qt 4.8.3, и проблема ушла. – user2644295

0

Похоже, моя Qt есть ошибка, я вниз класс в Qt 4.8.3 и проблема исчезла.

Смежные вопросы