Поиск:

Закрытая темаСоздание новой темы Создание опроса
> [QT] QPainter, QPixmap, paintEvent 
V
    Опции темы
Moby
Дата 28.11.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Всем приает. Очередной вопрос от очередного нуба. smile
Вот почему у меня ничего не рисуется

Код

#include "paint_w.h"

paint_w::paint_w(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    Paint();
}

void paint_w::Paint()
{
    QPixmap img1("Paintball.jpg");
    QPainter painter(this);
    painter.drawPixmap(0,0,img1);
}


Объясните чайнику, зачем нужен paintEvent и где он вызывается? А то в QT примерах всюду есть эта функция, а где она вызывается не пойму.

PM MAIL ICQ   Вверх
Любитель
Дата 28.11.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Вызывается тогда - когда надо перерисовать виджет smile Автоматически.


--------------------
PM MAIL ICQ Skype   Вверх
SABROG
Дата 28.11.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



На экран не будет рисоваться:

Цитата

The QPixmap class is an off-screen image representation that can be used as a paint device


К тому же если бы ты даже один раз нарисовал что-то на окне, оно бы быстро затерлось оригинальным обработчиком paintEvent'a.

paintEvent вызывается всякий раз, когда приходит событие перерисовать окно. Поэтому, чтобы что-то нарисовать свое надо переопределить этот метод, вызвать в нем оригинальный метод (чтобы кнопочки увидеть и прочие контролы) и в конце метода нарисовать что-то свое поверх всего остального.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
gmorgunov
Дата 29.11.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 17.5.2008

Репутация: нет
Всего: 5



Привет. Вот так будет рисовать:
Код

#include <QtGui>

class MyWidget : public QWidget
{
  public:
   MyWidget(QWidget * parent=0) : QWidget(parent) {}
   
   void  paintEvent(QPaintEvent*) {       
      QPainter painter(this);
      QPixmap image("/home/mike/Desktop/lena.jpg");
      painter.drawPixmap(0,0,image);
      //QImage image("/home/mike/Desktop/lena.jpg");
      //painter.drawImage(100,100,image);
   } 
}; 

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);               
    MyWidget widget;
    QPainter painter;
    widget.show();
    return app.exec();              
}


PM MAIL   Вверх
Любитель
Дата 29.11.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Должно )


--------------------
PM MAIL ICQ Skype   Вверх
Moby
Дата 2.12.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Цитата(Любитель @  29.11.2008,  17:53 Найти цитируемый пост)
Должно ) 

Не в моём случае.  smile 
Одно из двух, либо я не понимаю, либо я не догоняю.  smile 
Вот код.
Это хэдер
Код

#ifndef PAINT_W_H
#define PAINT_W_H
#include <QWidget>
#include "ui_paint_w.h"
#include <qpainter.h>
#include <QPixmap>
class paint_w : public QWidget
{
    Q_OBJECT

public:
    paint_w(QWidget *parent = 0);
    ~paint_w();
    
protected:
    void paintEvent(QPaintEvent *event);
    
private:

    Ui::paint_wClass ui;
};

#endif // PAINT_W_H


Это cpp
Код

#include "paint_w.h"

paint_w::paint_w(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
}

void paint_w::paintEvent(QPaintEvent*)
{
    QPainter painter(this);
    QPixmap img1("C:\Documents and Settings\Tig\Рабочий стол\Paintball.jpg");
    painter.drawPixmap(0,0,img1);
}

Это main.cpp
Код

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    paint_w w;
    QPainter painter;
    w.show();
    return a.exec();
}





Не рисуется!!!  smile 
PM MAIL ICQ   Вверх
SABROG
Дата 2.12.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Moby @  2.12.2008,  12:34 Найти цитируемый пост)
 QPixmap img1("C:\Documents and Settings\Tig\Рабочий стол\Paintball.jpg");

Экранируем спец символы, экранируем ;)


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Elfebet
Дата 2.12.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



Moby, в выше сказаном посте имееться ввиду шо в Qt используеться юникод а ты ему тулиш русские буквы в своей кодировке - поэтому и нерабоает, да и слэши должны быть наоборот smile


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Moby
Дата 3.12.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



ЛюбительSABROGgmorgunovElfebet, ОГРОМНОЕ вам спасибо. Слэышы перевернул, русские буквы убрал. Все работает.

Но я от вас не отстану. smile

У меня есть вопрос.

Как экранировать спец символы?



Это сообщение отредактировал(а) Moby - 3.12.2008, 15:46
PM MAIL ICQ   Вверх
SABROG
Дата 3.12.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Moby @ 3.12.2008,  15:45)
ЛюбительSABROGgmorgunovElfebet, ОГРОМНОЕ вам спасибо. Слэышы перевернул, русские буквы убрал. Все работает.

Но я от вас не отстану. smile

У меня есть вопрос.

Как экранировать спец символы?

"Спец.символы" это у меня от XML'я пошло. Имеется ввиду "escape sequence", эскейп последовательности.

Код

/-----------------------------------\
| ESCAPE     | CHARACTER REPRES-    |
| SEQUENCE   | ENTED                |
|------------+----------------------|
| "\a"       | Alert (bell, alarm)  |
|------------+----------------------|
| "\b"       | Backspace            |
|------------+----------------------|
| "\f"       | Form feed (new page) | 
|------------+----------------------|
| "\n"       | New-line             | 
|------------+----------------------|
| "\r"       | Carriage return      |
|------------+----------------------|
| "\t"       | Horizontal tab       | 
|------------+----------------------|
| "\v"       | Vertical tab         | 
|------------+----------------------|
| "\'"       | Single quotation     | 
|            | mark                 | 
|------------+----------------------|
| "\""       | Double quotation     | 
|            | mark                 | 
|------------+----------------------|
| "\?"       | Question mark        |
|------------+----------------------|
| "\\"       | Backslash            |
\-----------------------------------/



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 15.12.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Появился вопросик. 

Вот тут 
Код

void new_form::paintEvent(QPaintEvent*)
{
    if(b)
    {
        k+=i;
    }
    QPainter painter(this);
    painter.drawPixmap(640 -X + k,0 + j,img1);
    painter.drawPixmap(640 - X - k,800 - Y - j,img2);
    update();
}


у меня происход движение двух Pixmap'ов. Скорость движения регулирую переменой к. Но если сделать скорость большой, то тогда движение будет скачковым. Как сделать зависимость скорости от времени а не от координат?

То есть я могу вручную прописывать с какой частатой должен метод paintEvent(QPaintEvent*) обновляться?

Или использовать QTimer? Если да, то подскажите как, ибо те примеры что есть не могу понять. smile
PM MAIL ICQ   Вверх
SABROG
Дата 15.12.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Глянь пример 2D Painting Example, метод:

Код

 void Widget::animate()
 {
     elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
     repaint();
 }


Т.е. идет связка repaint() + QTimer(). repaint() нельзя использовать в методе paint, т.к. это вызовет рекурсию.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 16.12.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



В силу своих про знаний QT не могу понять что это делает 
Код

qobject_cast<QTimer*>(sender())->interval())


??

PM MAIL ICQ   Вверх
mes
Дата 16.12.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Moby @  16.12.2008,  00:30 Найти цитируемый пост)
В силу своих про знаний QT не могу понять что это делает 

приводит sender (указатель на объект-инициатор вызвавший слот ) к типу QTimer* (если возможно) и вызывает для него метод QTimer::interval().

однако если animate() будет вызвана не как слот , а как простая функция, или инициатором будет не потомок QTimer, то qobject_cast<QTimer*>() вернет NULL. 


--------------------
PM MAIL WWW   Вверх
Moby
Дата 16.12.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



О как хитро. Спасибо. 
PM MAIL ICQ   Вверх
Moby
Дата 14.1.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Возник вопрос о создании Pixmap'a с заданым размером.

Вот когда мне надо было создать Pixmap и загрузить картинку на него я делал так - в *.h писал QPixmap img а в *.cpp я писал img.load(.....).

Вопрос - как мне создать пиксмап заданного размера?

В *.h я написал QPixmap img1, в *.cpp стал писать img1(600,600,-1, ?.....?)  

Не могу понять какой четвертый параметр должен быть. Пишу QPixmap ::NoOptim выдает ошибку. Может не то пишу?

'NoOptim' : is not a member of 'QPixmap'    
 'NoOptim' : undeclared identifier    

И второй вопрос почему при вызове img.Resize(41,43) ругается

'resize' : is not a member of 'QPixmap'
PM MAIL ICQ   Вверх
mes
Дата 14.1.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Moby @  14.1.2009,  14:46 Найти цитируемый пост)
Возник вопрос о создании Pixmap'a с заданым размером.

не мешало бы для начала с этим ознакомится : http://doc.trolltech.com/4.4/qpixmap.html



--------------------
PM MAIL WWW   Вверх
SABROG
Дата 14.1.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Moby @  14.1.2009,  15:46 Найти цитируемый пост)
Вопрос - как мне создать пиксмап заданного размера?


Код

QPixmap pix(100, 100);


Если потом воспользуешься загрузкой картинки, то размер сбросится на размер картинки. Нужно, чтобы рисовать собственную картинку.

Если надо картинке задать размер, то:

Код

QPixmap pix("file.png");
pix.scaled(QSize(100, 100));




--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 19.1.2009, 16:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



Это наверно мой последний вопрос будет по этой тематике. :)

Я уже спрашивал, как мне реализовать зависимость скорости от времени. 

Предложенный вариант я как-то не разобрал. Хотя наверно стоит. Но тут уже суть в другом возникла, вроде придумал что-то, а работает не так как надо.

Вот есть два варианта как я изменил функцию paintEvent
Код

void Class::paintEvent(QPaintEvent *event)
{    
    
    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()), this, SLOT(moving()));
    
    
    QPainter painter(this);
    painter.drawPixmap(x+m-img.height()/2,y+m-img.height()/2,img1);
    
    timer->start(1000);
    update();
}

void Class::moving()
{
    m++;
}


В этом случае просто получается вот что - первую секунду объект не движится, потом начинает двигаться и каждую секунду всё быстрее, почему????? И вообще почему объект двигается? Ведь m меняется только после ого как таймер 1-у секунду отработает или этот update() в paintEvent обновляет все, а не только paintEvent? 

Потом я решил синхронизировать update() с таймером. 

Код

void Class::paintEvent(QPaintEvent *event)
{    
    
    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()), this, SLOT(moving()));
    
        QTimer *timer1 = new QTimer(this);
    connect(timer1,SIGNAL(timeout()), this, SLOT(update()));
    
    QPainter painter(this);
    painter.drawPixmap(x+m-img.height()/2,y+m-img.height()/2,img1);
    
    timer->start(1000);
        timer1->start(1000);
    
}

void Class::moving()
{
    m++;
}


И тут как раз получилось, то что я ожидал в первом случае. Т.е. проходит секунда и объект перемещается и остается на новом месте, проходит еще секунда и он на вдвое большее расстояние перемещается.


PM MAIL ICQ   Вверх
SABROG
Дата 19.1.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Расскажи, что ты хочешь сделать.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
pan2004
Дата 19.1.2009, 16:30 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



Цитата(Moby @  19.1.2009,  16:10 Найти цитируемый пост)
и каждую секунду всё быстрее, почему

Потому что ты в бесконечном цикле создаешь все новые и новые таймеры, которые просто давят своим количеством, дергая сигнал намного чаще, чем ты ожидаешь(вообще создавать таким образом таймеры, ла еще и в paintEvent- та еще ЖЕСТЬ).
А во втором случае: зачем создавать два таймера, когда можно обойтись одним? К одному сигналу можно кучу слотов нацепить...

Добавлено через 2 минуты и 21 секунду
и вообще есть функция QObject::startTimer(), которая подойдет имхо в твоем случае намного лучше

Добавлено через 3 минуты и 47 секунд
не говоря о том что память с каждым новым таймером будет утекать...


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Moby
Дата 19.1.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



pan2004, спасибо, сейчас попробую создавать таймер не в paintEvent. 

SABROG, наверно и правду стоило было сперва объяснить нормально, что я хотел сделать.

Код

void Class::paintEvent(QPaintEvent *event)
{    
    QPainter painter(this);
    painter.drawPixmap(x+m-img.height()/2,y+m-img.height()/2,img1);
    
    m++;
    //m+=2; 

    update();
}


Ну вот, тут просто рисуется пиксмап и двигается. Как часто обновляется paintEvent не знаю, но допустим 0.5 сек. И получается, что у меня каждые 0.5 сек объект перемешается на 1-н пиксель.

Мне надо сделать регулировку скорости. Я сперва просто тупа сделал так, что можно было вручную ставить на сколько m будет изменяться. С одной стороны вот оно решение. Но тогда если объект перемещается больше чем на 2-а пикселя появляется эффект дёрганья.

Как мне это нормально реализовать. 

Что мне на предудушей страничке советовали пока не могу приспособить к моей проге. Не очень понял тот пример, ну где 
Код

void Widget::animate()
{
    elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
    repaint();
}


Посоветуйте плиз. 

Это сообщение отредактировал(а) Moby - 19.1.2009, 16:48
PM MAIL ICQ   Вверх
pan2004
Дата 19.1.2009, 16:54 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



Цитата(Moby @  19.1.2009,  16:47 Найти цитируемый пост)
Как часто обновляется paintEvent не знаю, но допустим 0.5 сек. И получается, что у меня каждые 0.5 сек объект перемешается на 1-н пиксель.

Нельзя расчитывать, что ивенты будут вызываться постоянное колво раз в секунду. Здесь update() в паинт ивенте приводит к бесконечному циклу.
И вообще хватит изобретать велосипеды. Есть Graphics View и есть QTimeLine. посмотри этот класс.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
SABROG
Дата 19.1.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Это кусок выдранный с 2D Painting Example. Там создается таймер на 50 мс. Это 20 фреймов в секунду (1000/50).
В elapsed вычисляется время прошедшее c последней перерисовки. Затем это значение используется, чтобы корректировать радиус круга. По модулю 1000 все значения будут в пределах 0-1000. Например если прошло 1002 мс, то elapsed будет 2. По логике 1000 мс - полный цикл + 2 мс, а это значит, что для рисовальщика фиолетово прошел полный цикл и 2мс или всего 2мс, т.к. картинка будет одной и той же. 

В общем часть с elapsed можешь опустить. Ориентируйся на таймер в 50 мс (20 фреймов в секунду, почти как видео) и метод repaint(), который будет незамедлительно вызывать твой переопределенный paintEvent, в котором ты и будешь что-то рисовать.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 19.1.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



pan2004, спасибо за наводку, буду смотреть.

SABROG, пробую! 

И так, вот результаты. 

Из пары Graphics View и QTimeLine я использовал только QTimeLine вот с таким вод кодом.

Код

QTimeLine *timeLine = new QTimeLine(20000, this);
timeLine->setFrameRange(0, 600);    
connect(timeLine, SIGNAL(frameChanged(int)), this, SLOT(moving(int )));

void Class::moving()
{
    m++;
}


В setFrameRange(0, 600); я грубо говоря выставляю расстаяние на которое должен двигаться объект. А конструкторе я выставляю duration-продолжительность, за которое он должен пройти это расстаяние.

Я понимаю что в setFrameRange(0, 600); выставляется кол-во кадров, но это я думаю можно и так использовать. В итоге получается то что надо, но.... Объект начинает двигаться с замедлением, ну как бы пол секунды идет разгон, и то же самое в конце получается. Постепеная остановка. Не знаю, может я что то не то делаю, но вот так вот.

Дальше я вчитался в то что написал SABROG и сделал так.

Код

QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()), this, SLOT(repaint()));
timer->start(50);

void For_Frogs::paintEvent(QPaintEvent *event)
{    
    QPainter painter(this);
    painter.begin(this);
    painter.drawPixmap(x+m-img.height()/2,y+m-img.height()/2,img);
    painter.end();
    m++;
}


Все работает так как надо. В этой связке я правильно понимаю, что каждые 50 мс происходит движение объекта на 1-н пиксель?
PM MAIL ICQ   Вверх
pan2004
Дата 19.1.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



Цитата(Moby @  19.1.2009,  20:21 Найти цитируемый пост)
Объект начинает двигаться с замедлением, ну как бы пол секунды идет разгон, и то же самое в конце получается. Постепеная остановка.

Почитай ассистент. Там сказано, что по умолчанию параметр QTimeLine::сurveShape установлен в EaseInOutCurve(как раз такое поведение).
Соответственно, его можно и изменить(например сделать линейным)


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Moby
Дата 19.1.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 6.10.2008

Репутация: нет
Всего: нет



pan2004, спасибо!

P.S. А вот такой вопрос. 

Почему у меня не запускается прога не через Студию? В папке Debug есть ехе'шник, жму на него а говорит "Приложению не удалось запуститься, поскольку QtCore4d.dll не был найден."

Как с этим бороться, мне надо будет завтра\после завтра эту чудесную бета-альфа-прогу запускать на другом ПК.

Я вот сделал так.

Мой компутер -> свойства -> вкладка Дополнительно - > кнопка Переменные среды -> раздел Системные переменные -> переменная Path -> изменить и всталяеш туда пути "C:\QT\4.4.3\;C:\QT\4.4.3\bin\;"

А без это никак не обойтись? Неужели QT должно стоять и на том ПК, на котором собиаются запускать программу?

Это сообщение отредактировал(а) Moby - 19.1.2009, 22:07
PM MAIL ICQ   Вверх
JackYF
Дата 19.1.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



MobyМодератор: Пожалуйста, один топик - один вопрос.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1282 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.