标签:debug 添加 src public 处理机 cli 函数 声明 define
在现代的 GUI 应用程序开发当中,主要分为两步:1.编写用户界面;2.处理用户操作后而产生的消息(编写消息处理函数来处理用户事件而产生的系统消息)
GUI应用程序是针对我们用户的,用户就会对GUI程序中的一些组件,比如:按钮,对话框等等做一些操作,当用户做了这些操作之后,首先知道这个用户事件的是操作系统
,操作系统就会将用户的操作的翻译成应用程序消息,并且把这个消息发送给对应的应用程序。应用程序收到这个消息之后就会调用事先编写好的消息处理函数
如果我们不关心中间的细节,简单的看开始和结束,就是用户做了一个操作,我们应用程序的某个函数就会被调用。
答:用字符串来描述消息
答:使用connet函数
信号到槽的连接必须放生在两个 Qt 类对象之间!
Qt 是基于C++的,Qt 又扩展了C++,在Qt里面引进了几个核心的关键字
必须在类声明的开始处加上 Q_OBJECT
分析connet函数:连接信号与槽,将b这个按钮对象的click消息,这个click消息时一个预定义的消息,在Qt内库里面就已经定义好了,当按钮对象被点击了之后就会发送这个消息,现在我们通过connet函数将这个消息映射到a这个对象的quit成员函数上。那么映射之后click消息发生的时候quit函数就会被调用。
第一步:我们自己实现的Refactoring这个间接继承自QObject
第二步:在类的声明最开始处使用Q_OBJECT
第三步:声明槽(消息处理函数)时使用slots关键字,且槽与信号在函数签名上必须一致
第四步:connet连接,将二十个按钮连接到同一个消息处理函数
测试输出
答:之所以我们消息处理函数有那么一丁点的特别,特别之处在于我们可以在消息处理函数内部调用sender这样的函数
Refactoring_Calculator.h文件
#ifndef REFACTORING_CALCULATOR_H
#define REFACTORING_CALCULATOR_H
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
class Refactoring_Calculator : public QWidget
{
Q_OBJECT
private:
QLineEdit* m_edit;
QPushButton* button_array[20];
Refactoring_Calculator();
bool construct();
private slots:
void OnButtonClicked();
public:
static Refactoring_Calculator* NewInstance();
void show();
~Refactoring_Calculator();
};
#endif // REFACTORING_CALCULATOR_H
Refactoring_Calculator.cpp文件
#include "Refactoring_Calculator.h"
#include <QDebug>
Refactoring_Calculator::Refactoring_Calculator() : QWidget(NULL, Qt::WindowCloseButtonHint)
{
}
bool Refactoring_Calculator::construct()
{
bool ret = true;
const char* button_name[20] =
{
"7", "8", "9", "+", "(",
"4", "5", "6", "-", ")",
"1", "2", "3", "*", "<-",
"0", ".", "=", "/", "C",
};
m_edit = new QLineEdit(this);
if( m_edit != NULL )
{
m_edit->move(10, 10);
m_edit->resize(240, 30);
m_edit->setReadOnly(true);
}
else
{
ret = false;
}
for(int i=0; i<4; i++)
{
for(int j=0; j<5; j++)
{
button_array[j + 5*i] = new QPushButton(this);
if( button_array[j + 5*i] != NULL )
{
button_array[j + 5*i]->resize(40, 40);
button_array[j + 5*i]->move(10 + 50*j, 50 + 50*i);
button_array[j + 5*i]->setText(button_name[j + 5*i]);
connect(button_array[j + 5*i], SIGNAL(clicked()), this, SLOT(OnButtonClicked()));
}
else
{
ret = false;
}
}
}
return ret;
}
Refactoring_Calculator* Refactoring_Calculator::NewInstance()
{
Refactoring_Calculator* ret = new Refactoring_Calculator();
if( !(ret && ret->construct()) )
{
delete ret;
ret = NULL;
}
return ret;
}
void Refactoring_Calculator::show()
{
QWidget::show();
setFixedSize(width(), height());
}
void Refactoring_Calculator::OnButtonClicked()
{
QPushButton* btn = (QPushButton*)sender();
qDebug() << "OnButtonClicked()";
qDebug() << btn->text();
}
Refactoring_Calculator::~Refactoring_Calculator()
{
if( m_edit != NULL )
{
delete m_edit;
}
for(int i=0; i<4; i++)
{
for(int j=0; j<5; j++)
{
if( button_array[j + i*5] != NULL )
{
delete button_array[j + 5*i];
}
}
}
}
main.cpp文件
#include <QtGui/QApplication>
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include "Refactoring_Calculator.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Refactoring_Calculator* cal = Refactoring_Calculator::NewInstance();
int ret = -1;
if( cal != NULL )
{
cal->show();
ret = a.exec();
delete cal;
}
return ret;
}
标签:debug 添加 src public 处理机 cli 函数 声明 define
原文地址:https://www.cnblogs.com/luosir520/p/12772134.html