0

qtの使用を開始したばかりで、ドキュメント、グーグル、例などを調べました。単純なことを自分で行う方法を示す簡単な例(気をつけてください)を見つけようとしています。コードがより複雑になるにつれて、このアプローチが後で問題を引き起こすかどうか疑問に思っていました。この例には必要以上のインクルードがありますが、これは実際のコードから直接得たものです。mainwindow.h: 追加しました

private slots:
    void vpkButton_clicked();

Ui::MainWindow *ui; の後 QLineEdit *vpkPathTxt; を追加しました。mainwindow.cpp: 後

    ui->setupUi(this);

追加した

    connect( this->ui->vpkButton, SIGNAL( clicked() ), this, SLOT(vpkButton_clicked()) );

私のUIボタンを適切なスロットに接続するために、問題は vpkButton_clicked() から文字列を取得して、デザイナーで行った行編集に表示することでした.

    vpkPathTxt = this->ui->vpkPathTxt;

私のmain.cppの関数は非常に簡単になりました:(ボイドの外側の上部にあるQString宣言)

void MainWindow::vpkButton_clicked()
{
    vpkName = QFileDialog::getOpenFileName(this,
        tr("Open VPK File"), "~/", tr("VPK Files (*_dir.vpk)"));
    vpkPathTxt->setText(vpkName);
    qDebug() << vpkName;
}

私が尋ねている理由は、信頼できるようにするのは少し簡単すぎるように思われるからです.このように行われたのを見たことがありません.

4

1 に答える 1

0

スロットの問題の 1 つは、ユーザーが「ファイルを開く」ダイアログを破棄するケースを考慮していないことです。この場合、関数は null QString を返すため、戻り値がnull 文字列でないQFileDialog::getOpenFileName場合にのみロジックを続行する必要があります。

if (!vpkName.isNull()) {
    ...
}

2番目の問題は次のとおりです。完全なコードが表示されないため、いくつかの仮定を立てました。

ユーザーがダイアログで選択したファイル名を使用してファイルをロードしたいと思います。ただし、ユーザーが手動で編集できる行編集でもファイル名を設定します。また、実際のファイルの読み込みは別のステップ (つまり、別のボタンをクリックした後) で行われると思います。そのため、ユーザーが行編集で手動でファイル名を編集した後は、ローカル変数と同じにはなりませんvpkName

ファイルをロードするときに、変数の代わりに行編集の内容を読み取るvpkNameので、手動で行った編集が尊重されます。

別の方法は、行編集の編集も監視し、変数にも変更を反映することです。後でファイルをロードするときに、行編集の代わりに変数を読み取っても問題ありません。

于 2013-12-11T20:15:49.343 に答える