2013-08-02 5 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입니다! QComboBox에 10 개 이상의 항목을 삽입하면 올바르게 표시되지 않습니다. 10 개 미만의 항목을 삽입하면 모든 항목이 올바르게 표시됩니다. 내 Qt 버전이 5.0.2이고 MinGW 4.7 인 경우 테스트하고 확인하십시오.

+0

user2644295, 귀하의 코드에 아무런 문제가 없습니다. 제발, 당신 ​​문제가 무엇인지 다시 설명해 주시겠습니까? 당신이 의미하는 것이 _ "... ... 항목을 클릭 할 때까지 텍스트를 올바르게 보여주지 않으면 나타납니다."_ 두 번째 'QComboBox'가 시작될 때 그 값이 포함되어 있지 않습니다. 그것을 초기화하지 않습니다. 'ui-> gradeCombo'의'currentIndexChanged (int)'시그널이 처음으로 나왔을 때 처음으로 채워집니다. – mhcuervo

+0

@mhcuervo 내 응용 프로그램이 시작되면 gradeCombo의 마녀가 첫 번째 QComboBox이고 두 번째 QComboBox (levelCombo)를 채우는 값을 기준으로 선택했습니다. 내 문제는 내가 항목을 클릭 할 때까지 텍스트가 보이지 않는다는 것입니다. 두 번째 'QComboBox'를 드롭하면 여전히 채워지지만 텍스트는 보이지 않습니다. 네가 나를 이해하기를 바란다. – user2644295

+0

이제 알겠습니다. 테스트 프로젝트를 준비했고 모든 것이 제대로 실행됩니다. 나는'gradeCombo'에 시작 값을 설정하기 위해'ui-> gradeCombo-> setCurrentIndex();'를 호출하고'levelCombo'의 값은 올바르게 표시됩니다. connect (ui-> gradeCombo, SIGNAL (currentIndexChanged (int)), this, SLOT (getGradeLevels (int)))'신호를 연결 한 후에'setCurrentIndex() – mhcuervo

답변

0

당신은 내가 Qt는 4.8.3에, 내 Qt는 버그를 가지고 같은이

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

것 같다 할 성적을 시도 할 수 있습니다 및 문제가 사라 졌어요.

관련 문제