2013-10-09 4 views
0

내 프로젝트에는 listWidget이 있습니다. 사용자가 목록의 항목을 클릭하면로드됩니다.Qt listWidget 항목을 두 번 클릭하면 오류가 발생합니다.

void BlockSelect::on_blockList_clicked(const QModelIndex &index) 
{ 
    QString blockListName; 
    QString temp_hex; 
    QString temp_hex2; 
    int temp_int; 

    QListWidgetItem *newitem = ui->blockList->currentItem(); 

    blockListName = newitem->text(); 
    temp_hex = blockListName.mid(0, blockListName.indexOf(" ")); 

    if(temp_hex.indexOf(":") == -1) 
    { 
     temp_int = temp_hex.toInt(); 
     ui->blockIdIn->setValue(temp_int); 
     ui->damageIdIn = 0; 
    } 
    else 
    { 
     temp_hex2 = temp_hex.mid(temp_hex.indexOf(":")+1, temp_hex.length()-(temp_hex.indexOf(":")+1)); 
     temp_hex = temp_hex.mid(0, temp_hex.indexOf(":")); 
     temp_int = temp_hex.toInt(); 
     ui->blockIdIn->setValue(temp_int); 
     temp_int = temp_hex2.toInt(); 
     ui->damageIdIn->setValue(temp_int); 
    } 
} 

대부분이 단지 문자열 조작입니다. (이 구문이나 다른 것을 공부할 필요가 없습니다.)

내 문제는 사용자가 다른 목록 항목을 빠르게 클릭하면 (현재 프로세스가 완료되기 전에) 프로그램이 충돌합니다. 빠른 클릭 (한 번에 여러 프로세스) 또는 대체 솔루션을 허용 할 수있는 방법이 있습니까?

감사합니다.

+3

이 질문은 오타에 대한 것입니다. 질문이나 대답은 질문자 이외에는 도움이되지 않습니다. 일부 이론적 근거는 [this meta post] (http://meta.stackexchange.com/questions/167342/close-all-the-typo-questions)를 참조하십시오. –

답변

1

이 코드를 GUI 스레드로 실행하시기 바랍니다. 그렇다면 문제는 없습니다 - 코드가 정확하다면 (그렇지 않습니다). 당신이 당신의 질문에서 언급 한 "과정"과 같은 것은 없습니다. 클릭은 슬롯에 의해 처리되며 목록 내의 이벤트 핸들러에서 호출됩니다. 이것은 이 아니며이 아닌 것으로 간주되며 클릭은 차례대로 처리됩니다.

다음은 버그입니다. 할당 된 UI 포인터 요소의 값을 0으로 재설정하는 이유는 무엇입니까?

ui->damageIdIn = 0; 

이것은 말도 안됩니다. 어쩌면 ui->damageIdIn->setValue(0) 또는 ui->damageIdIn->hide()을 의미 할 수 있습니다.

ui->damageIdIn->setValue(temp_int); 

에서이 0 값을 계속 사용하면 충돌이 발생합니다.

코드의 다른 위치에 버그가있을 수도 있습니다.

+0

고마워요 :) 나는 바보 XD처럼 느낍니다. – mrg95