[SOLVED] changing image using keypress
-
wrote on 30 Sept 2014, 04:38 last edited by
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 -
wrote on 30 Sept 2014, 06:38 last edited by
Hi try this:
@
void MyClass::keyPressEvent(QKeyEvent *e)
{
switch ( e->key() )
{
case Qt::Key_F2 :
MAKES YOUR CHANGE
break;
}
}
@ -
wrote on 30 Sept 2014, 06:52 last edited by
[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;
}
}@ -
wrote on 30 Sept 2014, 07:03 last edited by
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.
-
wrote on 30 Sept 2014, 09:04 last edited by
[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;
}
}@ -
wrote on 30 Sept 2014, 09:05 last edited by
but if i am pressing the same key again have to show next image is it possible..
-
wrote on 30 Sept 2014, 09:33 last edited by
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(); }
}@
-
wrote on 30 Sept 2014, 09:34 last edited by
Hi.
Yeah it is possible. -
wrote on 30 Sept 2014, 09:35 last edited by
[quote author="IamSumit" date="1412069646"]Hi.
Yeah it is possible.[/quote]
yes i done . thanks
-
wrote on 30 Sept 2014, 09:53 last edited by
construct a QVector<QMovie> _movies;
and add it to constructor then when you press F2:cpt++
ui->processLabel->setMovie(_movies[cpt]);
_movies[cpt]->start(); -
wrote on 30 Sept 2014, 10:49 last edited by
@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 -
wrote on 30 Sept 2014, 11:35 last edited by
[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...
-
wrote on 30 Sept 2014, 11:48 last edited by
[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.
-
wrote on 30 Sept 2014, 11:55 last edited by
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"); }@
-
wrote on 30 Sept 2014, 12:19 last edited by
[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 -
wrote on 1 Oct 2014, 04:23 last edited by
[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.
-
wrote on 1 Oct 2014, 04:33 last edited by
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”); }
}@
-
wrote on 1 Oct 2014, 06:21 last edited by
Hi .
Can you show me your full code (including .h)?
and tell me what errors you are getting also? -
wrote on 1 Oct 2014, 08:43 last edited by
[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”); }
}@
-
wrote on 1 Oct 2014, 09:27 last edited by
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.
1/28