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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Контекст рисования  (Прочитано 10513 раз)
darkmacho
Гость
« : Декабрь 02, 2008, 16:29 »

Не подскажете что неправильно.У меня выходит просто пустое окно

Код:
QApplication app(argc, argv);    
QWidget win;
QPainter pip;
pip.begin(&win);
pip.setBrush(QBrush(Qt::red,Qt::DiagCrossPattern));
pip.setPen(QPen(Qt::blue,3,Qt::DashLine));
pip.drawRect((QRect(10,10,30,30)));
pip.end();
win.show();
   
Записан
BaltikS
Гость
« Ответ #1 : Декабрь 02, 2008, 16:42 »

Уже обсуждалось, причём недавно... ПОИСК

Смысл в том что нужно унаследоваться от QWidget и переопределять PaintEvent и там хоть обрисуйся....
Записан
darkmacho
Гость
« Ответ #2 : Декабрь 02, 2008, 17:30 »

Все понял а как там событие keyPressEvent переопределить
у меня такая ошибка выходит:
1>.\gaga.cpp(56) : error C2761: 'void Window::keyPressEvent(QKeyEvent *)' : member function redeclaration not allowed

Записан
BaltikS
Гость
« Ответ #3 : Декабрь 02, 2008, 17:34 »

Нужен весь код класса Window, тяжело сообразить сходу в чём причина.
Записан
darkmacho
Гость
« Ответ #4 : Декабрь 02, 2008, 17:44 »

Код:
class Window : public QLabel {

Q_OBJECT

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 * e)
{ 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)));
pip.end();
}

void Window::keyPressEvent(QKeyEvent* e);
{ if(e->key()==Key_Return) exit(0);
}
Записан
BaltikS
Гость
« Ответ #5 : Декабрь 02, 2008, 17:47 »

Код
C++ (Qt)
void Window::keyPressEvent(QKeyEvent* e);
точку с запятой убери в конце...
Записан
ритт
Гость
« Ответ #6 : Декабрь 02, 2008, 18:04 »

в данном случае
Код:
{	QPainter pip;
    pip.begin(this);
//...
pip.end();

можно заменить на
Код:
{	QPainter pip(this);
//...
Записан
darkmacho
Гость
« Ответ #7 : Декабрь 02, 2008, 18:12 »

Я "гений" А почему 'Key_Return' : undeclared identifier
Записан
darkmacho
Гость
« Ответ #8 : Декабрь 02, 2008, 18:36 »

Если так написать QT::Key_Return то

Цитировать
1>gaga.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Window::metaObject(void)const " (?metaObject@Window@@UBEPBUQMetaObject@@XZ)
1>gaga.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall Window::qt_metacast(char const *)" (?qt_metacast@Window@@UAEPAXPBD@Z)
1>gaga.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall Window::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Window@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Декабрь 02, 2008, 19:26 »

Ошибки линковки к QT::Key_Return неимеют никакого значение. У вас просто несченерился МОК. Сделайте qmake && make
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
darkmacho
Гость
« Ответ #10 : Декабрь 02, 2008, 19:47 »

не помогло
Если написать просто Key_Return  - error C2065: 'Key_Return' : undeclared identifier
Если Qt:: Key_Return   - 1>gaga.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Window::metaObject(void)const " (?metaObject@Window@@UBEPBUQMetaObject@@XZ)
1>gaga.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall Window::qt_metacast(char const *)" (?qt_metacast@Window@@UAEPAXPBD@Z)
1>gaga.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall Window::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Window@@UAEHW4Call@QMetaObject@@HPAPAX@Z)

Код

Код:
#include <qapplication.h>
#include<qpixmap.h>
#include <qlabel.h>
#include <QMouseEvent>
#include<qwidget.h>
#include<qbitmap>
#include <qpainter.h>
class Window : public QLabel {

Q_OBJECT

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



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

void paintEvent( QPaintEvent * );
void  keyPressEvent(QKeyEvent* e);

};

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)));
pip.end();
}

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



// ----------------------------------------------------------------------
int main(int argc, char** argv)
{ QApplication app(argc, argv);   
Window win;
QPixmap pix("img/screen.png");
    win.setPixmap(pix);
win.setMask(pix.mask());
win.show();



    return app.exec();
}
Записан
darkmacho
Гость
« Ответ #11 : Декабрь 02, 2008, 20:07 »

Опять ошибка надо убрать Q_OBJECT
 наследует то у QLabel
Записан
Hort
Гость
« Ответ #12 : Декабрь 06, 2008, 01:16 »

Опять ошибка надо убрать Q_OBJECT
 наследует то у QLabel
а это зачем? Q_OBJECT - это не член класса, это макрос. если класс преднасначен для использования механизма сигналов и слотов - макрос Q_OBJECT обязателен
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Декабрь 06, 2008, 01:20 »

2 darkmacho, если нехочешь ходить по граблям, лучше сразу создавай класс в отдельной паре файлов h/cpp, а не в одном файле с функцией main.
Записан

Юра.
BaltikS
Гость
« Ответ #14 : Декабрь 06, 2008, 10:46 »

Так там ещё походу в конце main.cpp надо написать
Код
C++ (Qt)
#include "moc_xxxxx.cpp"
 
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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