2012-01-09 90 views
2

我是一名学生程序员,我正在使用Qt构建GUI应用程序。我试图确保一些复选框被选中以便继续。这些复选框启用或禁用组合框本身,并且是QGroupBox类的一部分。接受的组合可以是两种或两种。我遇到的问题是从QGroupBox成员函数QGroupBox :: setChecked(bool)中获取布尔值(至少这就是我认为的那样),并使用它来确定是否显示错误消息。我已经尝试了几种方法,并参考希望为好例子的Qts文档。因为我试图使用的QGroupBox是我的UI类的成员,我尝试创建一个QGroupBox的新实例并将其设置为UI的值。然后;使用if语句,找出这些框是否被检查。这里是我此代码:在Qt中使用组框使用Qt

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的新实例的方式开始。我知道这是问题是相对普遍的问题,但我试图直接传递用户界面复选框,并导致更多的问题。我浏览了文档,这导致我尝试去了解它的方式;没有运气。我希望得到一些关于处理QGroupBox更好方法的反馈。作为一名学生,有时很难看到答案,特别是在处理QT中的独特成员时。

在更改之前,我正在使用此方法来构建此过程;并且我收到了我设置参数的错误。编译错误是: QGroupBox QCheckBox

回答

3

你混几件事情:

  • 在UI中的QGroupBox实例是指针,所以你必须将它们分配给QGroupBox *(指针),而不是QGroupBox(堆栈中的对象)。
  • ::仅当您调用的方法是静态(类方法)时才与方法一起使用,在此情况并非如此。
  • setChecked()是一个设置器,用于设置组框的选中状态。它不返回任何东西(void),所以你不能使用它们作为条件。你想要的是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启发的方式;我不知道你可以这样使用它。它确实需要更少的空间。谢谢您的帮助;你真的帮助我学习和理解这一点。 – 2012-01-09 19:02:27

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

对不起任何误解,我想是因为我可以,我认为你有正确的想法一样清晰。我试着做你在这里的东西,实际上它看起来像这样,我更新了我的帖子来详细说明。 – 2012-01-09 18:51:11