Qt中Lambda表达式的值传递改变?

 想做一个三国杀的Qt版,pai 是继承 QPushButton类型的,shoupai[0]是pai*类型的。GameScene是继承QWidget类型的。

void wujiang::Wuzhong( pai* A[104], int* x, pai* B[104], int* y,GameScene *wid)
{
    qDebug()<<"Wuzhong前的牌堆数"<<*x;
 …………
    connect(this->shoupai[0],&pai::clicked,this,[=](){
        qDebug()<<"Wuzhong后的牌堆数"<<*x
    });
…………
}

中途x的指向和值都没有改变。

但两次x不一样

第一次是正确的,第二次就完全不对了。

请教大神!谢谢。

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

我也在学qt,不太清楚

qt编译太阳神三国杀
编译前置条件

qt环境本文环系统包括win10(qt5.14),deepinv15(qt5.9.9)
g++编译,本文win10采用的是mingw64编译器

1.下载源码github源码,下载比较慢的去gitee找找

2.下载qt,win和linux自己操作,版本大于5.3就行

3.打开qtCreator,选中源码的.pro文件

4.开始编译

  • 下载swig

  • 编译swig

  • win10的直接下载可执行版,deepin下载源码,直接 sudo make install

  • 利用swig产生sanguosha_wrap.cxx文件

  • #win10的命令,注意打开cmd的位置为swig所在目录,后面是源码的sanguosha.i位置
    swig.exe -c++ -lua E:\qt\workspace\space2\QSanguosha\swig\sanguosha.i
    
    #deepin,我直接吧刚刚编译的可执行程序拷贝到源码的sanguosha.i 同一目录下执行命令
    swig -c++ -lua ./sanguosha.i 

    qt编译源码

  • 1.QSanguosha.pro文件修改
    #前三行
    TARGET = QSanguosha
    QT += network widgets sql qml quick core gui //新增一些模板
    #!winrt:QT += declarative  这个注释,因为5.9以上没有这个模块了
    
    #弟396行,win10的需要改一下
        else:LIBS += -lfmodex
        改为else:LIBS += -lfmodex64,这个听说是搞声音的包,具体看自己的编译器位数
    2.开始编译会有很多报错,这里修改qt升级不谦容的报错
    QSanguosha\src\ui目录下面 roomscene.h文件修改,做出如下修改
    #ifndef Q_OS_WINRT
    
    //#include <QDeclarativeEngine>,这三个新的qt没有了
    //#include <QDeclarativeContext>
    //#include <QDeclarativeComponent>
    #include<QQmlEngine>
    #include<QQmlContext>
    #include<QQmlComponent>
    #endif
    
    #define QDeclarativeEngine QQmlEngine,下面用到了,为例避免修改去一个别名
    #define QDeclarativeContext QQmlContext
    #define QDeclarativeComponent QQmlComponent
    
    上面修改完,deepin基本没啥问题,win10可能会出现有的类找不到,从报错信息点进去,少了什么类直接加,比如提示QButtonGroup未定义,就去上面加上#include<QButtonGroup>

    动态库移动至编译的位置
     

    modex在源码里面就有,freetype.dll可以直接下载也可以下载源码编译,据说是字体的依赖

    win10建议直接下载dll文件gitee下载位置

    deepin可以去源码下面找fmodex.so,在lib/linux里面找,找到之后打开终端执行

  • sudo mv fmodex.so /usr/lib    #这样为了方便程序可以找到这个依赖,注意先去/usr/lib检查一下有没有同名的,避免覆盖
    
    #freetype的安装
    下载地址 https://mirror.yongbok.net/nongnu/freetype/freetype-2.10.0.tar.gz
    2.解压
    3.编译安装,执行命令如下
    ./configure
    sudo make install

    语言包的编译

  • 进入源码的builds/sanguosha.ts
    win10,进入qt的bin目录执行如下命令
    lrelease.exe sanguosha.ts -qm sanguosha.qm
    
    deepin 同上,使用界面操作如下
    
    
    下面显示用图形操作,
    复制sanguosha.qm和qt_zh_CN.qm(源文件跟目下有)到编译的exe文件处,deepin方法可执行文件同级目录
    

    复制资源到可执行文件所在目录,

  • ai-selector
    audio
    builds
    ddiy
    font
    hero-skin
    image
    lang
    lib
    lua
    resource
    rule
    skins
    

     

  • 点击release运行,win10下面如果少了什么dll就直接去qt的bin目录下面找,复制到exe文件同级就行,想要在桌面快捷启动发送一下快捷方式就行,deepin可以直接创建一个桌面快捷方式启动,不会的deep创建桌面快捷启动方式

  • 运行效果图:

  • 玩online花钱还不爽,找到了这个开源的项目,后面可能会用这个练练手,玩一下qt,改改什么武将之类的。

    完!