繁体   English   中英

Qt Designer自定义插件和动态属性

[英]Qt Designer custom plugin and dynamic properties

我正在尝试将一组自定义小部件编写为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的问题?

谢谢你的任何建议!

在创建另一个QWidget时传递给构造函数的QWidget实际上是父类,所以如果你使用的话

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

}

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

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

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM