[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_OBJECTpublic:
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.