Использование GroupBoxes в Qt - PullRequest
2 голосов
/ 09 января 2012

Я студент-программист и использую Qt для создания приложения с графическим интерфейсом.Я пытаюсь убедиться, что некоторые флажки установлены, чтобы продолжить.Эти флажки включают или отключают сам групповой блок и являются частью класса QGroupBox.Допустимые комбинации могут быть как одно, так и оба.Проблема, с которой я сталкиваюсь, заключается в получении логического значения (по крайней мере, так, как я думаю) из функции-члена QGroupBox QGroupBox :: setChecked (bool) и использования его для определения, отображать или нет сообщение об ошибке.Я попробовал несколько методов и справочную документацию Qts, надеясь на хороший пример.Поскольку QGroupBox, который я пытаюсь использовать, является членом моего класса пользовательского интерфейса, я попытался создать новый экземпляр QGroupBox и установить для него значения пользовательского интерфейса.Затем;Используя оператор 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

Это не работает;начиная с того, как я пытаюсь передать свойства пользовательского интерфейса в новый экземпляр QGroupBox.Я знаю, что это вопрос относительно общего вопроса, но я попытался передать флажок пользовательского интерфейса непосредственно, и это вызвало еще больше проблем.Я просмотрел документацию, и это привело меня к тому, как я пытался это сделать;без удачиЯ надеялся получить отзывы о лучшем методе обработки QGroupBox.Будучи студентом, иногда трудно увидеть ответ, особенно когда имеешь дело с такими уникальными членами, как те, что собраны в QT.

До изменений я использовал этот метод для построения этого процесса;и я получил ошибки для пути, если мои параметры были установлены.Ошибка компиляции: не найдена соответствующая функция для вызова '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 ]

3 голосов
/ 09 января 2012

Вы смешиваете несколько вещей:

  • Экземпляры 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 голосов
/ 09 января 2012

Не совсем уверен, что вы пытались сделать в своем коде, но на самом деле это гораздо проще достичь. Также не пытайтесь создавать копии (что вы делаете в своем примере). В этом случае работайте со ссылками или указателями!

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