crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Гость_Тёма_*
сообщение 10.10.2007, 7:49
Сообщение #1





Гости








    


Как вообще рисовать в Qt?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 24.4.2008, 17:16
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Из книжки Макса Шлее:
#include <QtGui>

// ======================================================================
class PainterPathWidget : public QWidget {
protected:
    virtual void paintEvent(QPaintEvent*)
    {
        QPainterPath path;
        QPointF      pt1(width(), height() / 2);
        QPointF      pt2(width() / 2, -height());
        QPointF      pt3(width() / 2, 2 * height());
        QPointF      pt4(0, height() / 2);
        path.moveTo(pt1);
        path.cubicTo(pt2, pt3, pt4);

        QRect rect(width() / 4, height() / 4, width() / 2, height() / 2);
        path.addRect(rect);
        path.addEllipse(rect);

        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setPen(QPen(Qt::blue, 6));
        painter.drawPath(path);    
    }

public:
    PainterPathWidget(QWidget* pwgt = 0) : QWidget(pwgt)
    {
    }
};

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

    PainterPathWidget wgt;

    wgt.resize(200, 200);
    wgt.show();

    return app.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 24.4.2008, 17:31
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


void Plotter::paintEvent(QPaintEvent * /* event */)
{
    QStylePainter painter(this);
    painter.drawPixmap(0, 0, pixmap);

    if (rubberBandIsShown) {
        painter.setPen(palette().light().color());
        painter.drawRect(rubberBandRect.normalized()
                                       .adjusted(0, 0, -1, -1));
    }

    if (hasFocus()) {
        QStyleOptionFocusRect option;
        option.initFrom(this);
        option.backgroundColor = palette().dark().color();
        painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
    }
}

void Plotter::drawGrid(QPainter *painter)
{
    QRect rect(Margin, Margin,
               width() - 2 * Margin, height() - 2 * Margin);
    if (!rect.isValid())
        return;

    PlotSettings settings = zoomStack[curZoom];
    QPen quiteDark = palette().dark().color().light();
    QPen light = palette().light().color();

    for (int i = 0; i <= settings.numXTicks; ++i) {
        int x = rect.left() + (i * (rect.width() - 1)
                                 / settings.numXTicks);
        double label = settings.minX + (i * settings.spanX()
                                          / settings.numXTicks);
        painter->setPen(quiteDark);
        painter->drawLine(x, rect.top(), x, rect.bottom());
        painter->setPen(light);
        painter->drawLine(x, rect.bottom(), x, rect.bottom() + 5);
        painter->drawText(x - 50, rect.bottom() + 5, 100, 15,
                          Qt::AlignHCenter | Qt::AlignTop,
                          QString::number(label));
    }
    for (int j = 0; j <= settings.numYTicks; ++j) {
        int y = rect.bottom() - (j * (rect.height() - 1)
                                   / settings.numYTicks);
        double label = settings.minY + (j * settings.spanY()
                                          / settings.numYTicks);
        painter->setPen(quiteDark);
        painter->drawLine(rect.left(), y, rect.right(), y);
        painter->setPen(light);
        painter->drawLine(rect.left() - 5, y, rect.left(), y);
        painter->drawText(rect.left() - Margin, y - 10, Margin - 5, 20,
                          Qt::AlignRight | Qt::AlignVCenter,
                          QString::number(label));
    }
    painter->drawRect(rect.adjusted(0, 0, -1, -1));
}


painter -> drawLine(100, 200, 200, 400)
- рисование линии
размером (100, 200)!
painter -> drawRect(QRect(10, 10, 40, 40))
- рисование прямоугольника

void Plotter::drawGrid(QPainter *painter)
{
        // тело функции
}
- а вот и переопределение функции paintEvent, которая является виртуальной.

Не понял, чем пример-то плох? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Тёма   Ничего не получается с рисованием на виджете   10.10.2007, 7:49
- - ViGOur   Для того, чтобы рисовать, тебе понадобится переопр...   10.10.2007, 7:56
- - Don   Плиз, выложите кто-нить ПОЛНЫЙ небольшой пример, г...   23.4.2008, 21:52
|- - AD   Цитата(Don @ 23.4.2008, 22:52) Плиз, выло...   23.4.2008, 22:21
- - Andrew Selivanov   Цитата(AD @ 23.4.2008, 23:21) Цитата(Don ...   23.4.2008, 22:40
- - Don   Да уж, маленький примерчик. Какие именно функци...   24.4.2008, 17:07
- - ViGOur   Маленький пример: каким способом проще рисовать по...   24.4.2008, 17:11
- - Litkevich Yuriy   Из книжки Макса Шлее: #include <QtGui> //...   24.4.2008, 17:16
|- - AD   void Plotter::paintEvent(QPaintEvent *...   24.4.2008, 17:31
- - Don   Спасибо! Теперь понял. У меня ещё один вопрос:...   24.4.2008, 17:46
- - Litkevich Yuriy   ну размести рисунок на одном виджете, и воткни его...   24.4.2008, 17:54
- - Don   Понял спасибо! А почеиу текст нужно выводить и...   24.4.2008, 18:23
- - Litkevich Yuriy   Я пишу в кодировке UTF-8, но строковые переменные ...   24.4.2008, 18:27
- - Don   Как нарисовать дугу? Пытался через drawArc(), не п...   24.4.2008, 20:17
- - Litkevich Yuriy   а как ты это делал? приведи код   24.4.2008, 20:28
|- - Don   Цитата(Litkevich Yuriy @ 24.4.2008, 20:28...   24.4.2008, 20:37
- - Litkevich Yuriy   Смотри для начала рабочий пример в каталоге %QTDIR...   24.4.2008, 21:07
|- - Don   Цитата(Litkevich Yuriy @ 24.4.2008, 20:39...   24.4.2008, 21:09
- - Litkevich Yuriy   смотри мой предыдущий пост. startAngle и spanAngl...   24.4.2008, 21:19
- - Don   Смотрите, все что рисуется на форме должно находит...   19.5.2008, 20:38
- - Litkevich Yuriy   выходит так   20.5.2008, 7:45
- - guest13   вопрос такой.... имеется такой код Раскрывающийся ...   26.12.2008, 15:21
|- - kwisp   #include <QtGui> class PainterPathWidget ...   26.12.2008, 16:04
- - TiiL   Здравствуйте, обьясните мне не догоняющему, где в ...   10.6.2011, 14:15


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 12.6.2025, 9:14