07 自定义信号与槽
来源:互联网 发布:巨人网络股票吧 编辑:程序博客网 时间:2024/05/30 07:14
自定义信号与槽必须要:
1. 用一个头文件, 一个源文件来描述一个类.
.h头文件用于定义类里有什么属性成员,函数成员(不实现函数体)等。
类的函数成员在.cpp源文件里实现函数体.
2. 在类的private段里写宏<Q_OBJECT>编译出现mywin.cpp:5: undefined reference to `vtable for MyWin' 这种问题时,调整下pro工程管理文件里: QT += 库的顺序即可. (QT的老bug)
一. 自定义槽
槽实际上就一个函数,只需声明为槽即可. 槽函数可以分权限.
例如实现一个槽函数,当按钮按下时弹出框:
mywin.h
#ifndef MYWIN_H#define MYWIN_H#include <QWidget>#include <QPushButton>class MyWin : public QWidget { Q_OBJECTprivate: QPushButton *btn;public: MyWin(QWidget *parent=NULL); ~MyWin();public slots: void myslot();};#endif // MYWIN_H
mywin.cpp
#include "mywin.h"#include <QMessageBox>MyWin::MyWin(QWidget *parent) : QWidget(parent){ btn = new QPushButton(this); btn->setText("hello"); btn->setGeometry(0, 0, 100, 60); connect(btn, SIGNAL(pressed()), this, SLOT(myslot())); resize(640, 480);}MyWin::~MyWin(){ delete btn;}void MyWin::myslot(){ QMessageBox::critical(this, "error", "power off");}
main.cpp
#include <QApplication>#include "mywin.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MyWin win; win.show(); return a.exec();}
二. 自定义信号
自定义信号其实就是声明一个函数的原型,不实现它的函数体. 信号不能指定权限。而且自定义的信号不会自动发出, 只能自己写代码来发出信号。
修改上面的例子,增加一个mysig(int)信号,当按钮按下时,发出信号并传参数.
mywin.h
class MyWin : public QWidget { Q_OBJECTprivate: QPushButton *btn;signals: void mysig(int val);public: MyWin(QWidget *parent=NULL); ~MyWin();public slots: void myslot(); void myslot2(int val); //用于连接信号mysig};
mywin.cpp
MyWin::MyWin(QWidget *parent) : QWidget(parent){ btn = new QPushButton(this); btn->setText("hello"); btn->setGeometry(0, 0, 100, 60); connect(btn, SIGNAL(pressed()), this, SLOT(myslot())); connect(this, SIGNAL(mysig(int)), this, SLOT(myslot2(int))); resize(640, 480);}MyWin::~MyWin(){ delete btn;}void MyWin::myslot(){ QMessageBox::critical(this, "error", "power off"); static int n = 0; //发出信号mysig(int) emit mysig(n++);}void MyWin::myslot2(int val){ qDebug() << val ;}
0 0
- 07 自定义信号与槽
- 自定义信号与槽
- Qt 自定义信号与槽
- Qt 自定义 信号与槽
- pyqt自定义信号与槽
- qt学习_自定义信号与槽
- Qt 信号与信号,信号与槽
- Qt自定义信号槽
- 自定义信号槽
- Qt自定义信号槽
- 自定义信号槽
- 自定义信号和槽
- 自定义信号槽
- 自定义信号和槽
- 自定义信号和槽
- Qt 自定义信号槽
- 自定义信号槽
- Qt编程之自定义信号与槽(二)
- caffe调试mnist 和 cifar10
- linux中快速清空文件内容的几种方法
- C语言中#define中的一些特殊用法
- 软件设计原则(六)迪米特法则 -Law of Demeter
- 设计模式之工厂设计模式和抽象工厂
- 07 自定义信号与槽
- scrollview 使用笔记
- 时间戳与时间
- ImageView的ScaleType属性
- 安装TensorFlow
- 字典树
- 如何用WebStorm来调试TypeScript编译出来的JavaScript
- JQuery中 .val() .text() .html()方法的区别
- kudu源码分析之二传输者transfer