0

私は C++/Qt の初心者で、Web 開発の経験が少ししかありません。

学習目的で Qt でいくつかのことをテストしていますが、惨めなほど失敗しています。スロット/シグナル全体がまだ落ち着いていないためだと確信しているので、誰かが私のためにそれをより明確にしてくれることを望んでいました.

QTextEdit ウィジェットを配置したこのメイン プログラム UI があります。現在、「ドキュメントに変更があります。保存したほうがよいでしょう!」という警告の 1 つを再現しようとしていますが、誰かが新しいドキュメントを作成しようとするたびに表示されます。

「新しいドキュメント」オプションがトリガーされたときに textEdit ウィジェットの変更をテストしようとしています。これらのコンパイル エラーが何度も発生しますが、その意味さえわかりません。正しいテスト条件は何でしょうか? 別の場所で呼び出されているため、textEdit を参照するにはどうすればよいですか?

私はこのようなことを試みています:

void メモ帳::on_actionNew_triggered()
{
    // テスト条件が正しくありません!

    もしも(................................) {

    QMessageBox msgBox;
    msgBox.setText("警告!");
    msgBox.setInformativeText("このドキュメントに変更が適用されました。");
    msgBox.setStandardButtons(QMessageBox::Discard | QMessageBox::Cancel);
    msgBox.setDefaultButton(QMessageBox::Cancel);
    int ret = msgBox.exec();


        スイッチ (戻る) {
            ケース QMessageBox::破棄:
                // [保存しない] がクリックされました
                ui->textEdit->clear();
                壊す;
            ケース QMessageBox::キャンセル:
                msgBox.close();
                壊す;
            デフォルト:
                // 決して到達してはならない
                壊す;
        }
    }else{ui->textEdit->clear();}
}

これについていくつかの情報を検索してみましたが、実際にはほとんどの人がこれはかなり明白だと思うかもしれませんが、これを回避する方法を理解するのに本当に苦労しています.

4

2 に答える 2

1

ですから、ここでいくつかのことが行われています。1 つは、クリックしているときにNew、保存されていないドキュメントが既に存在するかどうかを確認する必要がある場合です。信号とそのスロットを考えれば、それほど遠くありません。

したがって、押すNewとドキュメントに信号を送信する必要があります。カスタムクラスを作成した場合、これは簡単です。新しいスロットを追加できるdirtyDocumentため (たとえば!)、ドキュメントのステータスを中継することができます。boolフラグを含むシグナルを別のスロット内で処理します。または、on_actionNew_triggeredスロットで、オブジェクトへの参照を渡すか、オブジェクトへのクラス参照を維持することにより、現在開いているドキュメント オブジェクトに保存されていない変更があるかどうかを尋ねることができます (これはDocument *doc;、notepad.h ファイルのようなものです)。

コンパイルの問題が発生した場合は、コードに固有のものを含まない情報をコピーして、Google に貼り付けます。誰かが同じ質問をする可能性が高く、おそらく SO 自体についてです。

于 2013-04-16T14:39:19.717 に答える