2

我是一名学生程序员,我正在使用 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();

编译和编码

这不起作用;从我尝试将 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

4

2 回答 2

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();
}
于 2012-01-09T18:48:08.470 回答
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())
于 2012-01-09T18:28:25.457 回答