[Development] About ALIAS in Q_PROPERTY
Branislav Katreniak
katreniak at gmail.com
Thu Mar 13 09:31:30 CET 2014
The proposed ALIAS property is NOT a full featured C++ property,
because it does not define set, get and signal methods in C++.
Would dynamic property initialized in constructor do the same job?
CustomWidgetSecond::CustomWidgetSecond(QWidget *parent)
: QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
//alias property
setProperty("label", ui->CustomWidgetFirst->label());
connect(ui->CustomWidgetFirst, CustomWidgetFirst::labelChanged,
this, [this](const QString &x) { setProperty("label", x); }
);
}
Kind regards
Brano
On Tue, Mar 11, 2014 at 4:12 AM, Svetkin Mikhail
<mikhail.svetkin at gmail.com>wrote:
> Explain:
> I was creating custom widgets with the help of Qt-designer.
> And I have noticed I have to duplicate my code, if I want to edit
> properties of the widget in qt-designer property editor.
> Simple Example:
>
>
> 1. // custom_widget_first.h
> 2.
> 3. #include <QWidget>
> 4. #include <QString>
> 5. #include <QPaintEvent>
> 6.
> 7. class CustomWidgetFirst : public QWidget<http://qt-project.org/doc/QWidget.html>
> {
> 8. Q_OBJECT
> 9. Q_PROPERTY(QString <http://qt-project.org/doc/QString.html> value
> READ label WRITE setLabel)
> 10. public:
> 11. explicit CustomWidgetFirst(QWidget<http://qt-project.org/doc/QWidget.html>
> *parent = 0)
> 12. ~CustomWidgetFirst();
> 13.
> 14. QString <http://qt-project.org/doc/QString.html> label() const;
> 15. void setLabel(const QString<http://qt-project.org/doc/QString.html>
> &label);
> 16.
> 17. protected:
> 18. void paintEvent(QPaintEvent<http://qt-project.org/doc/QPaintEvent.html>
> *event);
> 19.
> 20. private:
> 21. QString <http://qt-project.org/doc/QString.html> m_label;
> 22. };
> 23.
> 24. // custom_widget_first.cpp
> 25.
> 26. #include "custom_widget_first.h"
> 27.
> 28. CustomWidgetFirst::CustomWidgetFirst(QWidget<http://qt-project.org/doc/QWidget.html>
> *parent)
> 29. : QWidget <http://qt-project.org/doc/QWidget.html>(parent) {
> 30. }
> 31.
> 32. QString <http://qt-project.org/doc/QString.html> CustomWidgetFirst
> ::label() const {
> 33. return m_label;
> 34. }
> 35.
> 36. void CustomWidgetFirst::setLabel(const QString<http://qt-project.org/doc/QString.html>
> &label) {
> 37. m_label = label;
> 38. }
> 39.
> 40. void CustomWidgetFirst::paintEvent(QPaintEvent<http://qt-project.org/doc/QPaintEvent.html>
> *event) {
> 41. // some paint
> 42. }
> 43.
> 44. CustomWidgetFirst::~CustomWidgetFirst() {
> 45. }
> 46.
> 47. // custom_widget_second.h
> 48.
> 49. #include <QWidget>
> 50. #include <QString>
> 51.
> 52. namespace Ui {
> 53. class Form;
> 54. }
> 55.
> 56. class CustomWidgetSecond : public QWidget<http://qt-project.org/doc/QWidget.html>
> {
> 57. Q_OBJECT
> 58. Q_PROPERTY(QString <http://qt-project.org/doc/QString.html> text
> 59. READ getUiCustomWidgetSecondTextLabel
> 60. WRITE setUiCustomWidgetSecondTextLabel)
> 61.
> 62. public:
> 63. explicit CustomWidgetSecond(QWidget<http://qt-project.org/doc/QWidget.html>
> *parent = 0)
> 64. ~CustomWidgetSecond();
> 65.
> 66. QString <http://qt-project.org/doc/QString.html>
> getUiCustomWidgetFirstLabel() const; // dublicate code
> 67. void setUiCustomWidgetFirstTextLabel(const QString<http://qt-project.org/doc/QString.html>
> &text); // dublicate code
> 68.
> 69. private:
> 70. Ui::Form *ui; // ui generated from uic and have several widgets,
> including CustomWidgetFirst
> 71. };
> 72.
> 73. // custom_widget_second.cpp
> 74.
> 75. #include "custom_widget_second.h"
> 76. #include "ui_form.h"
> 77.
> 78. CustomWidgetSecond::CustomWidgetSecond(QWidget<http://qt-project.org/doc/QWidget.html>
> *parent)
> 79. : QWidget <http://qt-project.org/doc/QWidget.html>(parent),
> 80. ui(new Ui::Form) {
> 81. ui->setupUi(this);
> 82. }
> 83.
> 84. QString <http://qt-project.org/doc/QString.html> CustomWidgetSecond
> ::getUiCustomWidgetFirstTextLabel() const { // duplicate code
> 85. return ui->CustomWidgetFirst->label();
> // duplicate code
> 86. }
> // duplicate code
> 87.
> 88. void CustomWidgetSecond::setUiCustomWidgetFirstTextLabel(const
> QString <http://qt-project.org/doc/QString.html> &text) { // duplicate
> code
> 89. ui->CustomWidgetFirst->setLabel(text);
> // duplicate code
> 90. }
> // duplicate code
> 91.
> 92. CustomWidgetSecond::~CustomWidgetSecond() {
> 93. delete ui;
> 94. }
>
>
> Would suggest to solve this problem in this way(The code marked as
> duplicate does not need anymore.):
>
> 1. Q_PROPERTY(QString <http://qt-project.org/doc/QString.html> label
> ALIAS CustomWidgetFirst ui->custom_widget_first_obj->value ) // where
> "value" property name
>
> The ALIAS attribute indicates that the property will be reference on
> another
> property. If ALIAS property has a signal, you need to declare the same
> signal
> because moc will automatically generate connect(aliasObject, aliasSignal,
> yourClassObject, aliasSignal)
> and you will only need call initAliasNotify function in the class
> construct.
>
>
> 2014-03-10 22:43 GMT+06:00 Giuseppe D'Angelo <dangelog at gmail.com>:
>
> Can you please explain what this feature is about, why do you think
>> it's useful, how it's supposed to be used, etc.?
>>
>> On 10 March 2014 17:30, mikhail.svetkin at gmail.com
>> <mikhail.svetkin at gmail.com> wrote:
>> > Hello, I would like to clarify wherein the complexity
>> > (https://codereview.qt-project.org/#change,80412)?
>> > Ready to listen to any suggestions and implement them.
>> >
>> > --
>> > Mikhail Svetkin
>> > _______________________________________________
>> > Development mailing list
>> > Development at qt-project.org
>> > http://lists.qt-project.org/mailman/listinfo/development
>>
>>
>>
>> --
>> Giuseppe D'Angelo
>>
>
>
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20140313/cb17aa7b/attachment.html>
More information about the Development
mailing list