信号/插槽概念Qt和模板..备选方案
Signal/Slot concept Qt and templates... Alternatives?
使用Qt我对它越来越恼火。Qt不允许我在它的大多数类中使用模板,因为MOC编译器(或更好的预处理器)是在实际生成c++代码之前运行的。
Qt的内部Singal/Slot概念有合理的替代方案吗?我读过关于boost::signals2的文章,但不知道它是否经过了预处理。
Qt不允许我在它的大多数类中使用模板,因为MOC编译器(或更好的预处理器)是在实际生成c++代码之前运行的。
您可以将模板类与qt信号槽一起使用,但需要进行下一次恢复:
- 模板类必须来自QObject
- Q_OBJECT宏不能在模板类中使用
- 不能在此类中定义信号和插槽-所有信号和插槽都必须在父类中
您可以在QFutureWatcher类的头中看到实现示例。
Qt的内部Singal/Slot概念有合理的替代方案吗?
如果您只需要对Qt::DirectConnection使用模拟,例如,这里的任何实现都是合适的。如果你也需要Qt::QueuedConnection,我不知道没有额外代码的直接模拟。例如,Qt::QueuedConnection可以通过boost::信号和boost::asio对象来实现。
我读过关于boost::signals2的文章,但不知道它是否经过了预处理。
正如我理解你的问题,升压信号的预处理需要,如果不支持可变模板。来自升压信号.hpp文件:
#ifdef BOOST_NO_VARIADIC_TEMPLATES
#include <boost/signals2/preprocessed_signal.hpp>
#else
#include <boost/signals2/variadic_signal.hpp>
#endif
看看sigslot。它与Qt信号/插槽语法非常相似,并且是纯C++:
class Switch
{
public:
signal0<> Clicked;
};
class Light : public has_slots<>
{
public:
void ToggleState();
};
Switch sw;
Light light;
sw.Clicked.connect(&light, &Light::ToggleState);
相关文章:
- 运行同一解决方案的另一个项目的项目
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Project Euler问题4的错误解决方案
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- 透视视图的任何解决方案 openGL qt.
- Qt中C++构建器的TS选择替代方案
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 使用Java的Android QT开发 - 替代方案
- 如何面对许多客户特定的GUI变体,寻找Qt的替代方案
- Qt 创建者,跟踪:不允许操作.什么是永久解决方案
- Qt:typeid备选方案
- 信号/插槽概念Qt和模板..备选方案
- QT是我的跨平台应用程序的正确解决方案吗?
- Qt水平布局的多线替代方案
- Mac上的Qt是否有Cocoa Sourceview的替代方案
- 有没有类似Qt的替代方案