如何把QLabel改成按钮 !!!

trustguan 2013-02-19 07:35:44
#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#include<QBitmap>
#include<QPixmap>
#include <QMouseEvent>
#include <QMessageBox>
#include <QLabel>
#include<QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);

QPixmap pm; pm.load(":/picture/Image/s.png");
ui->label->setGeometry(0,0,pm.width(), pm.height());
ui->label->setPixmap(pm);

int i=connect(this, SIGNAL(clicked()), this, SLOT(slotClicked())); //信号连接
qDebug()<<i<<endl;
}

Widget::~Widget()
{
delete ui;
}


void Widget::mousePressEvent(QMouseEvent *e)
{
int x = e->x();
int y = e->y();

//假如在QRect( 0, 0, 48, 48 )这个区域里(图片大小为48X48),就发出信号
if (x>0 && x<48 && y>0 && y<48){
emit clicked();
}
}

void Widget::slotClicked()
{
QMessageBox::about( this, "Mouse Example", "You have pressed mouse, exit now!");
close();
}


最后显示为0,证明那个槽连接不了,为什么会出现这种现象
...全文
856 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
岁小草 2013-02-21
  • 打赏
  • 举报
回复
int i=connect(this, SIGNAL(clicked()), this, SLOT(slotClicked()));//这个不需要了 if (x>0 && x<48 && y>0 && y<48) { emit clicked();//不需要用自定义信号了,直接在这里调用slotClicked()就可以啊。 }
醉过方知酒烈 2013-02-20
  • 打赏
  • 举报
回复
确定你的信号槽都声明了。不要用标准的信号,这个相当于是你自己的信号。 你自己定义一个信号,你那样写就是可以的。
__阿飞__ 2013-02-20
  • 打赏
  • 举报
回复
请参考我的博客,有篇文章是: Qt QLineEdit QLabel添加clicked事件 http://www.jyguagua.com/?p=668 看完你就懂怎么去实现QLabel的点击事件了.
jdwx 2013-02-20
  • 打赏
  • 举报
回复
引用 2 楼 trustguan 的回复:
引用 1 楼 jdwx1 的回复:应该重写QLabel派生类的mousePressEvent(QMouseEvent *e),现在是重写的QLabel的parent能具体点吗?
继承QLabel写一个类 class xxxx :public QLabel { xxxxx(); protected: void mousePressEvent(QMouseEvent *e); }
Jonix 2013-02-20
  • 打赏
  • 举报
回复
发一下头文件看看。 void slotClicked(); 会不会放错位置?
「已注销」 2013-02-20
  • 打赏
  • 举报
回复
引用 1 楼 jdwx1 的回复:
应该重写QLabel派生类的mousePressEvent(QMouseEvent *e),现在是重写的QLabel的parent
能具体点吗?
jdwx 2013-02-19
  • 打赏
  • 举报
回复
应该重写QLabel派生类的mousePressEvent(QMouseEvent *e),现在是重写的QLabel的parent
第12章 Qt项目实战之计算器 12.1 简介 计算器的样子模仿Windows自带的计算器,但是简化了一些。 一整体方案设计 本设计总体可分为两个部分,界面设计部分和内部逻辑部分。 界面设计入上图所示一些按钮和一个QLineEdit(用于输入数字和显示结果)和QLabel(用于显示运算表达式)。 主要是采用界面设计师(直接拖拽设计)和代码设计部分。 基本上外部的垂直布局里面套了个网格布局(网格布局里主要是处于下方的按钮) 12.2 MVC框架 MVC(Model-View-Controller)框架 其实从字面意思来说,只能了解各大概,view应该是视图的意思,那Model和Controller究竟是什么? Model: 处理数据逻辑和程序运行状态,实体类,用于存储属性值 View: 则只负责显示 Controller: 通常负责处理用户交互的部分,从视图读取数据与用户输入,并向模型发送数据;这里顺便提一下,在Qt里面我们并没有Controller的概念,而是Delegate(委托),意义很明显:控制器委托模型来处理数据,模型委托控制器来做数据的交互。 这样的框架好处是很明显的: - 高重用性:一个模型可以有多个视图,同样一个视图也可以对应多个模型 - 低耦合:因为模型与视图分离,所以可以独立的拓展和修改而不产生相互的影响 - 快速开发和便捷部署 12.3 创建工程 打开Qt Creator 点击New Project 创建工程  选择Qt Widgets Application,点击Choose, 按照提示,填写名称和路径,然后下一步。 选择基类是QWidget,类名为Widget.(或者自己取名) 然后下一步。 然后点完成。 程序创建好了。 12.4 界面设计(View) 双击后缀为.ui的文件,进入设计界面。 我们在这里进行布局。 模仿windows系统自带计算器,我们设计的计算器的界面为: 设计界面的操作比较简单:上面是一个LineEdit和一个Label,用于显示, 下面是4x4的按钮区(Push Button)。 设置好界面后,为了方便后面的操作,我们要修改它们的名字。 例如按钮C:功能是清除,名字就改成btn_clear.

21,437

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧