Russian Qt Forum
Ноябрь 24, 2024, 11:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: keyPressEvent  (Прочитано 7257 раз)
darkmacho
Гость
« : Декабрь 02, 2008, 20:23 »

Как при нажатии какой-нибудь клавиши вывести картинку?Можно описать алгоритм в общих чертах?

Код:
void Window::keyPressEvent(QKeyEvent* e)
{    if(e->key()==Qt::Key_Space) yes=true;///Здесь что то нужно дописать и как товызвать paintEvent ?
///?????????????Как?

}

Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #1 : Декабрь 02, 2008, 20:34 »

update();
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
darkmacho
Гость
« Ответ #2 : Декабрь 02, 2008, 21:05 »

Пример

Код:
void Window::paintEvent( QPaintEvent * )
{ QPainter pip;
    pip.begin(this);
pip.drawPixmap(0,0,QPixmap("img/screen.png"));
pip.setBrush(QBrush(Qt::red,Qt::DiagCrossPattern));
pip.setPen(QPen(Qt::blue,3,Qt::DashLine));
pip.drawRect((QRect(10,10,30,30)));

if(yes)
{

pip.drawPixmap(0,0,QPixmap("img/1.png"));
//for(int i=1;i<=7;i++);
       //pip.drawPixmap(m[i][1],100,p[i]);
}
pip.end();
}

void Window::keyPressEvent(QKeyEvent* e)
{ if(e->key()==Qt::Key_Return) exit(0);

    if(e->key()==Qt::Key_Space)
{yes=true;
update();
}
}

Проблема в том что почему-то нельзя объявлять массив Pixmap p[maxn]; до обйявления виджета
виджета
///Здесь не проходит выше
....
Window win;
........
//Ниже вполне
Записан
ритт
Гость
« Ответ #3 : Декабрь 03, 2008, 05:30 »

Проблема в том что почему-то нельзя объявлять массив Pixmap p[maxn]; до обйявления виджета
а что то за тип такой "Pixmap"?

///Здесь не проходит выше
....
Window win;
........
//Ниже вполне
это для меня осталось загадкой. мб это какая шифровка?
Цитировать
- а почему "Ы"?
- чтоб никто не догадался...
Записан
darkmacho
Гость
« Ответ #4 : Декабрь 03, 2008, 08:49 »

Опять ступил ну конечно же QPixmap p[7];

1)
Код:
int main(int argc, char** argv)
{
.....
QApplication app(argc, argv);   
Window win;
QPixmap pix("img/screen.png");
QPixmap p[30];////Объявляю после виджета win;
...
}

2)
QPixmap p[30]; ////Объявляю до виджета win и main();
int main(int argc, char** argv)
{....
 QApplication app(argc, argv);   
   Window win;
      QPixmap pix("img/screen.png");
.....
}

Ошибка QPixmap:Must construct a QApplication before a QPaintDevice
выходит после компиляции в отдельном окне
Записан
BRE
Гость
« Ответ #5 : Декабрь 03, 2008, 09:08 »

Опять ступил ну конечно же QPixmap p[7];

1)
Код:
int main(int argc, char** argv)
{
.....
QApplication app(argc, argv);   
Window win;
QPixmap pix("img/screen.png");
QPixmap p[30];////Объявляю после виджета win;
...
}

2)
Код:
QPixmap p[30]; ////Объявляю до виджета win и main();
int main(int argc, char** argv)
{....
 QApplication app(argc, argv);   
Window win;
QPixmap pix("img/screen.png");
.....
}
Ошибка QPixmap:Must construct a QApplication before a QPaintDevice
выходит после компиляции в отдельном окне
Qt тебе и говорит, что объекты QPixmap должны создаваться после того, как создаться обхект QApplication.
Почему бы тебе этот QPixmap p[7] не объявить в классе Window? А лучше сразу QList<QPixmap> p.
Записан
darkmacho
Гость
« Ответ #6 : Декабрь 03, 2008, 09:52 »

Так выходит ошибка "отправлять не отправлять"
Записан
BRE
Гость
« Ответ #7 : Декабрь 03, 2008, 09:58 »

Так выходит ошибка "отправлять не отправлять"
Какая ошибка? Нельзя создавать QPixmap до создания QApplication. За информацией в QAssistant.
Если все таки хочешь объявить массив QPixmap глобально, то объяви его как массив указателей:
QPixmap *p[7]; или QList<QPixmap*> p;
А заполняй его нужными значениями уже после создания экземпляра QApplication.

« Последнее редактирование: Декабрь 03, 2008, 10:02 от BRE » Записан
darkmacho
Гость
« Ответ #8 : Декабрь 03, 2008, 10:22 »

Ну вот же

Код:
#include <qapplication.h>
#include<qpixmap.h>
#include <qlabel.h>
#include <QMouseEvent>
#include<qbitmap>
#include <qpainter.h>
bool yes=false;

QPixmap *p[7];

class Window : public QLabel {

private:
    QPoint  m_ptPosition;

protected:
    virtual void Window::mousePressEvent(QMouseEvent* pe)
    {
        m_ptPosition = pe->pos();
    }

    virtual void Window::mouseMoveEvent(QMouseEvent* pe)
    {
        move(pe->globalPos() - m_ptPosition);
    }

    virtual void  keyPressEvent(QKeyEvent* e);

public:
    Window(QWidget* pwgt = 0)
: QLabel(pwgt,Qt::FramelessWindowHint | Qt::Window)
    {
    }

void paintEvent( QPaintEvent * );


};

void Window::paintEvent( QPaintEvent * )
{ QPainter pip;
    pip.begin(this);
pip.drawPixmap(0,0,QPixmap("img/screen.png"));
pip.setBrush(QBrush(Qt::red,Qt::DiagCrossPattern));
pip.setPen(QPen(Qt::blue,3,Qt::DashLine));
pip.drawRect((QRect(10,10,30,30)));

if(yes)
{ pip.drawPixmap(0,0,QPixmap("img/1.png"));
}
pip.end();
}

void Window::keyPressEvent(QKeyEvent* e)
{ if(e->key()==Qt::Key_Return) exit(0);

    if(e->key()==Qt::Key_Space)
{yes=true;
update();
}
}



// ----------------------------------------------------------------------
int main(int argc, char** argv)
{ QApplication app(argc, argv);   
Window win;
QPixmap pix("img/screen.png");
qint32 m[30][30];
int t=40;
for(int y=1;y<=7;y++)
{m[y][1]=t;
t+=50;
}
p[1]->load("img/1.png");
p[2]->load("img/2.png");
p[3]->load("img/3.png");
p[4]->load("img/4.png");
p[5]->load("img/5.png");
p[6]->load("img/6.png");
p[7]->load("img/7.png");
win.setPixmap(pix);
win.setMask(pix.mask());
win.show();



    return app.exec();
}

Как нажимаю ctrl+f5 выходит ошибка:
Do you want to debug using the selected debugger?
Записан
BRE
Гость
« Ответ #9 : Декабрь 03, 2008, 12:01 »

Код
C++ (Qt)
 
QPixmap *p[ 7 ];
 
int main(...)
{
   QApplication app(...);
   for( int i = 0; i < 7; ++i )
       p[ i ] = new QPixmap( name[ i ] );    // Создаем объект QPixmap
}
 
 

И еще по коду...
Индексация массивов в C/C++ начинается с 0.

IMHO Все это нужно скрыть в классе Window.
Записан
darkmacho
Гость
« Ответ #10 : Декабрь 03, 2008, 12:15 »

все спасибо помогло
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 22.