[Development] About ALIAS in Q_PROPERTY

Svetkin Mikhail mikhail.svetkin at gmail.com
Tue Mar 11 09:59:41 CET 2014


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/331b2d3e/attachment.html>


More information about the Development mailing list