[Development] About ALIAS in Q_PROPERTY

Svetkin Mikhail mikhail.svetkin at gmail.com
Tue Mar 11 12:13:43 CET 2014


I don't understand what do you mean exactly, please explain in details.


2014-03-11 16:05 GMT+06:00 Konstantin Ritt <ritt.ks at gmail.com>:

> 2014-03-11 11:57 GMT+02:00 Svetkin Mikhail <mikhail.svetkin at gmail.com>:
>
> Try initializing that `ui` with 0 and see what happens.
>>
>>  For this, in moc(for ALIAS) can add a check
>>
>
> You can not.
>
>
>>
>> Q_PROPERTY(QString label ALIAS AnyCrap
>>> m_parent->labelWidget->objectName())
>>
>>
>> This example not valid.
>>
>> Q_PROPERTY(QString label ALIAS AnyCrap
>> m_parent->labelWidget->propertyName).
>>
>> Where `propertyName` link on Q_PROPERTY(type propertyName)
>>
>> If the syntax is very complex, it is possible to do so
>> Q_PROPERTY(QString label ALIAS AnyCrap m_parent->labelWidget
>> propertyName).
>>
>> 2014-03-11 15:12 GMT+06:00 Konstantin Ritt <ritt.ks at gmail.com>:
>>
>> 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/34c3b491/attachment.html>


More information about the Development mailing list