找回密码
 立即注册
收起左侧

connect 自动连接的问题

12
回复
91
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2019-10-10 10:25:48 显示全部楼层 |阅读模式
10Qter豆
本人Qt菜鸟一枚,请各位大神指教一下,connect自动关联中遇到的问题。我在Widget类中,创建了QPushButton,把它对象名改成了myButton,再在对应cpp文件中写入void Widget:n_myButton_clicked()函数,点击myButton有反应;
但是我在MainWindow类中用同样的方式,怎么点击myButton没有反应,甚至不能点击myButton?
请大神指教!

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:116 天
连续签到:4 天
2019-10-10 11:29:07 显示全部楼层
1.检查下头文件那里有带    Q_OBJECT 宏么?
2.最好是显示的把连接槽写出来,connnect(this->mybutton,&QPushButton::clicked,this,&MainWindow::myButtonClicked);
在ui里面连接信号槽不是很直观,对程序阅读、维护不好,出现了问题还不好查找
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2019-10-10 12:56:06 显示全部楼层
zhuxianfei 发表于 2019-10-10 11:29
1.检查下头文件那里有带    Q_OBJECT 宏么?
2.最好是显示的把连接槽写出来,connnect(this->mybutton,&QPu ...

有Q_OBJECT宏的,我是初学Qt,我也知道这个方式连接信号与槽不好用,但是我想体验一下这种连接方式

点评

但是,你确定你的ui上是否有一个按钮控件名是mybutton? 正确的方式是直接在ui上拖一个PushButton,然后在这个按钮控件上右键点击 转到槽--->选择Clicked信号,这样Qt自动帮我们连接信号槽,也帮我们定义好槽函数。而  详情 回复 发表于 2019-10-10 13:55
回复

使用道具 举报

累计签到:116 天
连续签到:4 天
2019-10-10 13:55:39 显示全部楼层
fangyinfei2019 发表于 2019-10-10 12:56
有Q_OBJECT宏的,我是初学Qt,我也知道这个方式连接信号与槽不好用,但是我想体验一下这种连接方式 ...

但是,你确定你的ui上是否有一个按钮控件名是mybutton?
正确的方式是直接在ui上拖一个PushButton,然后在这个按钮控件上右键点击 转到槽--->选择Clicked信号,这样Qt自动帮我们连接信号槽,也帮我们定义好槽函数。而你是在构造函数里面new了一个button的变量,然后让它名字叫myButton,你是怎么将信号槽连接起来的呢?你确定ui里面有这个控件名么?
回复

使用道具 举报

累计签到:525 天
连续签到:1 天
2019-10-10 17:52:26 显示全部楼层
本帖最后由 Since 于 2019-10-10 17:54 编辑

第一个有反应,真的神奇呢,然后按钮还是一个局部变量,不是太利于你的理解,
可以加群,有人会给你讲的  点击链接加入群聊【Qt 萌新】:https://jq.qq.com/?_wv=1027&k=5DfJuyF
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2019-10-11 11:02:13 显示全部楼层
zhuxianfei 发表于 2019-10-10 13:55
但是,你确定你的ui上是否有一个按钮控件名是mybutton?
正确的方式是直接在ui上拖一个PushButton,然后在 ...

我附件传错了,这个附件是测试的代码,在widget类和mainwindow类中的代码,同样的方式,在widget中可以用,但是在mainwindow中就不能用。我也知道这种编写方式用的不多,但是我就是想体验一下这种用法而已,不然我用conncet也可以用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

我觉得你现在不是要纠结widget中可用,mainWindow中不能用这个问题了....QmainWindow也是继承Qwidget来的,能用都能用!你应该从你的代码中找到问题,比如版主大人说的局部变量的问题,局部变量的作用域只是在你那构  详情 回复 发表于 2019-10-11 15:03
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2019-10-11 11:17:14 显示全部楼层
Since 发表于 2019-10-10 17:52
第一个有反应,真的神奇呢,然后按钮还是一个局部变量,不是太利于你的理解,
可以加群,有人会给你讲的   ...

这有什么不好理解的?在构造函数中创建局部指针变量,再用了个this啊,又没什么东西
回复

使用道具 举报

累计签到:116 天
连续签到:4 天
2019-10-11 15:03:27 显示全部楼层
fangyinfei2019 发表于 2019-10-11 11:02
我附件传错了,这个附件是测试的代码,在widget类和mainwindow类中的代码,同样的方式,在widget中可以用 ...

我觉得你现在不是要纠结widget中可用,mainWindow中不能用这个问题了....QmainWindow也是继承Qwidget来的,能用都能用!你应该从你的代码中找到问题,比如版主大人说的局部变量的问题,局部变量的作用域只是在你那构造函数内有用,相当于你在界面上丢了一个谁也管不了,指挥不动的按钮,你后面还想去点击它,让它有反应,怎么可能?还有你说的this指针的问题,这个也不是随便乱指的,它可以去指类的私有变量、函数等,是类的有关东西,不是你随意定义一个局部变量,然后用个this去指,指不了的
回复

使用道具 举报

累计签到:116 天
连续签到:4 天
2019-10-11 15:31:42 显示全部楼层
附件是2种按钮连接方式,希望对你有帮助!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
7 天前 显示全部楼层
zhuxianfei 发表于 2019-10-11 15:03
我觉得你现在不是要纠结widget中可用,mainWindow中不能用这个问题了....QmainWindow也是继承Qwidget来的 ...

应该不是局部变量的问题,因为两个程序都是一模一样的局部变量,而且我qPushButton的点击也是发生在构造函数内的

点评

啊..........? 你的点击事件是发生在构造函数里面的? 你程序的界面才开始构造,你拿什么来点击按钮啊? 我觉得你刚学Qt还是把亚飞老师的那本Qt快速入门学习一遍吧,当初我也是照着那本书坚持下来的  详情 回复 发表于 7 天前
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
7 天前 显示全部楼层
zhuxianfei 发表于 2019-10-11 15:31
附件是2种按钮连接方式,希望对你有帮助!

是2种按钮连接方式?能具体解释一下吗?初学Qt
回复

使用道具 举报

累计签到:116 天
连续签到:4 天
7 天前 显示全部楼层
本帖最后由 zhuxianfei 于 2019-10-12 10:15 编辑
fangyinfei2019 发表于 2019-10-12 08:04
应该不是局部变量的问题,因为两个程序都是一模一样的局部变量,而且我qPushButton的点击也是发生在构造 ...

啊..........? 你的点击事件是发生在构造函数里面的? 你程序的界面才开始构造,你拿什么来点击按钮啊?
你是不是有这么个误区,认为程序运行时构造函数一直在运行?构造函数执行完了也是要退出的啊.....

我觉得你刚学Qt还是把亚飞老师的那本Qt快速入门学习一遍吧,当初我也是照着那本书坚持下来的
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
7 天前 显示全部楼层
zhuxianfei 发表于 2019-10-12 10:07
啊..........? 你的点击事件是发生在构造函数里面的? 你程序的界面才开始构造,你拿什么来点击按钮啊?
...

嗯,正在学习霍亚飞的《Qt Creator快速入门》,个人感觉这本书不是很好,学起来比较吃力,但又找不到好的教材,谢谢指点。
构造函数应该是创建完界面就关闭了的,这个我知道,鼠标点击事件是由信号和槽函数关联,这里面有个on_myButton_clicked函数就是响应鼠标点击事件的啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册