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

标签 c++ qt

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

相关文章:

C++:使用特定命令退出for循环push_back命令

c++ - 是否可以分别专注于 typedef 及其基础类型?

c++ - 使用Qt在图像上绘制文字

QTableView selectionChanged

c++ - Linux 和剪贴板

c++ - 使用传递给应用程序的不同线程数调用函数

c++ - DLL 之间的交互

c++ - 在文件中存储和同步字符串列表

qt - 如何将 cookie 保存到 QNetworkAccessManager 或从 QNetworkAccessManager 加载 cookie

android - Qt可以在Android中运行吗?