Von Zeit zu Zeit treten Fragen zur Vererbung von Widgets und zur Verwendung von vererbten Widgets im Grafikdesigner Qt Designer auf.
Wenn die Verwendung eines Widgets innerhalb des Codes insgesamt verständlich ist, dann ist es nicht auf den ersten Blick klar, wie man ein benutzerdefiniertes Widget an ein UI-Formular anfügt.
Sehen wir uns ein Beispiel für eine von QPushButton geerbte Schaltfläche an.
CustomButton
Gegeben ist eine CustomButton-Klasse, die von QPushButton erbt und die Methode mousePressEvent überschreibt. Sie werden in diesem Code nichts Besonderes sehen, er zeigt nur, wie man eine Klasse schreibt, die von einem Widget in Qt erbt.
CustomButton.h
#ifndef CUSTOMBUTTON_H #define CUSTOMBUTTON_H #include <QPushButton> class CustomButton : public QPushButton { Q_OBJECT public: explicit CustomButton(QWidget *parent = nullptr); // QWidget interface protected: virtual void mousePressEvent(QMouseEvent* event) override; }; #endif // CUSTOMBUTTON_H
CustomButton.cpp
#include "CustomButton.h" CustomButton::CustomButton(QWidget *parent) : QPushButton(parent) { } void CustomButton::mousePressEvent(QMouseEvent* event) { // ToDo something QWidget::mousePressEvent(event); }
Benutzerdefiniertes Widget zum UI-Formular hinzufügen
1) Die Form der Widget-Klasse ist gegeben, in der es nichts gibt
2) Fügen Sie eine standardmäßige QPushButton-Schaltfläche hinzu
3) Rufen Sie mit der rechten Maustaste das Kontextmenü auf und klicken Sie auf „Konvertieren in …“
4) Geben Sie im sich öffnenden Dialogfeld den Namen der konvertierten Klasse und den Namen der Header-Datei ein. In unserem Fall wird es sein:
- Klassenname CustomButton
- Header-Datei CustomButton.h
Klicken Sie im Dialogfeld auf die Schaltfläche Hinzufügen
5) Wählen Sie die konvertierte Klasse aus und klicken Sie auf die Schaltfläche „Konvertieren“.
Благодарю, а я решил весь GUI в коде писать из-за того, что года два назад не нашел ответ на этот вопрос :) Плохо искал :C
Наверное, поэтому некоторые программисты недолюбливают Qt Designer. Приходится тратить дополнительно силы на его изучение, а иногда некотроые вещи запрятаны очень глубоко в нём.