crossplatform.ru

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


  Ответ в Ничего не получается с рисованием на виджете
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
TiiL Дата 10.6.2011, 14:15
  Здравствуйте, обьясните мне не догоняющему, где в приложении описанном в этой теме на первой странице задаютцася координаты графика.

и возможно ли сделать оси координат ЛОгарифмическими?


ЗЫ: было бы хорошо еслиб ткнули носом хотябы в функции которые надо изменить под лагорифмические оси... СПасибо
kwisp Дата 26.12.2008, 16:04
 
#include <QtGui>

class PainterPathWidget : public QWidget {
protected:
    virtual void paintEvent(QPaintEvent* e)
    {
        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);    
    QWidget window;
    PainterPathWidget wgt;    
    QPushButton q1("exit");
    QVBoxLayout lay1(&window);
    wgt.setMinimumSize(200,200);
    lay1.addWidget(&q1);
    lay1.addWidget(&wgt);

    QObject::connect(&q1,SIGNAL(clicked()),&app,SLOT(quit()));    

    window.show();
    return app.exec();
}


найди 10 отличий:)
все работает.
почитай если интересно про иерахию классов и осовобождение памяти в Qt.
guest13 Дата 26.12.2008, 15:21
  вопрос такой....
имеется такой код
Раскрывающийся текст
#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;    
    
    QWidget window;

    QPushButton *q1=new QPushButton("exit");
    
    QVBoxLayout *lay1=new QVBoxLayout;
    wgt.setMinimumSize(200,200);
    lay1->addWidget(q1);
    lay1->addWidget(&wgt);
    window.setLayout(lay1);
        
    QObject::connect(q1,SIGNAL(clicked()),&app,SLOT(quit()));    

    window.show();
    return app.exec();
}

нормально компилится запускается, но при закрытии выдает следующую ошибку
Прикрепленное изображение

что можете сказать по этому поводу?
Litkevich Yuriy Дата 20.5.2008, 7:45
  выходит так
Don Дата 19.5.2008, 20:38
  Смотрите, все что рисуется на форме должно находится в функции paintEvent(). Допустим рисуются какие-то объекты по предворительным рсчётам, которые проводятся в другой функции. И если вызвать в этой фукции функцию repaint(), то происходит перерисовка с учётом расчётов. Получется функция repaint() вызывает функцию paintEvent(). Так?
Litkevich Yuriy Дата 24.4.2008, 21:19
  смотри мой предыдущий пост.

startAngle и spanAngle должны быть определены в ед. 1/16-ой градуса, т.е. полная окружность равна 5760 (16 * 360). Положительное значение углов означает направление против часовой стрелки, а отрицательное - по часовой. Нуль градусов находится в позиции 3 часа.
Don Дата 24.4.2008, 21:09
 
Цитата(Litkevich Yuriy @ 24.4.2008, 20:39) *
Смотри для начала рабочий пример в каталоге %QTDIR%\examples\painting\basicdrawing, там есть дуги, а тут его описание Basic Drawing Example


Вот тот код который рисует дугу из примера:
QRect rect(10, 20, 80, 60) // я так понял задаётся прямоугольник в который вписывается эллипс
int startAngle = 30 * 16;
int arcLength = 120 * 16;
painter.drawArc(rect, startAngle, arcLength);

Ввёл в свою прогу, нарисовалась такая же дуга. Но как работать с этими углами? Шаманю со множителями, получаются куски эллипса, причём каждый раз кординально разные. Мне нужно нарисовать просто улыбочку.
Litkevich Yuriy Дата 24.4.2008, 21:07
  Смотри для начала рабочий пример в каталоге %QTDIR%\examples\painting\basicdrawing, там есть дуги, а тут его описание Basic Drawing Example

руководство по функции:
Цитата
void QPainter::drawArc ( const QRectF & rectangle, int startAngle, int spanAngle )
Draws the arc defined by the given rectangle, startAngle and spanAngle.
The startAngle and spanAngle must be specified in 1/16th of a degree, i.e. a full circle equals 5760 (16 * 360). Positive values for the angles mean counter-clockwise while negative values mean the clockwise direction. Zero degrees is at the 3 o'clock position.

Пример, от туда
 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawArc(rectangle, startAngle, spanAngle);

сравни цифры startAngle и spanAngle, со своими
остальное должно работать,
Модификация примера Макса Шлее:
virtual void paintEvent(QPaintEvent*)
{
    int startAngle = 30 * 16;    //    480
    int spanAngle = 120 * 16;    //    
    
    QPainter painter(this);
    painter.drawArc(40, 40, 50, 50, startAngle, spanAngle);
}
Don Дата 24.4.2008, 20:37
 
Цитата(Litkevich Yuriy @ 24.4.2008, 20:28) *
а как ты это делал? приведи код


Ну вот вся прога:

class Life : public QWidget 
{
protected:
    virtual void paintEvent(QPaintEvent*)
    {
        QPainter paint(this);
        paint.drawArc(40,40,50,50,25,25);  <======================
                        
                       //пытался ещё через Безье, но никогда так не делал и не знаю, что обозначают все передаваемые значения
                       QPainterPath path;                          
        path.moveTo( 80,320);        
        path.cubicTo(200,400,320,400,480,320);
        paint.drawPath(path);
                
    }
public:
    Life(QWidget* pwgt = 0) : QWidget(pwgt)
    {
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    QWidget window;
    Life a;
    QHBoxLayout lay;
    lay.addWidget(&a);
    window.setLayout(&lay);
    window.show();
    return app.exec();
}
Litkevich Yuriy Дата 24.4.2008, 20:28
  а как ты это делал? приведи код
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 23.5.2022, 23:35