0

ユーザーが検索を実行する前に設定するフラグを選択できるテキスト検索を実行できるようにしたいと思います。現在、設定されたフラグに基づいてさまざまな検索を実行するif/elseステートメントがたくさんあります。これを単純化する方法はありますか?

これが私がこれまでに持っているものです:

void FindDialog::on_btn_find_clicked()
{
    const QString find_term = ui->le_find->text();
    bool found;
    getConditions();

    //direction: true -> go backward, false -> go forward
    if(dir)
    {
        //area: true -> description area, false -> example area
        if(area)
            found = te_desc_ptr->find(find_term, QTextDocument::FindBackward);
        else
            found = te_code_ptr->find(find_term, QTextDocument::FindBackward);
    } else {
        if(area)
            found = te_desc_ptr->find(find_term);
        else
            found = te_code_ptr->find(find_term);
    }

    this->close();

}

void FindDialog::getConditions()
{
    //check conditions
    //Area: True = Description, False = Example
    //Direction: True = Up, False = Down
    area = ui->rbtn_desc->isChecked();
    dir = ui->rbtn_up->isChecked();
    case_sen = ui->cbx_case->isChecked();
    whole = ui->cbx_whole->isChecked();
    regx = ui->cbx_reg->isChecked();
}

コードは、ユーザーがチェックボックスを選択し、実行する検索の種類を選択したかどうかを確認します。find()ステートメントが少なくなるように、コードを単純化したいと思います。明らかに、オプションを追加すると、if/elseステートメントが増えます。どうすればこれを変更できますか?

4

1 に答える 1

3

ifツリーを次のように折りたたむことができます。

auto textArea = area ? te_desc_ptr : te_code_ptr;
auto findFlags = dir ? QTextDocument::FindBackward : QTextDocument::FindFlags(0);
textArea->find(find_term, findFlags);

名前だけでは何を意味するのかまったくわからないので、名前areaを変更することも検討します。dir

于 2013-03-09T04:26:20.037 に答える