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
- Qt5菜鸟入门(2) 连接信号槽和信号小例子
- QT5 信号槽小知识
- QT5 信号槽连接机制
- Qt5信号和槽机制
- Qt5信号和槽机制
- Qt5.8.0信号和槽
- Qt5信号和槽机制
- Qt5 lambda表达式连接QTcpServer信号槽
- QT5 信号槽
- Qt5 UI信号、槽自动连接的控件重名大坑
- Qt5信号与槽C++11风格连接简介
- Qt入门(18)——使用信号和槽连接控件
- Linux信号通信小例子
- QT5之信号与槽
- Qt5 信号槽新写法
- QT4和QT5信号和槽的区别
- QT(4)信号、SLOT和QMap - Addressbook例子2
- 《Qt5学习笔记3》QApplication、信号和槽简介
- FreeBSD 目录结构
- FreeRTOS(V8.0.1)系统之List
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
- HDU 1873 看病要排队
- hdu-2255(KM算法模板)
- Qt5菜鸟入门(2) 连接信号槽和信号小例子
- uget+aria2
- 开关控制LED的亮灭
- 自然语言处理(NLP)常用开源工具总结----不定期更新
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端一)
- Codeforces Round #274 (Div. 2) D
- iOS 如何修改App图标和App显示在iPhone的名字
- Java垃圾回收机制
- C语言中交换两个变量的值