Lvren 发表于 2013-1-19 21:00:25

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

本帖最后由 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);

}

Lvren 发表于 2013-1-19 21:52:40

坐等大神赐教

crysislinux 发表于 2013-1-19 22:29:07

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

Lvren 发表于 2013-1-19 22:37:57

crysislinux 发表于 2013-1-19 22:29 static/image/common/back.gif
贴代码贴全哦,崩溃的情况很多时候都是对象被提前析构了,但是后边又对它进行操作引起的
话说你这个能编译 ...

#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();
}

crysislinux 发表于 2013-1-20 09:23:46

Lvren 发表于 2013-1-19 22:37 static/image/common/back.gif
#ifndef PICTURECHANGE_H
#define PICTURECHANGE_H



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

Lvren 发表于 2013-1-21 13:42:43

crysislinux 发表于 2013-1-20 09:23 static/image/common/back.gif
我感觉是你点按钮切换的时候会崩溃吧
还是我之前说的那个问题
你最上面贴出来的函数里边


问题解决了,受教了,thank you!
页: [1]
查看完整版本: 关于QT中使用pixmap进行图片的切换问题