开始学习Qt的图形界面编程,买了清华大学出版社的《Qt图形界面编程入门》学习,做第三章的习题2。
题目
编写程序,一个对话框内有一个标签和一个按钮,标签对象初始显示0,每次单击按钮,标签显示的数字就加1。
思路
不需要传递内容,那么按钮信号用clicked,创建一个自定义的QLabel的派生类,添加一个AddNum函数,无参数。
代码
新建一个无UI向导的Dialog应用。
- 头文件MyLabel.h
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
#include <QString>
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 <QDialog>
#include <QPushButton>
#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 <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();//执行应用
}
结果
更多推荐
Qt图形界面编程入门(1)——习题3.2 信号和槽
发布评论