使用 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/