信号槽的疑问

在QtCreator中手动添加signal和slot

感觉做有UI的程序时,用qtCreator自带的信号及槽管理方便是方便,但一些功能还不具备,比如:

1.在转到槽编辑时,函数名固定

2.在UI中进行信号与槽编辑时,找不到自己添加的槽,并且不清楚QtCreator在背后做了些什么,虽然知道ui有uic来编译,但应该在代码中呈现出来的代码,并没有呈现出来,比如:两个QTextEdit,一个textChanged(QString)时,另一个setText(QString),这在代码在根本没有体现,在用Designer生成的头文件中也没体现。

3.在添加槽时,感觉步骤过多

环境:

QtCreator2.6.1

Qt 4.8.3

win7

具体步骤:

1.在头文件中添加singal和slot的定义

2.在构造函数中添加相应的connect,比如对一个QAction添加一个动作

connect(ui->actionBackGround,

            SIGNAL(triggered()),
            this,
            SLOT(actionBackGround_triggered()));

我认为手动添加是有好处的,比如,使UI程序更像console程序,代码阅读起来比较好,管理起来也比较方便,让人知其然,也知其所以然。

http://hakuyo.blog.51cto.com/6207832/1127551

疑问:

http://www.qtcn.org/bbs/read-htm-tid-57206.html

时间: 2024-12-05 12:49:32

信号槽的疑问的相关文章

信号槽 与事件区别

转自网络 仔细来看,事件与信号其实并无多大差别,从我们对其需求上来说,都只要能注册事件或信号响应函数,在事件或信号产生时能够被通知到即可.但有一项区别在 于,事件处理函数的返回值是有意义的,我们要根据这个返回值来确定是否还要继续事件的处理,比如在QT中,事件处理函数如果返回true,则这个事件处理 已完成,QApplication会接着处理下一个事件,而如果返回false,那么事件分派函数会继续向上寻找下一个可以处理该事件的注册方法.信号处 理函数的返回值对信号分派器来说是无意义的. 另外还有一

VS2008 Qt Designer 中自定义信号槽

一.Qt Designer自定义槽函数 发现:在VS2008 +Qt4.7  中打开ui文件,所用的英文QT Designer工具,没有转到槽函数的功能,不如QtCreator自带的QtDesigner功能齐全,只能Editor已有的信号槽. 发现:在QtCreator中右击某个控件 有"转到槽"功能,就会在.h和.cpp文件中生成我们的自定义槽函数void on_openButton_clicked() 解决方法:在VS2008中,选择某个项目,选择菜单Qt/Creat basic

Qt 编程指南 3 信号槽

https://qtguide.ustclug.org/ 忽略自动补全报的错 在图形界面修改过后,自动补全未必及时读取新加入的控件的信息 1 代码自写 1 在主窗口头文件Qt_tset1.h里声明这个函数FoodIsComing() 2 在主窗口函数文件Qt_tset1.cpp里实现这个函数体FoodIsComing() 3 创建链接执行函数.控件动作触发事件,然后调用函数执行 例如: 按键 的 单击动作 触发 主窗体 中的    FoodIsComing() 函数,并执行. 2 图形 所谓信号

QT子线程与主线程的信号槽通信

最近用QT做一个服务器,众所周知,QT的主线程必须保持畅通,才能刷新UI.所以,网络通信端采用新开线程的方式.在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦.网上提供了很多同一线程不同类间采用信号槽通信的方式,但是并不完全适合线程间的信号槽通信,这主要体现在自定义消息的传递上. 首先我们看看一般的方式: testthread.h 文件 #ifndef TESTTHREAD_H #define TESTTHREAD_H #include <QThread> #include "ms

PyQt5 笔记(05):信号/槽

PyQt 的很多类都内置了信号和槽.下图是 Qt 官方文档对 QThread 类中包含的信号/槽的描述: 一.信号/槽 都是内置的 请看一个最简单的程序: 按钮点击后,窗口关闭 代码: class Test(QDialog): def __init__(self, parent=None): super().__init__(parent) btn = QPushButton('关闭', self) btn.clicked.connect(self.close) # ① 对语句①的说明: 信号

在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)

在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: cannot send events to objects owned by a different thread 解决方案是使用信号槽,就是在线程里不断的发信号,UI线程的槽函数不断的接受信号并做处理: So as a solution I would propose the following: Defi

用ISO C++实现自己的信号槽(Qt另类学习)

qtc++objectsignalclassstring 目录(?)[-] Qt信号与槽 引入元对象系统 建立信号槽链接 信号的激活 槽的调用 全家福 零零散散写在后面 Q_OBJECT Connection 其他 有网友抱怨: 哪个大牛能帮帮我,讲解一下信号槽机制的底层实现? 不要那种源码的解析,只要清楚的讲讲是怎么发送信号,怎么去选择相应的槽,再做出反应.也就是类似于一个信号槽的相应流程...求解啊!!! 看了源码,真的是一头雾水...撞墙的心都有了~~~~ 本文使用 ISO C++ 一步一

猜测:信号槽的本质是使用Windows的自定义消息来实现的

在不断执行: void MyTool::DeleteAllFiles(){ for (i = 0; i <= n - 1; i++) { // do something }}在for循环没有执行完毕的情况下,外部给这个类发信号,根本接受不到信号.就非得这样写: void MyTool::DeleteAllFiles(){ for (i = 0; i <= n - 1; i++) { QApplication::processEvents(); // do something }}或者:void

Qt connect parent widget 连接父控件的信号槽

Qt中的信号槽系统是不同类中间传递数据的神器,如果连接父子空间之间的信号槽很重要,在父类中实例化子类的时候一定要注意将父类连上,不然信号槽无法使用,比如若子类是个对话框Dialog类,一定不要忘了加this QtClass *qc = new QtClass(this); qc->exec(); 然后如果需要连接到父控件的槽函数,只需在子类的构造函数中加一句: connect(this, SIGNAL(signal()), parentWidget(), SLOT(slot()));