Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] Помогите! Рисование с помощью QPixmap, очень нужна помощь шарящего человека 
:(
    Опции темы
Tutta
  Дата 16.5.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята, очень нужна помощь. С qt знакома плохо, только начинаю. Написала рисование карандашиком на QPixmap, но проблема в том, то на главное окно я не могу добавить никаких кнопок и вообще виджетов. Подскажите как можно засунуть QPixmap в другой виджет на главном окне, чтоб он не мешал создавать кнопки???


Код

#include <QApplication>
#include <QPainter>
#include <QImage>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QWidget>


class Paint : public QWidget
{

public:
    Paint()
    {
        pixmap_ = QPixmap( 4096, 4096 );
        pixmap_.fill( 0xffffffff);
        pen_ = QPen( QBrush( Qt::green), 5.0f );
    }

protected:
    void mousePressEvent( QMouseEvent * e )
    {
        if ( e->button() == Qt::LeftButton )
        {
            QPainter p( &pixmap_ );
            p.setPen( pen_ );
            p.drawPoint( e->pos() );
            p.end();

            lastPoint_ = e->pos();

            update();
        }
    }

    void mouseMoveEvent( QMouseEvent * e )
    {
        if ( e->buttons() & Qt::LeftButton )
        {
            QPainter p( &pixmap_ );
            p.setPen( pen_ );
            p.drawLine( lastPoint_, e->pos() );
            p.end();

            lastPoint_ = e->pos();

            update();
        }
    }

    void paintEvent( QPaintEvent * )
    {
        QPainter p( this );
        p.setCompositionMode( QPainter::CompositionMode_Source );
        p.drawPixmap( QPoint(), pixmap_ );
    }

private:
    QPen pen_;
    QPixmap pixmap_;
    QPoint lastPoint_;
};




int main( int argc, char ** argv )
{
    QApplication app( argc, argv );

    Paint point;
    point.show();
    

    return app.exec();
}


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


Hacker
****


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

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



Цитата(Tutta @  16.5.2009,  15:42 Найти цитируемый пост)
на главное окно я не могу добавить никаких кнопок и вообще виджетов

Как это выражается? Не умеешь добавлять или их не видно при добавлении?

Добавлено @ 15:51
Цитата(Tutta @  16.5.2009,  15:42 Найти цитируемый пост)
Подскажите как можно засунуть QPixmap в другой виджет на главном окне, чтоб он не мешал создавать кнопки???


Переопределить paintEvent только у дочернего виджета, а кнопки добавлять главному окну.

Можно попробовать вызывать оригинальный обработчик, только сначала заменить это:

Код

void paintEvent( QPaintEvent *)

на это
Код

void paintEvent( QPaintEvent *e)


и добавить это в конец paintEvent'a
Код

QWidget::paintEvent(e);


Это сообщение отредактировал(а) SABROG - 16.5.2009, 15:56


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


Новичок



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

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



Ну да,я имела ввиду что кнопок не видно)
PM MAIL   Вверх
SABROG
Дата 16.5.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(Tutta @ 16.5.2009,  15:59)
Ну да,я имела ввиду что кнопок не видно)

Скорее всего потому, что ты переопределила paintEvent и не даешь дочерним виджетам/кнопкам/окнам себя нарисовать, т.к. не вызываешь оригинальные обработчик. Следует помнить, что если оригинальный обработчик вызывать вначале, то сначала будут нарисованы все дочерние виджеты, а поверх будет рисоваться твоя картинка и естественно затирать виджеты. Если же вызывать оригинальный обработчик в конце метода, то дочерние виджеты будут рисоваться поверх твоей картинки, т.е. линия от карандашека будет скрываться под дочерними виджетами.


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


Новичок



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

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



Прости но я плохо поняла. Что мне нужно делать дальше если например я хочу просто отобразить кнопку, она ничего не делает, просто чтоб была на главном окне. Что писать в коде?
PM MAIL   Вверх
SABROG
Дата 16.5.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(Tutta @ 16.5.2009,  16:11)
Прости но я плохо поняла. Что мне нужно делать дальше если например я хочу просто отобразить кнопку, она ничего не делает, просто чтоб была на главном окне. Что писать в коде?

Это

Код

    void paintEvent( QPaintEvent *e)
    {
        QPainter p( this );
        p.setCompositionMode( QPainter::CompositionMode_Source );
        p.drawPixmap( QPoint(), pixmap_ );
        p.end();
        QWidget::paintEvent(e);
    }



Это сообщение отредактировал(а) SABROG - 16.5.2009, 16:16


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


Новичок



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

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



Пишет что в проекте нет класса который бы использовал форму. Это что ж получается я не могу добавить никаких виджетов?
PM MAIL   Вверх
SABROG
Дата 16.5.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(Tutta @  16.5.2009,  16:22 Найти цитируемый пост)
Пишет 

Кто пишет  smile ? Это ты с английского перевела или у тебя компилятор мягкотелых (Visual Studio) ? Откуда у тебя вообще этот код? smile

Понятия не имею, чтобы могла означать эта ошибка, когда в коде явно есть форма Paint и она используется:

Код

    Paint point;
    point.show();


P.S.: выкинь свою книжку


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


Новичок



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

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



У меня qt интегрирован в visual studio) пишу там) Да , окошко открывается и в нем сожно рисовать, с этим не было проблем, НО я не могу добавлять кнопки, хоть ты тресни. Если я открываю form file и там хочу добавить кнопочку , ответ - нет класса где используется эта форма. И вот поэтому я не понимаю, как быть. То ли все неправильно и я ничего не добьюсь, то ли как то совсем по особенному нужно QPixmap использовать.
PM MAIL   Вверх
SABROG
Дата 16.5.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Ага, плавно перешли к моему первому вопросу

Цитата

Не умеешь добавлять или...


Если виджет создаешь в коде, а не через формоклепку где мышкой надо таскать кнопки, то и добавлять новые виджеты надо через код - cpp'шными инструкциями, командами, кодом. Не знаю как тебе еще сказать, так короче:

Код

Paint point;
QPushButton btn("I Button", &point);


Это сообщение отредактировал(а) SABROG - 16.5.2009, 16:40


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


Новичок



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

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



Понятно.. как раз все этих замарочек хотелось избежать "формоклепкой".. я никаких команд создания виджетов не знаю просто. 
PM MAIL   Вверх
SABROG
Дата 16.5.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(Tutta @  16.5.2009,  16:46 Найти цитируемый пост)
я никаких команд создания виджетов не знаю просто.  

А как, извини, ты собираешься в будущем писать приложения с динамическим интерфейсом?

По сути формоклепка записывает расположение виджетов и их параметры в xml (ui) файл, а потом на основе его компилятор генерит те самые команды, которые мы могла бы вводить вручную.

Если так хочется мышкой кнопочки потаскать, то надо делать рефакторинг (переписывать) приложение.


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

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

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


 




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


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

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