【问题标题】:Qt Designer custom plugin and dynamic propertiesQt Designer 自定义插件和动态属性
【发布时间】:2011-11-03 12:29:46
【问题描述】:

我正在尝试编写一些自定义小部件作为 Qt Designer 插件。我所有的小部件的一些属性都是相同的,所以我想创建一个基类。但是多重继承存在一个问题,当基类继承自 QObject 时(因为 Q_PROPERTY 宏使其属性在 Qt Designer 中可编辑)并且自定义小部件需要是 QWidget 的子级。但我找到了 Qt 的动态属性,所以基类获取小部件指针并设置动态属性。

class BaseClass {
  QWidget *widget;
  BaseClass(QWidget *widget) {
    this->widget = widget;
    this->widget->setProperty("Some", 0.0);
  }
  void setSome(double some) {
    this->widget->setProperty("Some", some);
  }
...

没关系。我可以设置动态属性并在 Qt Designer 中查看和编辑它们,一切正常。但是当我想从属性中读取内容时出现了问题。当我使用时:

this->widget->property("Some").value<double>();

Qt Designer 无法启动 (?!)。

当我使用它不止一次时

QVariant var = this->widget->property("Some");
return var.toDouble();

同样的问题! Qt Designer 无法启动,没有消息或其他提示。我正在使用 Qt 4.7.4 和它的设计器。同样的问题出现在 Qt Creators 设计器中(在 2.0.0、2.0.1 上测试)。

是我错了还是 Qt 的问题?

感谢您的任何建议!

【问题讨论】:

  • 您将值设置为 bool 并读取为 double - 这可能行不通。
  • 糟糕,抱歉,这是个错误……谢谢。我正在阅读和写作正确的类型,这是重写“拼写错误”,我要纠正它......
  • 现在已修复...再次感谢

标签: qt qt-designer


【解决方案1】:

在创建另一个QWidget时传递给构造函数的QWidget,实际上是父级,所以如果你使用一些东西作为

Derived::Derived(QWidget* parent):Base(parent){

}

您将该属性设置为父级而不是子级。

由于 Qt 旨在在引用 QObjects 时使用简单的继承,因此创建一个基类,其中包含设置 Q_PROPERTY 的函数并添加一些宏来定义所需的属性。

希望对你有帮助。

【讨论】:

  • 或者,您可以将 (QWidget*) this 代替父类传递给基类构造函数
  • 感谢您的回复。是的,我这样做。例如,当我有一些自定义按钮时,构造函数看起来像 Button(QWidget *parent) : QAbstractButton(parent), BaseClass(this) { ... }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
相关资源
最近更新 更多