02 2014 档案
摘要:话接上篇。通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽。 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功能的函数。如QWidget::show(),需要写一个在栈中取出widget指针,widget调用show()函数的方式。如果希望在Lua中调用大量函数,就需要编写大量的C++实现函数。有没有什么省时省力的好方法呢? 上一篇中我们实现了在Lua脚本中连接信号与槽。我们只是传过去了两个QObject的对象,和两个字符串的函数名。我们并没有具体实现那个函数,但是槽函数顺利执行了。这给了笔者启发...
阅读全文
摘要:话接上文。笔者为了方便使用Lua,自己编写了一个Lua的类。主要代码如下: QLua.h 1 #ifndef QLUA_H 2 #define QLUA_H 3 4 // own 5 #include "include/lua.hpp" 6 7 // qt 8 #include 9 #include 10 #include 11 12 #include 13 #include 14 #include 15 #include 16 17 class QLua : public QObject18 {19 Q_OBJECT20 public:21 QLua(QObjec...
阅读全文
摘要:话接上篇。成功配置好Qt+Lua+toLua后,我们可以实现在Lua脚本中使用各个Qt的类。直接看代码吧。#include "include/lua.hpp"#include #include #include #include static int tolua_new_QWidget(lua_State* pState){ QWidget* widget = new QWidget(); tolua_pushusertype(pState, widget, "QWidget"); return 1;}static int tolua_delete_QW
阅读全文
摘要:偶然间看到Lua这种脚本语言,有点兴趣,简单学习了一下。 发现Lua与C++之间可以实现非常强的交互性。Lua中可以使用C++中的函数,C++中也可以使用Lua中的函数。由此可以引发出很多奇思妙想了。 简单来说,Lua动态的特性补充了C++的功能。当然,也看你具体怎么用。 笔者经常使用Qt,故准备将Qt和Lua结合在一起。想象一下在Lua脚本中调用如下代码:w = QWidget:new()w:show() 然后弹出一QWidget的窗口,是多么感人的一件事情呀。 好,下面开始配置环境吧。 1. 下载Lua 5.1。目前的最新版本是5.2,但是因为使用到的toLua不支持Lua...
阅读全文
摘要:引子: 今天上嵌入式课程时,老师讲到Linux的文件系统,讲的重点是Linux中对于nand flash的ECC校验和纠错。上课很认真地听完,确实叹服代码作者的水平。 晚上特地下载了Linux最新的内核,找到了作者自己写的那篇文章(路径为"linux-3.13.5\Documentation\mtd\nand_ecc.txt"),现摘录如下:Introduction============Having looked at the linux mtd/nand driver and more specific at nand_ecc.cI felt there was roo
阅读全文
摘要:State Machine,即为状态机,是Qt中一项非常好的框架。State Machine包括State以及State间的Transition,构成状态和状态转移。通过状态机,我们可以很方便地实现很多东西。Qt的Animation框架也是基于状态机的。 在Qt自带的帮助文档中搜索State Machine,会有一篇官方的说明文档。笔者的Qt5.2自带的文档如下:The State Machine FrameworkThe State Machine framework provides classes for creating and executing state graphs. T...
阅读全文
摘要:最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本《C++ GUI Qt4 编程》来学习。 这本书的第14章是关于多线程的知识,使用的Qt版本是Qt4.x。在下用的是最新的Qt 5.2,所以代码上有一些不兼容,稍加修改就可以运行了。 Qt的多线程简单来说就是继承QThread类,重载run()函数,start()启动线程。首先来看下书上的第一个例子:(修改版的代码已上传,点击下载)class Thread : public QThread{ Q_OBJECTpublic: Thread(QString message = "", QObject *pare
阅读全文
浙公网安备 33010602011771号