搜索
bottom↓
回复: 5

关于QT中使用pixmap进行图片的切换问题

[复制链接]

出0入0汤圆

发表于 2013-1-19 21:00:25 | 显示全部楼层 |阅读模式
本帖最后由 Lvren 于 2013-1-19 21:10 编辑

关于槽的写法~如何使得一张图片通过按键切换为另一张图片~用槽写完后用不用在进行一次界面布局?现在每次执行程序就崩溃~
主要是槽的部分的写法不懂~
#include <QtGui>
#include <QPixmap>
#include "picturechange.h"

PictureChange::PictureChange(QWidget *parent) : QDialog(parent)
{
    //QString picName;
    picName="/home/common/my_program/picture/picture.jpg";
    QLabel *label=new QLabel;
    button_change=new QPushButton("change");
    button_quit=new QPushButton("quit");

    connect(button_change,SIGNAL(clicked()),this,SLOT(change_clicked()));
    connect(button_quit,SIGNAL(clicked()),this,SLOT(close()));

    pixmap=new QPixmap;
    pixmap->load(picName);
    label->setPixmap(*pixmap);

    QVBoxLayout *leftlayout=new QVBoxLayout;
    leftlayout->addWidget(button_change);
    leftlayout->addWidget(button_quit);
    leftlayout->addStretch();

    QHBoxLayout *toplayout=new QHBoxLayout;
    toplayout->addLayout(leftlayout);
    toplayout->addWidget(label);

    //label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    //label->setScaledContents(true);
    //label->resize(window->size());
    setLayout(toplayout);
    setWindowTitle("picture change");
    //setFixedHeight(sizeHint(),height());
}

void PictureChange::change_clicked()
{
    QString picpath1,picpath2;
    //QPixmap *pixmap;
    picpath1="/home/common/my_program/picture/picture.jpg";
    picpath2="/home/common/my_program/picture/picture2.jpg";
    //QMessageBox::warning(this,"warning","change button is clickded");
    //pixmap=new QPixmap(picpath2);
    pixmap->load(picpath2);
    label->setPixmap(*pixmap);

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-1-19 21:52:40 | 显示全部楼层
坐等大神赐教

出0入0汤圆

发表于 2013-1-19 22:29:07 | 显示全部楼层
贴代码贴全哦,崩溃的情况很多时候都是对象被提前析构了,但是后边又对它进行操作引起的
话说你这个能编译通过么
QLabel *label=new QLabel;这段声明的是局部变量
你下面那个函数里的label跟上边的函数里的label不是同一个

出0入0汤圆

 楼主| 发表于 2013-1-19 22:37:57 | 显示全部楼层
crysislinux 发表于 2013-1-19 22:29
贴代码贴全哦,崩溃的情况很多时候都是对象被提前析构了,但是后边又对它进行操作引起的
话说你这个能编译 ...

#ifndef PICTURECHANGE_H
#define PICTURECHANGE_H

#include <QDialog>

class QPushButton;
class QLabel;

class PictureChange:public QDialog
{
    Q_OBJECT
public:
    PictureChange(QWidget *parent=0);
private slots:
    void change_clicked();
private:
    QString picName;
    QLabel *label;
    QPixmap *pixmap;
    QPushButton *button_change;
    QPushButton *button_quit;
};

#endif // PICTURECHANGE_H


下面是主函数

#include <QApplication>
#include "picturechange.h"

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    PictureChange *dialog = new PictureChange;
    dialog->show();
    return app.exec();
}

出0入0汤圆

发表于 2013-1-20 09:23:46 | 显示全部楼层
Lvren 发表于 2013-1-19 22:37
#ifndef PICTURECHANGE_H
#define PICTURECHANGE_H

我感觉是你点按钮切换的时候会崩溃吧
还是我之前说的那个问题
你最上面贴出来的函数里边
QLabel *label=new QLabel;
这个label是局部变量,你应该用类定义的变量,把QLabel *去掉。你现在这样其实在切换图像的函数里用的label指针是一个随机的指针,当然要崩溃

出0入0汤圆

 楼主| 发表于 2013-1-21 13:42:43 | 显示全部楼层
crysislinux 发表于 2013-1-20 09:23
我感觉是你点按钮切换的时候会崩溃吧
还是我之前说的那个问题
你最上面贴出来的函数里边

问题解决了,受教了,thank you!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 03:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表