【问题标题】:How to set user data for a QWidget?如何为 QWidget 设置用户数据?
【发布时间】:2012-10-22 19:43:51
【问题描述】:

我想设置一个整数存储在QWidget 中,我认为setUserData 成员函数可以解决问题,但我找不到任何文档。有什么提示吗?

【问题讨论】:

  • QObject::setUserData 被标记为“内部”——最好避免使用它。

标签: c++ qt qwidget


【解决方案1】:

您可能正在寻找QObject::setProperty()(当然是由QWidget 继承的)。

【讨论】:

  • 是否可以将一个对象(比如 Foo 类)分配为属性并在查询时将其取回,而不是仅使用字符串、整数或其他简单的数据类型属性?
  • 我不确定,因为我不是 QT 专家。但是我在下面发布的创建继承类型的解决方案肯定适用于任意对象。您只需将“Data”替换为“Foo”即可。
【解决方案2】:

我不是 QT 专家,但为什么不创建一个继承自 QWidget 并具有整数的类?像这样:

class MyDerivedWidget : public QWidget
{
    public:
  MyDerivedWidget();

    private:
  Data *myUserData;
}; 

或者如果你坚持使用setUserData 结帐最后一个帖子here

【讨论】:

  • 它是,如果你做明确的 MyDerivedWidget(QWidget parent=0){},简单而有效,但对我来说这听起来有点 hacky,但有用的答案所以我投了赞成票,谢谢。
  • IMO,这是两个答案中最少的。如果您想将数据存储在 QWidget 中(与仅使用普通结构相比),正确的方法是继承您想要的类,添加更多功能并“正确”执行。至少通过继承,您可以添加访问器等,使其比仅传递带有附加随机属性的标准 QWidget 更有用...
  • @g19fanatic,恭敬地不同意(显然图书馆设计师站在我这边,否则setProperty() 将不存在)。有时,将一个简单的“数据包”与实例关联起来会非常方便,而无需设计和维护整个子类来获得它。
  • @Barnabas 我同意 g19fanatic 继承不是“hacky”,它是面向对象编程的基本特征。如果您对继承感到不舒服,我强烈建议您研究它并了解更多信息。这是一个非常非常强大的工具。
  • @vannattab,谢谢你的回答,我们不要在这里破坏。我不是想说太多,“hacky”可能有点强。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2012-07-19
  • 2017-12-18
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多