Qt常用知识点

001 信号重载

【Qt5解决方案】

应该用函数指针去解决这个问题

例如:

QSpinBox 的信号

两种使用函数指针的方式:

 
QSpinBox * spin = new QSpinBox(this);
QSlider * slider = new QSlider(Qt::Horizontal,this);
void (QSpinBox::* testSignal)(int) = &QSpinBox::valueChanged;
connect(spin,testSignal,slider,&QSlider::setValue);

还有一种

QSpinBox * spin = new QSpinBox(this);
QSlider * slider = new QSlider(Qt::Horizontal,this);
connect(spin,static_cast<void (QSpinBox::*)(int)> 
           (&QSpinBox::valueChanged),slider,&QSlider::setValue);

【Qt4解决方案】

编写代码的时候:

会有选项告诉你让你选哪个

connect(spin,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));

Qt4也有其局限性

1. 槽函数必须添加约束

public slots:
public slots: // 槽函数====
    void myslot();
    // 槽函数和信号是对应的,因为信号没有返回值,槽函数没有返回值,
    // 信号如果有参数,槽函数就可以有参数
    void changeWin();

2. SIGNAL函数是一种字符串转换函数,假设信号名写错了,例如上面

connect(spin,SIGNAL(valueChd(int)),slider,SLOT(setValue(int)));

这里编译期间并不会报错,只在运行期间报错,告诉我们找不到valueChd


说到信号与槽

信号必须通过关键字声明 

signals:
    //信号必须有这个关键字,来声明
    // 信号没有返回值。,但可以有参数
    // 信号就是函数的声明,只需要声明,不需要定义
    void mySignal();

使用这个信号的时候,是通过

emit mySignal();

猜你喜欢

转载自blog.csdn.net/baidu_40840693/article/details/83900294
今日推荐