[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