• 6269阅读
  • 4回复

[提问]Qt lua绑定 [复制链接]

上一主题 下一主题
离线yurenjimi
 

只看楼主 倒序阅读 楼主  发表于: 2014-01-21
关键词: tolua++
使用 tolua++    将 QObject/QWidget/QDialog/QPushButton 的某些函数绑定了一下


pkg 文件就是找到各自的头文件, 把不需要的删除掉.


测试代码 >>
  1. local w = QDialog()
  2. w:show()
  3. QObject:connect(w, '2accepted()', w, '1hide()')
  4. local size = QSize(1,2)
  5. print (size:width(), size:height())
  6. -- QPushButton --
  7. local button = QPushButton()
  8. --QObject:connect(button, '2pressed()', w, '1hide()')
  9. --button:show()


发现错误: 第十行
  1. error in function 'connect'.
  2.         argument #2 is 'QPushButton'; 'const QObject' expected.
  3.     stack[0] -> line -1 : unknown[[C] : line -1]
  4.     stack[1] -> line -1 : connect()[[C] : line -1]
但是第三行的connect表明, 这个lua的绑定是发生作用了的.


应该是判断不了 QPushButton 来自 QObject, 仔细看 QPushButton 的继承:
  1. class Q_GUI_EXPORT QPushButton : public QAbstractButton
来自 QAbstractButton, 但是 QAbstractButton 是纯基类
问题来了:
1) 纯基类在tolua++ 中不知道如何写绑定?
2) 怎么支持 lambda 表达式?
  1. QObject:connect(w, '2pressed()', function() print("sdf") end)




hello world!!
离线XChinux

只看该作者 1楼 发表于: 2014-01-22
没搞过 lua
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yurenjimi

只看该作者 2楼 发表于: 2014-05-23
  1. $#include "YY.h"
  2. class QObject
  3. {
  4.     static QMetaObject::Connection connect(const QObject *sender, const char *signal,
  5.                         const QObject *receiver, const char *member);
  6.     static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
  7.                         const QObject *receiver, const QMetaMethod &method);
  8.     inline QMetaObject::Connection connect(const QObject *sender, const char *signal,
  9.                         const char *member) const;
  10. }
  11. class  QWidget : public QObject, public QPaintDevice
  12. {
  13.     QWidget(QWidget* parent = 0);
  14.     void show();
  15.     void hide();
  16.     void setWindowTitle(const char*);
  17. }
  18. class  QPushButton : public QWidget
  19. {
  20.     QPushButton(QWidget *parent);
  21.     QPushButton(const QString &text, QWidget *parent);
  22.     void setText(const char *text);
  23.     QString text() const;
  24. }


connect 还不知道怎么弄
hello world!!
离线彩阳

只看该作者 3楼 发表于: 2014-05-24
看看有一个用Qt制作游戏叫做新神杀,里面的AI就是封装了Lua的。
上海Qt开发联盟,热忱地欢迎你的加入!
离线yurenjimi

只看该作者 4楼 发表于: 2014-07-14
谢谢

嗯, 找到了 github 地址, https://github.com/haveatry823/QSanguosha

作者下面还有一个项目是关于 ai 的.
hello world!!
快速回复
限100 字节
 
上一个 下一个