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

时间:2011-11-03 12:29:46

标签: qt qt-designer

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

感谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

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

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

}

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

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

希望它有所帮助。