[SOLVED] changing image using keypress



  • hi all,
    Good day. I want to change the image using keypress. If i am pressing F2, in screen i have to show first image. Again pressing F2 second time in screen have to show next image. please give me some idea to do it.

    Thanks & Regards
    Sasi



  • Hi try this:

    @
    void MyClass::keyPressEvent(QKeyEvent *e)
    {
    switch ( e->key() )
    {
    case Qt::Key_F2 :
    MAKES YOUR CHANGE
    break;
    }
    }
    @



  • [quote author="Francknos" date="1412059137"]Hi try this:

    @
    void MyClass::keyPressEvent(QKeyEvent *e)
    {
    switch ( e->key() )
    {
    case Qt::Key_F2 :
    MAKES YOUR CHANGE
    break;
    }
    }
    @[/quote]

    yes i added but not showing anything. and my code is below

    dialog.h
    @#ifndef DIALOG_H
    #define DIALOG_H

    #include <QDialog>
    #include <QMovie>

    namespace Ui {
    class Dialog;
    }

    class Dialog : public QDialog
    {
    Q_OBJECT

    public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

    protected:
    void keyPressEvent(QKeyEvent *e);

    private:
    Ui::Dialog *ui;

    };

    #endif // DIALOG_H@

    dialog.cpp

    @#include "dialog.h"
    #include "ui_dialog.h"
    #include <QMovie>
    #include <QImage>
    #include <QFontDatabase>
    #include <QDebug>
    #include <QKeyEvent>

    Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
    {
    ui->setupUi(this);

    }

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

    void Dialog::keyPressEvent(QKeyEvent *e)
    {
    switch ( e->key() )
    {
    case Qt::Key_F2 :
    QMovie *movie = new QMovie("/home/dev6/Desktop/animation/spectrum.gif");
    QLabel *processLabel = new QLabel(this);
    processLabel->setMovie(movie);
    movie->start();
    break;
    }
    }@



  • Try to have your QMovie in private membre of your class and construt it in constructor.

    but I think the function keyPressEvent works. The proble is in your QMovie.



  • [quote author="Francknos" date="1412060594"]Try to have your QMovie in private membre of your class and construt it in constructor.

    but I think the function keyPressEvent works. The proble is in your QMovie. [/quote]

    yes exactly. i changed like this. now it is working fine. Thanks alot.

    @void Dialog::keyPressEvent(QKeyEvent *e)
    {
    switch ( e->key() )
    {
    case Qt::Key_F2 :
    QMovie *movie = new QMovie("/home/dev6/Desktop/animation/spectrum.gif");
    QLabel *processLabel = new QLabel(this);
    ui->processLabel->setMovie(movie);
    movie->start();
    break;
    }
    }@



  • but if i am pressing the same key again have to show next image is it possible..



  • This is working fine for showing the next next picture by pressing the same key.

    Thanks alot to Francknos and all for your great help.

    @void Dialog::keyPressEvent(QKeyEvent *e)
    {

    static int key_press;
    
    if(e->key() == Qt::Key_F2)
    {
        key_press++;
    }
    
    if(key_press == 1)
        {
                QMovie *movie = new QMovie("/home/dev6/Desktop/animation/spectrum.gif");
                QLabel *processLabel = new QLabel(this);
                ui->processLabel->setMovie(movie);
                movie->start();
    
                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
        }
    
     if(key_press == 2)
        {
                QMovie *movie = new QMovie("/home/dev6/Desktop/animation/1.gif");
                QLabel *processLabel = new QLabel(this);
                ui->processLabel->setMovie(movie);
                movie->start();
    
                ui->label1->setText(QString::fromUtf8("சென்னை Namakkal"));
                ui->label1->show();
        }
     if(key_press == 3)
        {
                QMovie *movie = new QMovie("/home/dev6/Desktop/animation/2.gif");
                QLabel *processLabel = new QLabel(this);
                ui->processLabel->setMovie(movie);
                movie->start();
    
                ui->label1->setText(QString::fromUtf8("coimbatore சென்னை"));
                ui->label1->show();
        }
    

    }@



  • Hi.
    Yeah it is possible.



  • [quote author="IamSumit" date="1412069646"]Hi.
    Yeah it is possible.

    [/quote]

    yes i done . thanks



  • construct a QVector<QMovie> _movies;
    and add it to constructor then when you press F2:

    cpt++
    ui->processLabel->setMovie(_movies[cpt]);
    _movies[cpt]->start();



  • @void Dialog::keyPressEvent(QKeyEvent *e)
    {

    static int key_press;
    
    if(e->key() == Qt::Key_F2)
    {
        key_press++;
    }
    
    if(key_press == 1)
        {
                QMovie *movie = new QMovie("/home/dev6/Desktop/animation/spectrum.gif");
                QLabel *processLabel = new QLabel(this);
                ui->processLabel->setMovie(movie);
                movie->start();
    
                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
        }
    
     if(key_press == 2)
        {
                QMovie *movie = new QMovie("/home/dev6/Desktop/animation/1.gif");
                QLabel *processLabel = new QLabel(this);
                ui->processLabel->setMovie(movie);
                movie->start();
    
                ui->label1->setText(QString::fromUtf8("சென்னை Namakkal"));
                ui->label1->show();
        }
     if(key_press == 3)
        {
                QMovie *movie = new QMovie("/home/dev6/Desktop/animation/2.gif");
                QLabel *processLabel = new QLabel(this);
                ui->processLabel->setMovie(movie);
                movie->start();
    
                ui->label1->setText(QString::fromUtf8("coimbatore சென்னை"));
                ui->label1->show();
        }
    

    }@

    hi..
    this is not a right way.Because many of same instructions are repeating.

    you can optimize your code .You must create a method with parameter QString path
    e'g;
    @
    void ShowPicture(QString path)
    {
    QMovie *movie = new QMovie(path);
    QLabel *processLabel = new QLabel(this);
    ui->processLabel->setMovie(movie);
    movie->start();

                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
    

    }
    @
    hope it helps



  • [quote author="Francknos" date="1412070831"]construct a QVector<QMovie> _movies;
    and add it to constructor then when you press F2:

    cpt++
    ui->processLabel->setMovie(_movies[cpt]);
    _movies[cpt]->start();
    [/quote]

    okay i will try in this way...



  • [quote author="IamSumit" date="1412074165"]

    hi..
    this is not a right way.Because many of same instructions are repeating.

    you can optimize your code .You must create a method with parameter QString path
    e'g;
    @
    void ShowPicture(QString path)
    {
    QMovie *movie = new QMovie(path);
    QLabel *processLabel = new QLabel(this);
    ui->processLabel->setMovie(movie);
    movie->start();

                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
    

    }
    @
    hope it helps[/quote]

    okay. How to call this function and where to call it.



  • i used like this getting error

    /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:53: error: a function-definition is not allowed here before '{' token

    /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:69: error: 'ShowPicture' was not declared in this scope

    @void Dialog::keyPressEvent(QKeyEvent *e)
    {

    void ShowPicture(QString path)
    {
                    QMovie *movie = new QMovie(path);
                    QLabel *processLabel = new QLabel(this);
                    ui->processLabel->setMovie(movie);
                    movie->start();
    
                    ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                    ui->label1->show();
    }
    
    static int key_press = 0;
    
    if(e->key() == Qt::Key_F3)
    {
    
       // QString path = "/home/dev6/Desktop/animation/3.gif";
        ShowPicture("/home/dev6/Desktop/animation/3.gif");
        
    }@


  • [quote author="sasireka" date="1412078116"]i used like this getting error

    /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:53: error: a function-definition is not allowed here before '{' token

    /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:69: error: 'ShowPicture' was not declared in this scope

    @void Dialog::keyPressEvent(QKeyEvent *e)
    {

    void ShowPicture(QString path)
    {
                    QMovie *movie = new QMovie(path);
                    QLabel *processLabel = new QLabel(this);
                    ui->processLabel->setMovie(movie);
                    movie->start();
    
                    ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                    ui->label1->show();
    }
    
    static int key_press = 0;
    
    if(e->key() == Qt::Key_F3)
    {
    
       // QString path = "/home/dev6/Desktop/animation/3.gif";
        ShowPicture("/home/dev6/Desktop/animation/3.gif");
        
    }@[/quote]
    

    hi..
    After looking your code ...i think you are new to programming.are you?
    you are defining the method inside another method .this is not the correct
    way
    just call ShowPicture("/home/dev6/Desktop/animation/2.gif");
    then you will not face any error.
    hope it helps



  • [quote author="IamSumit" date="1412079562"][quote author="sasireka" date="1412078116"]i used like this getting error

    /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:53: error: a function-definition is not allowed here before '{' token

    /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:69: error: 'ShowPicture' was not declared in this scope

    @void Dialog::keyPressEvent(QKeyEvent *e)
    {

    void ShowPicture(QString path)
    {
                    QMovie *movie = new QMovie(path);
                    QLabel *processLabel = new QLabel(this);
                    ui->processLabel->setMovie(movie);
                    movie->start();
    
                    ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                    ui->label1->show();
    }
    
    static int key_press = 0;
    
    if(e->key() == Qt::Key_F3)
    {
    
       // QString path = "/home/dev6/Desktop/animation/3.gif";
        ShowPicture("/home/dev6/Desktop/animation/3.gif");
        
    }@[/quote]
    

    hi..
    After looking your code ...i think you are new to programming.are you?
    you are defining the method inside another method .this is not the correct
    way
    just call ShowPicture("/home/dev6/Desktop/animation/2.gif");
    then you will not face any error.
    hope it helps[/quote]

    good day. yes i am new to Qt programming. Okay i will do like this. Thanks Sumit. Give me a guide to learn Qt programming and library usage.



  • bq. hi..
    After looking your code ...i think you are new to programming.are you?
    you are defining the method inside another method .this is not the correct
    way
    just call ShowPicture("/home/dev6/Desktop/animation/2.gif");
    then you will not face any error.
    hope it helps[/quote]bq.

    i did like below. but getting errors.

    @void ShowPicture(QString path)
    {
    QMovie *movie = new QMovie(path);
    QLabel *processLabel = new QLabel(this);
    ui->processLabel->setMovie(movie);
    movie->start();

                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
    

    }

    void Dialog::keyPressEvent(QKeyEvent *e)
    {

    if(e->key() == Qt::Key_F3)
    {
            ShowPicture(”/home/dev6/Desktop/animation/2.gif”);
    }
    

    }@



  • Hi .
    Can you show me your full code (including .h)?
    and tell me what errors you are getting also?



  • [quote author="IamSumit" date="1412144476"]Hi .
    Can you show me your full code (including .h)?
    and tell me what errors you are getting also?

    [/quote]

    @#include "dialog.h"
    #include "ui_dialog.h"
    #include <QMovie>
    #include <QImage>
    #include <QFontDatabase>
    #include <QDebug>
    #include <QKeyEvent>

    Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
    {
    ui->setupUi(this);
    }

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

    void ShowPicture(QString path)
    {
    QMovie *movie = new QMovie(path);
    QLabel *processLabel = new QLabel(this);
    ui->processLabel->setMovie(movie);
    movie->start();

                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
    

    }

    void Dialog::keyPressEvent(QKeyEvent *e)
    {

    if(e->key() == Qt::Key_F3)
    {
            ShowPicture(”/home/dev6/Desktop/animation/2.gif”);
    }
    

    }@



  • ok.
    ShowPicture(QString) is the member function/method of Dialog class.
    i can't see proper definition of this method.
    in line 21.
    @
    Replace void Dialog::ShowPicture(QString path)
    @

    and in .h file declare this method as member.
    in .h file. add this line
    @
    public:
    void ShowPicture(QString path);
    @

    and your oops basics are not clear.So, Please improve your basics first.

    Hope it helps.



  • i tried . but still getting error



  • What errors ?



  • Good day.
    [quote author="IamSumit" date="1412164041"]What errors ?[/quote]

    @void Dialog::ShowPicture(QString path)
    {
    QMovie *movie = new QMovie(path);
    QLabel *processLabel = new QLabel(this);
    ui->processLabel->setMovie(movie);
    movie->start();

                ui->label1->setText(QString::fromUtf8("chennai  சென்னை"));
                ui->label1->show();
    

    }

    void Dialog::keyPressEvent(QKeyEvent *e)
    {

    if(e->key() == Qt::Key_F3)
    {
            ShowPicture(/home/dev6/Desktop/animation/2.gif);
    }
    

    }@

    errors:

    1. /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:70: error: invalid suffix "gif" on floating constant

    2. * /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:-1: In member function 'void Dialog::ShowPicture(QString)':
    1
    <* /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:70: error: expected primary-expression before '/' token

    2< /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:70: error: 'home' was not declared in this scope

    3< /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:70: error: 'home' was not declared in this scope

    4< /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:70: error: 'Desktop' was not declared in this scope

    5< /home/dev6/Desktop/animation-build-desktop-Qt_4_8_1_in_PATH__System__Release/../animation/dialog.cpp:70: error: 'animation' was not declared in this scope



  • Hi.
    You are not passing a string .string always encloses " " quotes.
    @
    19.ShowPicture(/home/dev6/Desktop/animation/2.gif);
    @
    Correct it as .
    ShowPicture("/home/dev6/Desktop/animation/2.gif");



  • [quote author="IamSumit" date="1412585094"]Hi.
    You are not passing a string .string always encloses " " quotes.
    @
    19.ShowPicture(/home/dev6/Desktop/animation/2.gif);
    @
    Correct it as .
    ShowPicture("/home/dev6/Desktop/animation/2.gif");
    [/quote]

    yes.. really i am so sorry.Thanks alot. great help.



  • Thanks alot IamSumit IamSumit and all.



  • That's ok .

    Now please Make your thread title as [SOLVED] so others could notify that solution has been found.:)



  • [quote author="IamSumit" date="1412587771"]That's ok .

    Now please Make your thread title as [SOLVED] so others could notify that solution has been found.:)[/quote]

    yes.. done IamSumit. :)

    Happy Coding :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.