吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 804|回复: 6
收起左侧

[求助] c++在qt里面的桌面开发按钮菜单点击触发都要通过信号槽来实现吗,感觉还是delphi方便

[复制链接]
dong555 发表于 2023-3-3 09:58
像按钮点击触发,菜单点击都要自己搭建信号和槽觉得有点麻烦,如果像delphi按钮控件点击一下就生成onclick事件直接编写方便多了。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
ciao21 发表于 2023-3-3 10:00
提示: 作者被禁止或删除 内容自动屏蔽
DEATHTOUCH 发表于 2023-3-3 10:10
对于一般的按钮等控件,可以用右键转到槽,不过对于动态生成的菜单或者控件,绑定起来确实不如Delphi方便。
 楼主| dong555 发表于 2023-3-3 10:12
DEATHTOUCH 发表于 2023-3-3 10:10
对于一般的按钮等控件,可以用右键转到槽,不过对于动态生成的菜单或者控件,绑定起来确实不如Delphi方便。

delphi是不是鼠标单击触发都是封装好的,看c++builder也是和delphi一样
DEATHTOUCH 发表于 2023-3-3 10:24
dong555 发表于 2023-3-3 10:12
delphi是不是鼠标单击触发都是封装好的,看c++builder也是和delphi一样

你可以看看Delphi VCL架构的源码,给你提供了一系列的OnXxx属性,就是一个函数指针,类型是
procedure OnXxx(Sender: TObject);
然后当你设置了这个属性后VCL就会自动调用你设定的函数。
比如
[Delphi] 纯文本查看 复制代码
procedure TForm1.OnBtnClick(Sender:TObject);
begin
  ShowMessage('Hello World');
end;

procedure TForm1.FormCreate(Sender:TObject);
begin
  Button1.OnClick:=@OnBtnClick;
  Button2.OnClick:=@OnBtnClick;
end;

这样两个按钮都绑定了这个OnBtnClick函数。

对于IDE双击就可以写实现的代码,这个绑定则是通过DFM文件实现的,VCL在加载的时候会自动读取并设置。

C++Builder是用了Delphi的架构,所以他们对C++进行了扩展来支持Delphi的property,而Qt是自己整了一套信号——槽的机制,不过总体架构二者很相似。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
dong555 + 1 + 1 谢谢@Thanks!

查看全部评分

Pojie1999.0909 发表于 2023-3-3 10:25
信号不用定义,鼠标右键go to slot就行了。你自定义的控件肯定得定义信号和槽,并且选择何时连接他们。
psvajaz 发表于 2023-3-4 08:41
本帖最后由 psvajaz 于 2023-3-4 08:49 编辑

方法一,纯代码编写页面:
在窗体创建后在构造函数中添加
[C++] 纯文本查看 复制代码
QMetaObject::connectSlotsByName(this);

然后在头文件中添加添加slots类型的方法,方法名的命名规则:
[C++] 纯文本查看 复制代码
void on_[objectname]_[event]()

其中[objectname]为控件名,[event]为事件名
如:控件名为btnOK,事件为点击事件
[C++] 纯文本查看 复制代码
void on_btnOK_clicked();


方法二,使用QtQt Creator中的设计选项进行页面开发
在所需要添加事件的控件鼠标右键菜单中,点击转到信号槽,然后在弹出窗体中选择需要绑定的信号槽即可
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表