有没有办法阻止 Qt Designer 应用属性?
Is there a way to prevent Qt Designer from applying properties?
我有一些从 QWidget
或 QFrame
推广的自定义小部件,但我希望构造函数能够将属性列表设置为固定的,而不必更改它在 Qt Desigenr 属性 列表中,每次我添加这些自定义 wdigets 之一,例如在我的 CustomWidget
class 构造函数中:
this->setFrameShape(QFrame::NoFrame);
问题是这些属性是在生成的 ui.h 文件中的构造函数调用之后应用的,该文件是从设计器的 属性 列表生成的,例如对于实现 QFrame
的默认自定义小部件:
frame = new CustomWidget(groupBox_17);
frame->setObjectName(QStringLiteral("frame"));
frame->setGeometry(QRect(40, 170, 101, 21));
frame->setFrameShape(QFrame::StyledPanel);
frame->setFrameShadow(QFrame::Raised);
在这里,我们可以看到在生成的文件中调用的 setFrameShape
将覆盖自定义小部件的构造函数中的 setFrameShape
,因为它是在之后调用的。
所以我看到的唯一选择是在 ui 设置之后调用一个方法(它调用生成的 ui.h 文件,因此调用设置器)来更改这些属性,如下所示:
ui->setupUi(this);
setComponentsProperties(); //Do my property changes here
任何防止 CustomWidget
中的 FrameShape
属性 被 Qt Designer 中设置的 QFrame
的默认 属性 覆盖的想法,因为我不想在我要推广的每个小部件上手动设置此 属性?
如果属性确实是默认值,则不会被覆盖。您的 .ui
文件不正确并明确覆盖了这些属性。您应该将它们重置为默认值,然后您引用的代码将不会被发出。 setComponentProperties
调用是多余的,设置属性的代码属于自定义小部件的构造函数。
我有一些从 QWidget
或 QFrame
推广的自定义小部件,但我希望构造函数能够将属性列表设置为固定的,而不必更改它在 Qt Desigenr 属性 列表中,每次我添加这些自定义 wdigets 之一,例如在我的 CustomWidget
class 构造函数中:
this->setFrameShape(QFrame::NoFrame);
问题是这些属性是在生成的 ui.h 文件中的构造函数调用之后应用的,该文件是从设计器的 属性 列表生成的,例如对于实现 QFrame
的默认自定义小部件:
frame = new CustomWidget(groupBox_17);
frame->setObjectName(QStringLiteral("frame"));
frame->setGeometry(QRect(40, 170, 101, 21));
frame->setFrameShape(QFrame::StyledPanel);
frame->setFrameShadow(QFrame::Raised);
在这里,我们可以看到在生成的文件中调用的 setFrameShape
将覆盖自定义小部件的构造函数中的 setFrameShape
,因为它是在之后调用的。
所以我看到的唯一选择是在 ui 设置之后调用一个方法(它调用生成的 ui.h 文件,因此调用设置器)来更改这些属性,如下所示:
ui->setupUi(this);
setComponentsProperties(); //Do my property changes here
任何防止 CustomWidget
中的 FrameShape
属性 被 Qt Designer 中设置的 QFrame
的默认 属性 覆盖的想法,因为我不想在我要推广的每个小部件上手动设置此 属性?
如果属性确实是默认值,则不会被覆盖。您的 .ui
文件不正确并明确覆盖了这些属性。您应该将它们重置为默认值,然后您引用的代码将不会被发出。 setComponentProperties
调用是多余的,设置属性的代码属于自定义小部件的构造函数。