为什么 QObject ::findChildren 返回具有公共基类的子级?

2024-02-24

我使用 QObject 作为复合模式的基类。

假设我有一个父类 File(在一个人为的示例中),我向其中添加不同类型的子类 HeaderSection 和 PageSection。 File、HeaderSection 和 PageSection 都是节。 Section 的构造函数采用一个父对象,该对象被传递到 QObject 的构造函数,设置父对象。

e.g:

class Section : public QObject {
 Q_OBJECT

 // parent:child relationship gets set by QObject
 Section(QString name, Section *parent=NULL) : QObject(parent)
 { setObjectName(name);}
 QString name(){return objectName();}
};

class File: public Section {
public:
 // probably irrelevant to this example, but I am also populating these lists
 QList<Section *> headers;
 QList<Section *> pages;
};

class Header : public Section {
Header(QString name, File *file) : Section(name, file){}
};

class Page: public Section {
 Body(QString name, File *file) : Section(name, file){} 
};

定义中的构造语法可能不正确,抱歉,我习惯在外面这样做。无论如何,当我这样做时:

File *file = new file();
Header *headerA = new Header("Title", file);
Header *headerB = new Header("Subtitle", file);
Page *page1 = new Page("PageOne", file);
Page *page2 = new Page("PageTwo", file);

QList<Page*> pages = file->findChildren<Page*>();

for(int i=0; i < pages.size(); i++)
  qDebug() << pages.at(i)->name();

我得到以下输出:

Title

Subtitle

PageOne

PageTwo

我在这里缺少什么?当然,如果 findChildren 寻找公共基类,那么它只会返回 Widget 的每个子级(例如),我知道它在正常使用中不会。

另外,如果我迭代返回的子项列表并使用dynamic_cast<Page*>在每个返回的孩子上,我得到了预期的两个页面项目。


答案正如 @Mat 和 @ratchet 怪胎告诉我的那样 - 我在每个子类中都需要 Q_OBJECT,而不仅仅是基类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 QObject ::findChildren 返回具有公共基类的子级? 的相关文章

  • 在C语言中使用“void”

    我很困惑为什么我们需要通过void转换为 C 函数 int f void return 0 versus int f return 0 什么是正确的做法以及为什么 In C int f 是一种老式的声明 它说f需要固定但未指定数量和类型的参
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim

随机推荐

  • scala Spark udf 中没有可用的 typeTag 错误

    在编译以下代码时 我没有找到 Seq String 的类型标签 val post event list evar lookup String gt Seq String pel String gt pel split filterNot c
  • Rails 应用程序中的 AssociationTypeMismatch(预期对象,获得 HashWithIn DifferentAccess)

    我收到 AssociationTypeMismatch 错误 但我不确定我在哪里犯了错误 我对 Rails 还很陌生 所以我猜我犯了一些愚蠢的错误 我检查了我的语法并将其与Ruby on Rails 应用程序上的 AssociationTy
  • 通过 AJAX 发送图像文件。 request.FILES 为空?

    我正在尝试使用 Ajax 发送图像数据 但request FILES我在后端得到的是空的 我已经添加了multipart form data我的形式和方法是POST 这是我的 AJAX 调用 document on submit profi
  • 如何在 Cocoa 中创建字符串的 MD5 哈希值?

    我知道 SHA 1 是首选 但这个项目要求我使用 MD5 include
  • 当对象更新时,更新对该对象的所有引用(对引用的引用)

    我想在java中声明一个对象 就像C 中指向指针的指针一样 让我给你看一个例子 At the application startup Initialize a settings container class Settings settin
  • 加速 Python

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 python 项目 除了简单的代码内优化之外 还有哪些不错的方法可以加速它 Secondly 用python从头开始编写程序时 有哪
  • 将服务从一项活动传递到另一项活动

    如何将服务从一项活动传递到另一项活动 我有一个音乐播放器 Activity1 它显示歌曲列表 当您单击它时 它会启动 Activity1 中的服务 我有一个按钮 用户可以单击该按钮来打开 Activity2 那么我将服务从 Activity
  • 是否可以将 stickylistviewheader 与 crisbanes pulltorefresh 合并?

    我构建了一个应用程序 其中需要 pulltorefresh 和 StickylistHeaders 我已经在应用程序中实现了 pulltorefresh 但无法使其与 StickyListHeaders 一起使用 是否可以合并这两个库 或者
  • 如何避免在回发时从 asp.net 重复输入?

    我有一个从模板表中提取数据的下拉列表 我有一个添加按钮来插入新模板 添加按钮将弹出 jQuery 弹出窗口以插入新值 将有一个保存按钮来保存新数据 On Save Click 我输入新数据并关闭弹出窗口 问题是这样的 当我刷新页面时 页面再
  • 将 C++ lambda 转换为 C 函数

    我正在编写一些包装代码 其中外部库调用 C 函数 使用可变参数模板等 关键点是外部库需要一个 c 函数 这通常没问题 因为这是合法的 LibraryFuncType fn params 虽然我可以轻松地手动完成此操作 但我想使用以下方法自动
  • 使用 DeviceWatcher 监视 USB 驱动器并检索设备信息?

    I m a WinForms开发人员和我已经知道如何使用 WMI 监视连接或断开连接的 USB 但不久前我发现了设备观察者 http msdn microsoft com en us library windows devices enum
  • 将字符串转换为八进制数的最Pythonic方法

    我希望使用存储在配置文件中的文件掩码来更改文件的权限 由于 os chmod 需要八进制数 因此我需要将字符串转换为八进制数 例如 000 gt 0000 or 0o000 for you python 3 folks 644 gt 064
  • Docker 组成和主机名

    我有一个包含 2 个名为 web 和 db 的服务 容器 的撰写文件 version 2 services web image nodejs latest ports 80 db image mysql latest ports 3306
  • is_null($var) 和 ($var === null) 有什么区别?

    这之间有什么区别吗 if is null var do something 和这个 if var null do something 检查变量是否包含 null 时哪种形式更好 有什么我应该注意的边缘情况吗 我初始化了所有变量 因此不存在的
  • 将模块导入 Pyscript

    当我们编写 Python 代码时 我们通常使用导入的包和模块 例如 我们在编码时可能会这样写 import numpy import requests from bs4 import BeautifulSoup 当我们尝试将 python
  • 在 git 中,如何仅从更改的行中删除 Windows 行结尾?

    有时 当我尝试向开源项目贡献代码时 该项目尚未格式化并且包含 UNIX 和 Window 行结尾 我的 智能 IDE 会以某种方式检测每个文件使用哪种类型的结尾 如果它检测到 Windows 行结尾 那么我的所有更改都将具有 Windows
  • 更改 Sysem.Variants.VarToWideStr 的区域设置格式

    我的应用程序上的第三方组件 FastReports 广泛使用 System Variants VarToWideStr 函数 这很好 只是它忽略了我需要该应用程序使用的区域设置 Example FormatSettings ShortDat
  • Spark 跨接收器的结构化流一致性

    我想在以下情况下更好地理解 Spark 2 2 结构化流的一致性模型 一个来源 Kinesis 从此源向 2 个不同接收器进行 2 次查询 一个用于存档目的的文件接收器 S3 另一个用于处理数据的接收器 数据库或文件 尚未决定 我想了解跨接
  • 覆盖 django 的模型相关管理器

    我如何才能超越关系经理 例如 user entry set django db models fields related RelatedManager 但我需要自己的经理 我尝试这段代码 但这不起作用 class EntryManager
  • 为什么 QObject ::findChildren 返回具有公共基类的子级?

    我使用 QObject 作为复合模式的基类 假设我有一个父类 File 在一个人为的示例中 我向其中添加不同类型的子类 HeaderSection 和 PageSection File HeaderSection 和 PageSection