2012-01-09 8 views
2

저는 학생 프로그래머이고 Qt를 사용하여 GUI 응용 프로그램을 작성하고 있습니다. 계속 진행하기 위해 일부 확인란을 선택했는지 확인하려고합니다. 이 확인란은 그룹 상자 자체를 활성화 또는 비활성화하며 QGroupBox 클래스의 일부입니다. 허용되는 조합은 둘 중 하나 또는 둘 모두가 될 수 있습니다. 내가 실행중인 문제는 적어도 QoolBox 멤버 함수 QGroupBox :: setChecked (부울)에서 부울 값을 얻는 것입니다 (오류 메시지를 표시할지 여부를 결정하는 데 사용합니다). 나는 여러 가지 방법을 시도해 보았고 좋은 예를 기대하면서 Qts 문서를 참조했다. 왜냐하면 내가 사용하려고하는 QGroupBox는 ui 클래스의 멤버입니다. QGroupBox의 새 인스턴스를 만들고 Ui의 값으로 설정하려고했습니다. 그때; if 문을 사용하여 체크 박스의 체크 여부를 알아 낸다. 다음은이에 대한 내 코드입니다 :Qt에서 GroupBox 사용하기

QGroupBox activeParticleInjection = ui->groupBoxParticleInjection; 
    QGroupBox activeFluidInjection = ui->groupBoxFluidInjection; 
    if (activeParticleInjection::setChecked(false) && activeFluidInjection(false)); 
    { 
     QMessageBox noInjectionSelectedError; 
     noInjectionSelectedError.setText("Error: No injection type selected"); 
     noInjectionSelectedError.exec(); 
    } 
    else 
    { 
     transData.particleInjectionActive = activeParticleInjection::setChecked(); 
     transData.fluidInjectionActive = activeFluidInjection::setChecked(); 

Compile and code

이 작동하지 않습니다는; UI 속성을 QGroupBox의 새 인스턴스에 전달하려고하는 방식부터 시작합니다. 질문은 비교적 일반적인 질문이지만 UI 체크 박스를 직접 전달하려고 시도했는데 그로 인해 더 많은 문제가 발생했습니다. 나는 문서를 훑어 보았고 그것이 나를 알기 위해 노력하는 방법으로 인도했다. 운이 없다. 나는 QGroupBox를 다루는 더 나은 방법에 대한 약간의 피드백을 기대했다. 학생이되어 가끔 QT에 모인 것과 같은 독특한 회원들을 다룰 때 대답을보기가 힘들 때가 있습니다.

변경하기 전에이 방법을 사용하여이 프로세스를 작성했습니다. 매개 변수가 설정된 경우 오류가 발생했습니다. 컴파일 오류가 없었다 : 당신이 시도 정말로 확실하지 QGroupBox QCheckBox

답변

3

를 당신은 몇 가지 혼합하고 : 있습니다 UI에서

  • QGroupBox 인스턴스를 포인터이므로 QGroupBox (스택의 객체)가 아닌 QGroupBox * (포인터)에 할당해야합니다.
  • :: 호출하는 메서드가 정적 (클래스 메서드) 인 경우에만 메서드와 함께 사용됩니다. 여기서는 해당되지 않습니다.
  • setChecked()는 그룹 상자의 선택 상태를 설정하는 설정자입니다. 아무것도 반환하지 않으므로 조건으로 사용할 수 없습니다. 당신이 원하는 것은 getter bool QGroupBox :: isChecked()입니다. 정화

귀하의 코드는 : 어떤 오해

QGroupBox* activeParticleInjection = ui->groupBoxParticleInjection; 
QGroupBox* activeFluidInjection = ui->groupBoxFluidInjection; 
if (!activeParticleInjection->isChecked() && !activeFluidInjection->isChecked()) 
{ 
    QMessageBox::critical(this, tr("Error"), tr("No injection type selected")); 
} 
else 
{ 
    transData.particleInjectionActive = activeParticleInjection->isChecked(); 
    transData.fluidInjectionActive = activeFluidInjection->isChecked(); 
} 
+0

나는 본다! 완벽하게 작동합니다. QMessageBox를 사용하는 방법도 알게되었습니다. 네가 그런 식으로 사용할 수 있는지 몰랐다.실제로는 훨씬 적은 공간이 필요합니다. 도와 주셔서 감사합니다; 너는 내가 이걸 배우고 이해하도록 정말로 도왔다. –

0

님의 전화 'QGroupBox ::의 IsChecked (부울)'

if (ui->groupBoxFluidInjection->isChecked(false) && ui->groupBoxParticleInjection->isChecked(false)); 
    { 
     QMessageBox noInjectionSelectedError; 
     noInjectionSelectedError.setText("Error: No injection type selected"); 
     noInjectionSelectedError.exec(); 
    } 
    else 
    { 
     transData.particleInjectionActive = ui->groupBoxParticleInjection->isChecked(); 
     transData.fluidInjectionActive = ui->groupBoxFluidInjection->isChecked(); 
    } 

내가 가장 도움이 사이트를 사용하고 있습니다에 대한 일치하는 기능 코드에서 수행 할 수 있지만 실제로는 훨씬 쉽습니다. 또한 예제를 사용하여 복사본을 만들지 마십시오. 이 경우 참조 또는 포인터로 작업하십시오!

QGroupBox group("my group box"); // of course this might be a class member, too 
group.setCheckable(true); 

// do other things... 

if(group.isChecked()) 
{ 
    // do whatever if it's checked 
} 
else 
{ 
    // do stuff if it isn't checked 
} 

검사중인 여러 그룹 중 적어도 하나에 대한 확인 (또는 체크 박스)하려면

if(group1.isChecked() || group2.isChecked()) 
+0

미안 해요, 내가 할 수있는 나는 당신이 바로 그 아이디어가 생각만큼 명확하게하려고 노력했다. 나는 당신이 여기있는 것을 실제로 해 보았습니다. 실제로 이렇게 보였습니다. 정교하게 게시물을 업데이트했습니다. –