[Development] About ALIAS in Q_PROPERTY

Konstantin Ritt ritt.ks at gmail.com
Tue Mar 11 11:05:42 CET 2014


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/2d50ca52/attachment.html>


More information about the Development mailing list