KanoopGuiQt 1.3.0
Qt GUI utility library
Loading...
Searching...
No Matches
complexwidget.h
1#ifndef COMPLEXWIDGET_H
2#define COMPLEXWIDGET_H
3
4#include <QWidget>
5
6#include <Kanoop/utility/loggingbaseclass.h>
7#include <Kanoop/gui/libkanoopgui.h>
8
9/**
10 * @brief QWidget subclass that adds logging support and auto-wired input validation.
11 *
12 * ComplexWidget automatically connects common input widget signals (QLineEdit,
13 * QComboBox, QRadioButton, QCheckBox, QSpinBox) to the validate() slot so that
14 * subclasses only need to override validate() to implement form validation.
15 * Call initializeBase() from the subclass constructor after building the UI.
16 */
17class LIBKANOOPGUI_EXPORT ComplexWidget : public QWidget,
18 public LoggingBaseClass
19{
20 Q_OBJECT
21public:
22 /** @brief Construct with an optional parent. */
23 explicit ComplexWidget(QWidget *parent = nullptr);
24
25 /**
26 * @brief Construct with a logging category and optional parent.
27 * @param loggingCategory Category name used for log output
28 * @param parent Optional QWidget parent
29 */
30 explicit ComplexWidget(const QString& loggingCategory, QWidget *parent = nullptr);
31
32private:
33 /** @brief Shared constructor initialization. */
34 void commonInit();
35
36protected:
37 /** @brief Perform base-class initialization; call after building the UI. */
39 /** @brief Connect all child input widget signals to validate(). */
41
42protected slots:
43 /** @brief Override to implement form validation logic. */
44 virtual void validate() {}
45
46private:
47 /** @brief Restore widget geometry from persisted settings. */
48 void restorePersistedSettings();
49 /** @brief Connect QLineEdit signals to validate(). */
50 void connectLineEditSignals();
51 /** @brief Connect QComboBox signals to validate(). */
52 void connectComboBoxSignals();
53 /** @brief Connect QRadioButton signals to validate(). */
54 void connectRadioButtonSignals();
55 /** @brief Connect QCheckBox signals to validate(). */
56 void connectCheckBoxSignals();
57 /** @brief Connect QSpinBox signals to validate(). */
58 void connectSpinBoxSignals();
59
60public slots:
61 /** @brief Called when application preferences change; override to react. */
62 virtual void onPreferencesChanged();
63
64private slots:
65 /** @brief React to the widget's objectName changing. */
66 void onObjectNameChanged();
67 /** @brief React to a QSplitter being moved. */
68 virtual void onSplitterMoved();
69 /** @brief Delegate string-change events to validate(). */
70 virtual void stringChanged(const QString&) { validate(); }
71 /** @brief Delegate int-change events to validate(). */
72 virtual void intChanged(int) { validate(); }
73 /** @brief Delegate bool-change events to validate(). */
74 virtual void boolChanged(bool) { validate(); }
75 /** @brief Delegate parameterless-change events to validate(). */
76 virtual void voidChanged() { validate(); }
77signals:
78
79};
80
81#endif // COMPLEXWIDGET_H
QWidget subclass that adds logging support and auto-wired input validation.
virtual void validate()
Override to implement form validation logic.
virtual void onPreferencesChanged()
Called when application preferences change; override to react.
ComplexWidget(QWidget *parent=nullptr)
Construct with an optional parent.
void connectValidationSignals()
Connect all child input widget signals to validate().
ComplexWidget(const QString &loggingCategory, QWidget *parent=nullptr)
Construct with a logging category and optional parent.
void initializeBase()
Perform base-class initialization; call after building the UI.