V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ligiggy
V2EX  ›  C++

Qt 萌新,问一下 Connect 的问题

  •  
  •   ligiggy · 2020-05-21 10:00:29 +08:00 · 1470 次点击
    这是一个创建于 1408 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平台:Qt+VS

    目的:简单测试信号与槽。

    问题:有两个 pushbutton,一个实现简单加法,一个实现关闭窗口。

    • 将关闭窗口的 connnect 函数放在 Setupui 前面,在运行的时候就会引起内存冲突,放到后面就不会。
    • 将计算加法的 connect 函数放在 Setupui 前面,在运行的时候反而不会引起内存冲突。

    尝试:尝试过调换二者的位置,好像一样会有问题。

    请教一下,原因是什么?

    第 1 条附言  ·  2020-05-21 13:45:43 +08:00
    QtGuiApplication1::QtGuiApplication1(QWidget *parent)
    	: QMainWindow(parent)
    {
    	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(Calculate()));
    
    	connect(ui.btn_CloseWindow, SIGNAL(clicked()), this, SLOT(CloseWindow()));
    
    	ui.setupUi(this);
    
    }
    
    6 条回复    2020-05-22 06:56:26 +08:00
    weyou
        1
    weyou  
       2020-05-21 13:05:40 +08:00 via Android
    show me the code
    ligiggy
        2
    ligiggy  
    OP
       2020-05-21 13:46:41 +08:00
    @weyou 可以看一下 Append 的部分。
    Close window()里面只是 this->Close();
    lwh0328
        3
    lwh0328  
       2020-05-21 14:31:31 +08:00
    没有完整的代码啊。。。。
    粗略的感觉,setupUi 这里会分配内存创建内容什么的,connect 放前面的话,可能有些 ui 没有被分配资源? CloseWindow() 可能涉及到 destroy 一些资源,这样可能会回收一些没有被分配资源的变量。Calculate() 我的理解是进到你的这个函数里做运算。
    weyou
        4
    weyou  
       2020-05-21 17:14:12 +08:00 via Android
    代码不全,猜想 setupUi 是 IDE 自动生成的代码吧,这个函数里一般都是创建控件,也就是说在 setupUi 调用之前,那些 button 还不存在呢,你都已经开始去连接信号槽了,显然是有问题的啊
    newmlp
        5
    newmlp  
       2020-05-21 20:52:46 +08:00
    connect 连的对象必须先 new 出来才行
    ligiggy
        6
    ligiggy  
    OP
       2020-05-22 06:56:26 +08:00 via iPhone
    @newmlp 我把 pushbutton 的 connect 放前面没问题啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3552 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:49 · PVG 12:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.