[Development] About ALIAS in Q_PROPERTY
Konstantin Ritt
ritt.ks at gmail.com
Tue Mar 11 10:12:41 CET 2014
Try initializing that `ui` with 0 and see what happens.
Similar for using the property from a destructor or destruction sequence,
since moc is unable to track the pointers in use.
Also think about objects you don't control, i.e. Q_PROPERTY(QString label
ALIAS AnyCrap m_parent->labelWidget->objectName()) ...and so on.
Regards,
Konstantin
2014-03-11 10:59 GMT+02:00 Svetkin Mikhail <mikhail.svetkin at gmail.com>:
> Why do you think moc will crash?
>
>
> 2014-03-11 14:30 GMT+06:00 Konstantin Ritt <ritt.ks at gmail.com>:
>
>> > Would suggest to solve this problem in this way(The code marked as
>> duplicate does not need anymore.):
>> > Q_PROPERTY(QString <http://qt-project.org/doc/QString.html> label
>> ALIAS CustomWidgetFirst ui->custom_widget_first_obj->value ) // where
>> "value" property name
>>
>> I don't think moc is able to guarantee no crash at
>> `ui->custom_widget_first_obj->value`. So you're trading safety for nothing.
>>
>> Konstantin
>>
>>
>> 2014-03-11 5:12 GMT+02:00 Svetkin Mikhail <mikhail.svetkin at gmail.com>:
>>
>> 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/20140311/e87bdfeb/attachment.html>
More information about the Development
mailing list