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 に答える