【问题标题】:Is there a way to prevent Qt Designer from applying properties?有没有办法阻止 Qt Designer 应用属性?
【发布时间】:2016-08-17 22:54:57
【问题描述】:

我有一些从QWidgetQFrame 推广的自定义小部件,但我希望构造函数能够将属性列表设置为固定,而不必在 Qt Desigenr 属性列表中更改它每次我添加一个这些自定义 wdigets 时,例如在我的 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

防止CustomWidget 中的FrameShape 属性被Qt Designer 中设置的QFrame 默认属性覆盖的任何想法,因为我不想在每个小部件上手动设置此属性推广?

【问题讨论】:

  • 请说明您的问题是什么。您已经展示了现在发生的情况,请展示您希望按照自己的方式生成的代码。还请描述您希望 Qt Designer 以不同方式做什么。

标签: c++ qt qt-designer


【解决方案1】:

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

【讨论】:

  • 当我使用 Qt Designer 在我的 GUI 中放置一个新的QFrame 时,属性列表中的样式已经设置为StyledPanel,并且默认按钮已经是可点击的。如果我单击它,它会将属性设置为NoFrame。这跟我的选择有关系吗?
  • 实验。您可能会看到 Qt Designer 错误。编辑.ui 文件并删除在其上显式设置的所有属性。或者,应该将类提升设置为QWidget,这样就不会对其应用任何QFrame 相关的属性。仅仅因为你的类派生自 QFrame 并不意味着你必须告诉设计师这个细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2020-09-22
  • 1970-01-01
相关资源
最近更新 更多