0

channel_1 ... channel_8 というタグが付いた 8 つの ComboBox があります。

最初のオプションである「なし」を除いて、ユーザーが2つのオプションで同じオプションを選択したかどうかを確認したい。

このスロットを作成しましたが、作成されたfinal_aおよびfinal_b変数が認識されません。

// Slot to check if there's two channels with the same option choosed
void gui::check_channels_options()
{
    for (int a = 1; a <= 8; a++)
    {
        for (int b = 1; b <= 8; b++)
        {
            if(a != b)
            {
                QString A, B;
                A.setNum(a);
                B.setNum(b);

                QString Na, Nb;
                Na = "channel_";
                Na += A;
                Nb = "channel_";
                Nb += B;

                QByteArray bytes_a = Na.toAscii();
                char* final_a = bytes_a.data();

                QByteArray bytes_b = Nb.toAscii();
                char* final_b = bytes_b.data();

                if((ui->final_a->currentText() == ui->final_b->currentText()) &&
                        (ui->final_a->currentIndex() != 0 && ui->fnal_b->currentIndex() != 0))
                {
                    QMessageBox::warning(this,"Error","Channel " + a + " has the same option as channel " + b,QMessageBox::Ok);
                }

                else
                {

                }
            }     
        }
    }
}

誰でも私を助けることができますか?

4

2 に答える 2

1

スタック上でfinal_aandを宣言していますが、それらをandとして参照しています。それらから「」を削除してみてください。final_bui->final_aui->final_bui->

ただし、一般的に、アプローチは単純化できると思います。たとえば、コンボ ボックスへのポインタが という配列に格納されているとしcomboBoxesます。次に、これを行うことができます:

// create the combo boxes somewhere in your program, perhaps like this:
QComboBox *comboBoxes[8];
for (int i = 0; i < 8; ++i)
{
    comboBoxes[i] = new QComboBox;
}

// Slot to check if there's two channels with the same option choosed
void gui::check_channels_options()
{
    for (int a = 0; a < 8; ++a)
    {
        for (int b = 0; b < 8; ++b)
        {
            if (a == b ||
                comboBoxes[a]->currentText() == "none" ||
                comboBoxes[b]->currentText() == "none")
                continue; // no need to test these for equality
            else if (comboBoxes[a]->currentText() == comboBoxes[b]->currentText)
                // issue warning
            else
                // they are OK
        }
    }
}
于 2013-02-04T16:17:02.133 に答える
0

ui->final_a->currentText()、この方法で UI 要素にアクセスできるとは思いません。UIには *final_a* 要素はありませんが、私が理解しているように、channel_1、channel2、要素がいくつかあります。

ps: 変数に意味のある名前を付けてください。

于 2013-02-04T16:18:34.730 に答える