Qt图形界面编程入门(1)——习题3.2 信号和槽

开始学习Qt的图形界面编程,买了清华大学出版社的《Qt图形界面编程入门》学习,做第三章的习题2。

题目

编写程序,一个对话框内有一个标签和一个按钮,标签对象初始显示0,每次单击按钮,标签显示的数字就加1。

思路

不需要传递内容,那么按钮信号用clicked,创建一个自定义的QLabel的派生类,添加一个AddNum函数,无参数。

代码

新建一个无UI向导的Dialog应用。

  • 头文件MyLabel.h
#ifndef MYLABEL_H
#define MYLABEL_H

#include 
#include 

class MyLabel:public QLabel
{
    Q_OBJECT          //使用信号槽机制的类必须在头文件中嵌入宏Q_OBJECT,且该类必须为QObject派生类

public:
    //构建函数
    MyLabel(const QString &text, QWidget *parent=0):QLabel(text,parent){}
    //析构函数
    ~MyLabel(){}
public slots:
    void AddNum()
    {
        QString str = this->text();
        QString str_num = str.mid(12);
        int num = str_num.toInt();
        ++num;
        QString str_new = str.left(12) + QString::number(num);
        this->setText(str_new);
        this->adjustSize();//自适应调整标签的大小
    }

};


#endif // MYLABEL_H
  • 头文件dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include 
#include 
#include "MyLabel.h"

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    MyLabel* label;
    QPushButton* btn;
};

#endif // DIALOG_H
  • 源文件dialog.cpp
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(300,300);
    label = new MyLabel("click time: 0",this);
    btn = new QPushButton("click me",this);
    label->move(125,150);
    btn->move(125,110);
    connect(btn,SIGNAL(clicked()),label,SLOT(AddNum()));//连接信号和槽,信号函数与槽函数的参数列表必须完全相同
}

Dialog::~Dialog()
{
}
  • 主函数main.cpp
#include "dialog.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();//执行应用
}

结果

Qt图形界面编程入门(1)——习题3.2 信号和槽_第1张图片

你可能感兴趣的:(Qt图形界面)