实现可编写脚本的按钮行为
Implementing scriptable button behavior
我正在为我的C++项目开发自定义轻量级UI库,我对实现控件的行为有疑问。
目前,我有从提供的文件创建控件实例的系统,因此图形表示,文本,尺寸和其他参数在外部文件中定义。关于按钮和其他交互式控件:我有基按钮类,对于每个按钮,我都在创建派生类,其中包含自己的行为相关方法(onClick(( 等(的实现,请参见伪代码段:
class Button
{
public:
Button();
virtual void onClick();
};
class newButton : public Button
{
void onClick()
{}//specific implementation
};
我正在寻找在外部描述行为(可能是脚本语言(并将其插入编译时基本按钮的特定实例的方法,所以我不需要创建按钮的子类,并且按钮/组件可以在外部文件中完全描述。任何挑战或建议将不胜感激。
谢谢
好吧,我想你遇到了另一个XY问题:使用运行时对象多态性无法解决你的愿望。尽管它使C++代码不必关心使用哪个特定实现,并且可以在运行时接受新的未知解决方案,但这些新解决方案仍然必须使用C++编译器进行编译,并且符合基类定义和C++实现(您的编译器,如 gcc 或 MSVC(运行时多态性的特定细节。
由于我假设您不希望这样做,这也是有道理的,并且是一种在C++世界中流行的模式(参见QML或Javascript/C++混合体(,因此您有一些选择。
要么在C++中实现所有基本行为构建块(当然可以使用运行时多态性甚至编译时多态性(,然后在运行时根据UI描述语言简单地组合它们。要解析所谓的DSL,即UI描述语言,您可以使用像boost spirit这样的库。
如果你真的要编写UI逻辑的脚本,而不是简单地描述它,你必须设计和实现一个完整的编程语言,它也与你的C++实现运行时对象多态性兼容。我会发现这是一项非常艰巨而漫长的任务。
但不要失望,这是现成的解决方案,如Javescript/C++,以使用本机节点模块的反应原生和电子的形式,或QML/Qt或lua,一种脚本语言,专门设计用于其他编程语言。
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何通过cpp程序运行shell脚本
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 在程序中编写脚本来编写和编译代码
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- 如何在c++中使用system()来运行包含空格的python脚本
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- SDL 操纵杆按钮按下/C++
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 实现可编写脚本的按钮行为