使用Qt,我知道private slots表示直接调用时插槽是专用的,但是connect()仍然可以将信号连接到插槽,无论是专用,公共的还是我认为是受保护的。

那么,有没有一种方法可以使插槽真正私有,从而只能在一个类中进行连接?我在这里的想法是因为QTimer::singleShot调用了插槽,但我想调用的函数却不想在类外部访问。我敢肯定还有其他原因,但这是目前我发现的主要原因。

最佳答案

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

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 */
}

10-07 19:28