1. 最初の pyqt プログラム
クラスのライティング:
2. モジュールの紹介
- PyQt公式Webサイトのすべてのモジュール
- C++ の特定の実装に関する API ドキュメント
- マインドマップ:
リンク: https://pan.baidu.com/s/1Gs-OUAAGMMH5dWVMhUrBEQ
抽出コード: gc9m
3. コントロール
3.1 Qプッシュボタン、Qラジオボタン、Qグループボックス
3.2 クラベル
3.3 Qライン編集
3.4 ウィンドウの調整
4. レイアウト
4.1 Qボックスレイアウト
QVボックスレイアウト
QHボックスレイアウト
4.2 QGridLayout
4.3 Qフォームレイアウト
フォームの送信
4.4 QStackedLayout
ドロワー レイアウト: 複数ページの切り替え用のレイアウトを提供し、一度に 1 つのインターフェイスのみを表示できます。
5、窓
5.1 分類
6. 信号とスロット
6.1 はじめに
6.2 ケース 1: クリック
6.3 ケース 2: カスタム信号
6.4 ケース 3: メッセージ送信をシミュレートする
6.5 信号とスロットの考慮事項
シグナル (Signal) とスロット (Slot) は主にウィンドウ間の通信に使用され、非同期操作を実行するにはマルチスレッドが必要です。
信号のオブジェクトは、スロット関数がいくつあるかを知る必要はなく、また、信号を受信したかどうか、または誰が信号を受信し、誰が信号を受信していないかを知る必要もありません。同じスロット関数は、信号の送信者が誰であるかを知る必要はありません。信号は適切なタイミングでのみ送信する必要があるため、オブジェクト間の結合が減少します。
知らせ:
1. 信号は複数のスロットに接続できます。
connect(sender, SIGNAL(mySignal(int)),receiver1, SLOT(mySlot(int)));
connect(sender, SIGNAL(mySignal(int),receiver2, SLOT(mySlot(int)));
シグナルが送信されるとスロット関数が呼び出されますが、呼び出される順序はランダムで不定です。
2. 複数の信号を同じスロットに接続可能
connect(sender1 SIGNAL(mySignal1()), receiver, SLOT(mySlot()));
connect(sender2, SIGNAL(mySignal2()),receiver, SLOT(mySlot()));
何らかの信号が発行されると、スロット機能が実行されます。
3. 1 つの信号を別の信号に接続できる
connect(sender, SIGNAL(mySignal1()),this, SIGNAL(mySignal2()));
最初の信号が送信された後、2 番目の信号も同時に送信されます。それ以外の場合、信号間の接続は信号からスロットへの接続と同じです。
4. 接続を削除できます
disconnect(sender, SIGNAL(mySignal()),receiver, SLOT(mySlot()));
オブジェクトが削除されると、Qt はこのオブジェクトへのすべての接続を自動的に削除するため、この関数はほとんど使用されません。
5.パラメータ設定
信号とスロット関数を正常に接続するには、信号関数とスロット関数のパラメーターのタイプと順序が同じである必要があります。
connect(sender, SIGNAL(mySignal(int, const QString &)),receiver, SLOT(mySlot(int, const QString &)));
信号にスロット関数よりも多くのパラメーターがある場合、追加のパラメーターは無視されます。
connect(sender, SIGNAL(mySignal(int, const QString &)),receiver, SLOT(mySlot(int)));
json を使用できます。信号を定義するときにパラメーターの型を str として定義し、関数を発行するときに json.dumps (辞書) を渡すことで、信号に渡されるパラメーターの数に関係なく、信号がスロットを呼び出すときに関数、json.loads( str) でパラメータを取得します
startsignal = pyqtsignal(str);
self.btn.emit(json.dumps({"user":username,"pwd":password}));
def run(str){
params = json.loads(str);
username = params.get("user");
password = params.get("pwd");
}
6. オブジェクトを取得する
QObject * QObject::sender () const [protected]
sender() 関数は、シグナルの送信者の QObject ポインターを返します。
QObject 型ポインタをキャストして、必要なものを取得します。
信号送信オブジェクトはスロット関数で使用します。
例えば:
mySlot(){
currentGlWidget = qobject_cast<GLWidget *>(sender());
QPushButton* btn= dynamic_cast<QPushButton*>(sender())
}
戻り値のあるシグナルスロット。スロット関数には戻り値があります。
アクセス可能な
value = emit mysignal()
戻り値を取得します。
7. Qtデザイナー
7.1 動的読み込み UI
.ui -》uic.loadUi()
7.2 コントロールの取得
スロット関数をコントロールにバインドすると便利です
8、マルチスレッド化
インターフェイスを備えたプログラムであれば、一般的にプログラム実行後、現在のスレッドを利用してイベントの確認やボタンなどのグラフィカルインターフェイスの更新を行いますが、特定のロジックコードの実行に時間がかかる場合には、 、インターフェイスがフリーズします。
したがって、インターフェースの表示はメインスレッドで行い、ロジック関数コードや時間のかかるオペレーションコードは別スレッドで処理するのが一般的です。
8.1 マルチスレッドの例
8.2 複数のスレッド間での信号の受け渡し
クラウド関数に接続する
子スレッドはメインインターフェイススレッドに表示信号を送信します
信号が作成され、接続され、インターフェイスクラスでスロット関数が作成されます
子スレッドはどのようにしてインターフェイススレッドの信号を知るのでしょうか?子スレッド オブジェクトを作成するとき、パラメータはスレッド クラスに渡されます。