gpt4 book ai didi

qt - 是否可以使用 "this"从派生对象的基类发出信号

转载 作者:行者123 更新时间:2023-12-02 00:23:42 25 4
gpt4 key购买 nike

不太确定如何表述我的问题,我希望这更清楚。我想要一个看起来像这样的基类:

class Base : public QObject { 
Q_OBJECT


void doSomething() { emit test(this); }

virtual void doSomethingElse() = 0;

signals:
void test(Base*);
}

然后在派生类中这样做:

 class Derived : public Base {

void doSomethingElse() { emit test(this); }

}

如果我现在收听这个对象的信号,我会收听 test(Derived*) 还是/和 test(Base*)?

最佳答案

moc 在编译时根据您在使用 Q_OBJECT 宏的类中声明它们的方式生成槽和信号的列表。
这个列表是一个字符串列表,所以如果你声明:

signals:
void test(Base*);

列表中的项目将是字符串 "test(Base*)"(您可以在文件 moc_yourclass 的变量 qt_meta_YourClass 中看到该列表.cpp 在输出目录中)。
SIGNALSLOT 也返回字符串,connect() 将它们规范化,因此它们的格式与生成的 moc 中的一样列表,并将它们与该列表中的那些进行比较。

派生类时,字符串没有变化,所以还是要用SIGNAL(test(Base*))

关于qt - 是否可以使用 "this"从派生对象的基类发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com