我正在尝试将一组自定义小部件编写为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的问题?
感谢您的任何建议!
答案 0 :(得分:2)
创建另一个QWidget时传递给构造函数的QWidget实际上是父,所以如果你使用的东西是
Derived::Derived(QWidget* parent):Base(parent){
}
您将该属性设置为父级而不是子级。
由于Qt旨在在引用QObject时使用简单的inheritane,因此请创建一个基类,其中的函数将设置Q_PROPERTY并添加一些宏来定义所需的属性。
希望它有所帮助。