是否有一种方法可以防止Qt设计器应用属性

Is there a way to prevent Qt Designer from applying properties?

本文关键字:Qt 属性 应用 方法 一种 是否      更新时间:2023-10-16

我有一些自定义小部件,我从QWidgetQFrame推广,但我希望构造器能够设置属性列表固定,而不必在Qt designer属性列表中更改它每次我添加这些自定义小部件之一,例如在我的CustomWidget类构造器:

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文件,因此调用setter)来改变这些属性,如下所示:

ui->setupUi(this);
setComponentsProperties(); //Do my property changes here

任何想法,以防止FrameShape属性从CustomWidget被覆盖的QFrame的默认属性设置在Qt设计器,因为我不想要手动设置这个属性上的每一个小部件,我将促进?

如果属性是真正的默认值,则不会覆盖它们。您的.ui文件不正确,并且显式地覆盖了这些属性。您应该将它们重置为默认值,然后您引用的代码将不会被发出。setComponentProperties调用是多余的,设置属性的代码属于自定义小部件的构造函数。