QT(B):シンプルなマルチウィンドウプログラム

オリジナル住所: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]ボタンをクリックしてください。

ここに画像を挿入説明

--- END(偽)---

あなたが子供をしたくない場合は、この時点では、複数の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();
}

最後に、メインウィンドウへのコードの完全な補完:

ここに画像を挿入説明

効果:

ここに画像を挿入説明

公開された26元の記事 ウォン称賛24 ビュー30000 +

おすすめ

転載: blog.csdn.net/iSunwish/article/details/87858940