クラスを拡張するQWidget
クラスがあり、このクラスは QtDesigner によって生成された Ui クラスを使用します。次のようなもの:
class MyWidget : public QWidget
{
signals:
void pushButtonClicked();
// ....
private:
Ui::MyUi ui;
}
MyWidget::MyWidget()
{
ui = new Ui::MyUi();
ui->setupUi(this);
}
QPushButton * pushButton
内にフィールドがあるとしましょうUi::MyUi
。このウィジェットの UI には、複雑なビジネス ロジックはありません。
ここで、 がクリックされるたびpushButton
に、このウィジェットがシグナルを発する必要があります (これを と呼びましょうpushButtonClicked()
。これが達成されると想像できる唯一の方法は次のとおりです。
clicked()
オブジェクトのシグナルをpushButton
ローカルスロットに接続しpushButtonClicked()
、そこからシグナルを発信します。MyWidget
のmouseEventFilterとしてインストールしpushButton
、内部で処理しますMyWidget::mouseClickedEvent
他のオプションはありますか?Qt フレームワークに 'MyWidget::pushButtonClicked()' を代わりに使用させるようにpushButton->clicked()
MyWidget
プロジェクトでは、集約または継承によって UI をラップ/抽象化する のようなラッパー クラスからこのような信号の受け渡しが必要な、このような多くのシナリオがあります。一般に、より良い設計、特にコードの再利用のための最良のアプローチと考えられているものはどれですか。プロジェクトが初期段階にあり、これらの UI のどれが将来複雑なビジネス ロジックを必要とするかがわからない場合。
QPushButton の拡張はオプションではないことに注意してください。