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

标签 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的问题?

感谢您的任何建议!

最佳答案

创建另一个 QWidget 时传递给构造函数的 QWidget 实际上是父级,因此如果您使用某些东西作为

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

}

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

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

希望能帮助到你。

关于Qt Designer 自定义插件和动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994868/

相关文章:

qt - 如何在 QT Designer 中更改 QT 线条小部件的颜色

python - 具有自定义插槽的 PyQt5 设计器

c++ - 在 QTreeView 中插入和删除行

c++ - 使用 C++ 从 QML 单例中读取属性

python - 如何在主Python文件中使用多个.ui文件

c++ - 我如何使用 cmake(和 visual studio)为 qt designer 创建自定义(小部件)插件

Qt 5.8 项目错误 : Unknown module(s) in Qt: platformsupport-private

c++ - qt: QInputDialog::getText 不工作

c++ - Qt - QPushButton 文本格式

python - QtDesigner 更改将在重新设计用户界面后丢失