Qt5菜鸟入门(2) 连接信号槽和信号小例子

来源:互联网 发布:广电网络网格化方案 编辑:程序博客网 时间:2024/06/04 19:43
Qt里面信号和信号槽的连接也是十分重要的内容,一般采用的是connect函数,格式大概是:

connect(button,SIGNAL(clicked()),this,SLOT(incrementCount())); 它的意思是当收到点击信号时,就会执行incrementCount()函数。连接还是比较方便的,Qt中的this指针式是指向类本身的一个指针。

    今天编写的例子:实现一个按钮功能,每次点击的时候,数字就会+1,实现的窗口为:

实现的重点在于每次点击的时候他会+1这个功能。给出的实现方法是每次点击之后就更新一下label(我原来以为是每次直接再显示一个label来覆盖原来的label,后来才看出来不是。。。),确实是更新。

实现代码如下:

// clickcounter.h

#ifndef CLICKCOUNTER_H
#define CLICKCOUNTER_H
#include <QPushButton>
#include <QLabel>
class ClickCounter : public QWidget
{
    Q_OBJECT
public:
//    ClickCounter(QWidget *parent =0, const char *name=0);
    ClickCounter(QWidget *parent =0,Qt::WindowFlags name=0);
public slots:
    void incrementCount();
private:
    int counter;
    QLabel *label;
    QPushButton *button;
};
#endif
//clickcount.cpp

#include <stdio.h>
#include "clickcouter.h"
// ClickCounter::ClickCounter(QWidget *parent,const char *name):QWidget(parent,name)
 ClickCounter::ClickCounter(QWidget *parent,Qt::WindowFlags name):QWidget(parent)
 {
     setMinimumSize(240,250);
     setMaximumSize(240,250);
     counter=0;
     button = new QPushButton("add one please ",this);
     button->setGeometry(10,10,230,110);
     label=new QLabel("0",this);
     label->setGeometry(30,150,180,80);
     label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
     connect(button,SIGNAL(clicked()),this,SLOT(incrementCount()));
 }
 void ClickCounter::incrementCount()
 {
     char str[30];
     sprintf(str,"%d",++counter);
     label->setText(str);
 }
//main.cpp

#include "clickcouter.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    ClickCounter clickCount;
    app.setActiveWindow(&clickCount);
    clickCount.show();
    
    return app.exec();
}

运行的结果如图:基本实现了所需要的功能。

需要注意的地方为:

1.QWidget::QWidget里的参数类型,原例(点击打开链接)中给出的类型为

ClickCounter(QWidget *parent =0, const char *name=0);
这个运行不成功,错误为:C:\Qt\Qt5.1.0\Tools\QtCreator\bin\ClickCounter\clickcount.cpp:6: 错误:C2664: “QWidget::QWidget(QWidget *,Qt::WindowFlags)”: 不能将参数 2 从“const char *”转换为“Qt::WindowFlags”无构造函数可以接受源类型,或构造函数重载决策不明确。  
解决方法是将cons char* 类型改写为Qt::WindowFlags类型。(不知道为什么Qt bible里也是这么写的)
2.connnect里的SIGNAL(clicked)不要写错了。。我第一次写成了SIGNAL(click)这样也能通过编译,但是每次点击之后他并不增加。还没找到它们俩的功能区别。



0 0