gpt4 book ai didi

c++ - 连接到派生类中的 protected 插槽

转载 作者:可可西里 更新时间:2023-11-01 18:26:20 27 4
gpt4 key购买 nike

这是基类中声明的样子:

protected:
void indexAll();
void cleanAll();

在派生类中,以下不编译:

indexAll();  // OK
connect(&_timer, &QTimer::timeout, this, &FileIndex::indexAll); // ERROR
connect(&_timer, SIGNAL(timeout()), this, SLOT(indexAll())); // OK

我想使用 connect 的第一个变体,因为它会进行一些编译时检查。为什么会返回错误:

error: 'void Files::FileIndex::indexAll()' is protected
void FileIndex::indexAll()
^
[...].cpp:246:58: error: within this context
connect(&_timer, &QTimer::timeout, this, &FileIndex::indexAll);
^

最佳答案

“旧”风格的语法之所以有效,是因为信号发射通过 qt_static_metacall(..) 运行,它是 FileIndex 的成员,因此具有 protected 访问权限。

"new"样式语法确实有效,但是 for this reason不会让你直接拿父类方法的地址。然而,它将采用 indexAll() 的“继承”地址,因此只需将代码更改为:

connect(&_timer, &QTimer::timeout, this, &Derived::indexAll);

关于c++ - 连接到派生类中的 protected 插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30001556/

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