gpt4 book ai didi

c++ - 防止连接到插槽 ("Really"专用插槽)

转载 作者:行者123 更新时间:2023-11-27 23:23:32 25 4
gpt4 key购买 nike

使用 Qt 我知道 private slots 意味着插槽在直接调用时是私有(private)的,但是 connect() 仍然可以允许信号连接到插槽是否私有(private),公开的,或者我猜, protected 。

那么,有没有办法让插槽真正私有(private)化,这样只能进行类内的连接?我在这里想的是因为 QTimer::singleShot 调用了一个插槽,但我不想在类外访问我想调用的函数。我确信还有其他原因,但这是目前我发现的主要原因。

最佳答案

如果您真的想强制执行此操作,并且您认为适当的文档无法解决此问题,请将插槽添加到一个额外的类中,该类具有私有(private)构造函数并将调用中继到您的真实类。

class PrivateSlotClass : public QObject
{
Q_OBJECT
friend class YourRealClass;
PrivateSlotClass( YourRealClass ) : QObject( YourRealClass ){}
private slots:
void theSlot(){ static_cast<YourRealClass*>(parent())->theFunction();
};

class YourRealClass : public QObject
{
public:
YourRealClass();
friend class PrivateSlotClass;
private:
void theFunction();
};

YourRealClass::YourRealClass(){
PrivateSlotClass* myPrivateSlot = new PrivateSlotClass(this);
QTimer::singleShot( 50, myPrivateSlot, SLOT(theSlot()) );
}
void YourRealClass::theFunction()
{
/* your slot code here */
}

关于c++ - 防止连接到插槽 ("Really"专用插槽),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11136689/

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