在Qt中使用GroupBoxes

时间:2012-01-09 18:18:13

标签: c++ qt input qcheckbox qgroupbox

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

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中组合的独特成员时。

在更改之前,我使用此方法来构建此过程;我收到了if参数设置方式的错误。编译错误是:没有匹配函数来调用'QGroupBox :: isChecked(bool)'

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 QCheckBox

2 个答案:

答案 0 :(得分:3)

你混合了几件事:

  • ui中的QGroupBox实例是指针,因此必须将它们分配给QGroupBox *(指针),而不是QGroupBox(堆栈中的对象)。
  • 只有当你调用的方法是静态的(类方法)时,
  • ::才与方法一起使用,这不是这里的情况。
  • setChecked()是设置组框选中状态的setter。它不返回任何内容(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();
}

答案 1 :(得分:0)

不确定您在代码中尝试做了什么,但这实际上更容易实现。也不要尝试创建副本(在您的示例中执行)。在这种情况下使用引用或指针!

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())