QPushButton::clicked() --> Contact::paintEvent(QPaintEvent*),而且不用我点击,图片就在窗体上显示出来来,各位大侠,小弟应该怎样修改呢?初学者的困惑啊。。
#include "contact.h"
#include <QDialog>
#include <QGridLayout>
#include <QFileDialog>
#include <QPushButton>
#include <QPainter>
Contact::Contact(QWidget *parent) :
QWidget(parent)
{
fileBtn=new QPushButton(tr("选择照片"));
viewpic=new QPushButton(tr("显示照片"));
fileLineEdit=new QLineEdit;
mainLayout=new QGridLayout(this);
mainLayout->addWidget(fileBtn,5,0);
mainLayout->addWidget(fileLineEdit,5,1);
mainLayout->addWidget(viewpic,6,0,1,1);
mainLayout->setSizeConstraint(QLayout::SetFixedSize);
connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile()));
connect(viewpic,SIGNAL(clicked()),this,SLOT(paintEvent(QPaintEvent *)));
}
void Contact::showFile()
{
QString s=QFileDialog::getOpenFileName(this,"OPEN","/","*.jpg");
fileLineEdit->setText(s);
}
void Contact::paintEvent(QPaintEvent *)
{
char path[]="/home/wangyaqing/Pictures/hui.jpg";
QPainter painter(this);
QPixmap pix;
pix.load(path);
painter.drawPixmap(0,0,500,500,pix);
}
3 个解决方案
#1
好好看看信号和槽的机制吧
connect(viewpic,SIGNAL(clicked()),this,SLOT(paintEvent(QPaintEvent *)));
这么写是不对滴,首先信号和槽函数参数类型要一致,就是类似int对int,不管是调用系统的还是自己定义的,首先参数类型要一致,clicked()是无参数的,你和(paintEvent(QPaintEvent *)连一开始就注定要报错。
其次connect中不能穿进去实际的参数,这个你倒是没犯,不过看你对信号和槽很不了解,以后估计也会犯这样的错误
给你个建议是可以写个pictureShow()槽函数,与clicked()相连,然后在该函数里写一个label,用这个label显示图片,一点击,就label->show();这样也是可以实现的,自己根据你的需要自己想想办法吧,好好看看信号和槽
connect(viewpic,SIGNAL(clicked()),this,SLOT(paintEvent(QPaintEvent *)));
这么写是不对滴,首先信号和槽函数参数类型要一致,就是类似int对int,不管是调用系统的还是自己定义的,首先参数类型要一致,clicked()是无参数的,你和(paintEvent(QPaintEvent *)连一开始就注定要报错。
其次connect中不能穿进去实际的参数,这个你倒是没犯,不过看你对信号和槽很不了解,以后估计也会犯这样的错误
给你个建议是可以写个pictureShow()槽函数,与clicked()相连,然后在该函数里写一个label,用这个label显示图片,一点击,就label->show();这样也是可以实现的,自己根据你的需要自己想想办法吧,好好看看信号和槽
#2
还有解决问题了记得结贴啊!!!最近回复的帖子都没有结贴的,很郁闷啊!!!
#3
我是新手,不是很清楚必须要结贴呢,谢谢哈
#1
好好看看信号和槽的机制吧
connect(viewpic,SIGNAL(clicked()),this,SLOT(paintEvent(QPaintEvent *)));
这么写是不对滴,首先信号和槽函数参数类型要一致,就是类似int对int,不管是调用系统的还是自己定义的,首先参数类型要一致,clicked()是无参数的,你和(paintEvent(QPaintEvent *)连一开始就注定要报错。
其次connect中不能穿进去实际的参数,这个你倒是没犯,不过看你对信号和槽很不了解,以后估计也会犯这样的错误
给你个建议是可以写个pictureShow()槽函数,与clicked()相连,然后在该函数里写一个label,用这个label显示图片,一点击,就label->show();这样也是可以实现的,自己根据你的需要自己想想办法吧,好好看看信号和槽
connect(viewpic,SIGNAL(clicked()),this,SLOT(paintEvent(QPaintEvent *)));
这么写是不对滴,首先信号和槽函数参数类型要一致,就是类似int对int,不管是调用系统的还是自己定义的,首先参数类型要一致,clicked()是无参数的,你和(paintEvent(QPaintEvent *)连一开始就注定要报错。
其次connect中不能穿进去实际的参数,这个你倒是没犯,不过看你对信号和槽很不了解,以后估计也会犯这样的错误
给你个建议是可以写个pictureShow()槽函数,与clicked()相连,然后在该函数里写一个label,用这个label显示图片,一点击,就label->show();这样也是可以实现的,自己根据你的需要自己想想办法吧,好好看看信号和槽
#2
还有解决问题了记得结贴啊!!!最近回复的帖子都没有结贴的,很郁闷啊!!!
#3
我是新手,不是很清楚必须要结贴呢,谢谢哈