オリジナル住所:https://houkaifa.com/2019/02/19/LearningNotes-QT-02/
アウトライン
BenpianレコードをどのようにシンプルなマルチウィンドウプログラムのQTクリエーター開発。
環境:Win10 + QT Creator4.4.1 + QT5.9.2。
コンテンツの実装:メインウィンドウで指定したパスワードを入力し、別のウィンドウをロードするために、ボタンをクリックすると、子ウィンドウは、ロードの三つの方法ながら、一度だけ与えられています。
まず、設立QTプロジェクト
QTクリエーター、新しいQtのウィジェットアプリケーションプロジェクトを開きます。
項目名は、プロジェクトを完了するための次のステップは、作成されています。
以下は、初期エンジニアリング構造は次のとおりです。
第二に、新しいGUIのファイルを追加します
プロジェクトディレクトリで右のフォームを選択し、新しいファイルを追加します。
OK、Qtの、Qtのデザイナインターフェイスクラスのような新しいファイルのウィンドウを選択します。
インタフェース・テンプレートを選択するための実際の必要性によると、ここで選択したが、まだメインウィンドウは、次のステップです。
デフォルトのカテゴリやメインウィンドウは、メインウィンドウで回避競合するためには、クラスの名前を再選択し、完全に次のステップにすべての方法。
新しいQtのデザイナインターフェイスは、プロジェクト終了後のクラス構造を作成します。
第三に、ロードされたウィンドウを達成するために
ファイル.uiのメインウィンドウを開き、プッシュボタンがLINEEDITがパスワードに表示を設定した平均表情インタフェースシンプルに、やるLINEEDITを追加し、デフォルトのテキストを設定します。
このように駆け上がるの効果:
私たちが達成したい次は、テキストボックスの内容は、そのようなHoukaifaがウィンドウChildWindowをロードするには、[OK]ボタンをクリックしたときのように、コンテンツを指定する際に、あります。
まず、メインウィンドウ.hファイル・ヘッダー内のサブウインドウが含まれている追加します。
#include <childwindow.h>
プライベートメンバーとメインウィンドウクラスの子ウィンドウクラス:
private:
ChildWindow *cw;
完全なコードは次のようになります。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <childwindow.h>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private:
ChildWindow *cw;
};
#endif // MAINWINDOW_H
emmm、または鮮明な画像のルックスを置きます:
ここでは、メインウィンドウのプッシュボタンが、私たちは、パスワードが正しいかどうかを判断するために、クリックされたスロットの機能信号を追加しました。
パスワードの下に子ウィンドウCWをロードする方法、正しいでしょうか?
:メインウィンドウクラスでは、特定のコードに示すように、単にインスタンス化と呼び出しショー()関数の代わりに表示することができ、プライベートメンバChildWindowクラスを定義します
もちろん、直接必要一時変数の時にクラスメンバーとして作成されていない子ウィンドウのクラス定義は、CW delete文のメンバーとして、可能であり、マップ上のコメントで(//ロードChildWindow)を直接、次のコードでは:
ChildWindow *cw = new ChildWindow(this);
cw->show();
F5デバッガ、テストの結果:
- 間違ったパスワードが入力され、OKボタン、パスワードプロンプトエラーをクリックしてください。
- 正しいパスワードを入力し、ChildWindowをロードするために[OK]ボタンをクリックしてください。
あなたが子供をしたくない場合は、この時点では、複数のChildWindow複数のクリックにOKボタン負荷を見つけるでしょう、数回のウィンドウがロードされている間、次のことができます。
- 方法1:子ウィンドウでは、メインウィンドウが隠されているの後に完成ロードがあります。
...
cw->show(); // 显示子窗口
this->hide(); // 隐藏主窗口
...
-
方法2:ChildWindowはシングルトンクラスに変換します。
-
方法3:メインChildWindowウィンドウで定義されていると確認され、ポインタが下に詳細に、ウィンドウが作成されているかどうかを知るために確認ボタンをクリックすると、子ウィンドウが空の状態でポインタの後に閉じられているように、本実施形態のように、クラスのメンバー:
子ウィンドウを空白にポインタの後にオフにする方法?
A:書き換えcloseEventイベント機能。
closeEventはプロトタイプであるQCloseEventクラスの仮想関数、次のとおりです。
void closeEvent(QCloseEvent* event);
ウィンドウが閉じられたときにトリガ、クラスのヘッダーファイルには、子ウィンドウに含まれており、カスタムアクションの子ウィンドウを閉じたときにcloseEvent書き換え機能を実現することができます。
次に、機能closeEvent .CPPファイルサブウィンドウ、直接送信信号の実現のために:
void ChildWindow::closeEvent(QCloseEvent* event)
{
emit windowClosed();
}
最後に、メインウィンドウへのコードの完全な補完:
効果: