Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно рисовать линии и точки...
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
Shahid
В окне программы необходимо нарисовать, две оси координат...Для этого нужно нарисовать две линии...Пытался, пытался, но ничего так и не рисуется.Подскажите как правильно нужно делать...
molchanoviv
С помощью чего рисовал? С помощью Артура или ОпенГЛ?
Shahid
molchanoviv, Артура :)
Litkevich Yuriy
Shahid, а примеры не помогают?
Examples and Demos -> Painting -> Basic Drawing, выбрать в выпадающем списке Shaps: Points или Line
Shahid
Нет не помогли ((( все равно не получается....
ViGOur
Это делается примерно так:
void myGui::paintEvent ( QPaintEvent * event)
{
   QLineF line(10.0, 80.0, 90.0, 20.0);

   QPainter(this);
   painter.drawLine(line);
}
это пример нарисует косую линию...
Litkevich Yuriy
Цитата(Shahid @ 11.12.2008, 21:58) *
Нет не помогли ((( все равно не получается....
что не получается. говори конкретнее, тогда и помощь прийдет быстрее.
Shahid
Litkevich Yuriy, ну я писал так, и ничего не рисовалось...
#include <QtGui>
#include <time.h>
#include <stdio.h>
#include "mainwindow.h"


MainWindow :: MainWindow()
{

createActions();
createMenus();
createStatusBar();
setWindowIcon(QIcon(":/images/icon.png"));

label1 = new QLabel ( this );
label1->setGeometry ( 20, 30, 420, 30 );
label1->setFont (QFont("Times", 14, QFont::Bold));
label1->setText ( tr("Введите x[0] и нажмите кнопку 'Сгенерировать'"));


authorNameField = new QLineEdit ( this );
authorNameField->setGeometry ( 510, 30, 100, 30 );

QPushButton* signButton = new QPushButton (tr("Сгенерировать..."), this );
connect( signButton, SIGNAL( clicked() ), this, SLOT( makeSignature() ) );
signButton->setStatusTip(tr("Запустить генератор"));
signButton->setGeometry ( 660, 30, 140, 30 );
signButton->show();

QPainter painter(this);
QLine line(10,550,10,50);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::red, 5, Qt::SolidLine, Qt::RoundCap));
painter.drawLine(line);


resize( 1024, 610 );
move (100,100);
}
ViGOur
Нужно рисовать в
void MainWindow::paintEvent ( QPaintEvent * event)
{
   QPainter painter(this);
   QLine line(10,550,10,50);
   painter.setRenderHint(QPainter::Antialiasing, true);
   painter.setPen(QPen(Qt::red, 5, Qt::SolidLine, Qt::RoundCap));
   painter.drawLine(line);
}
Как ты хочешь рисовать в окне, которое еще не создано? :)
Shahid
ViGOur, И где эту часть нужно писать ??? Или как объявлять....Я просто новичек много чего еще не понимаю (((
Litkevich Yuriy
Цитата(Shahid @ 12.12.2008, 20:25) *
Я просто новичек
здается новичек в програмировании вообще.

Shahid, тебе нужно в файл реализации (*.cpp) твоего класса MainWindow (который я бы обозвал MyWidget) добавить ту функцию, которую привел ViGOur. Ну а в файле с интерфейсом (*.h) в объявлении класса добавить строчку:
void paintEvent ( QPaintEvent * event)

в конструкторе класса удалить лишние строчки, т.к. они перехали жить в функцию void MainWindow::paintEvent ( QPaintEvent * event)

Эта функция автоматически вызывается всегда, когда возникает необходимость перерисовать виджет (см. void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected])
AD
Я бы еще добавил, что в h-файле описание выглядит следующим образом

protected:
void paintEvent ( QPaintEvent * event);
Shahid
Огромное всем спасибо, всё получилось...Еще хотелось бы узнать, как нужно оформить, чтобы рисование происходило только при нажатии кнопки... Вот у меня при нажатии кнопки должны выводится графики (точки с определенными координатами)...
Litkevich Yuriy
Shahid, можно сделать слот, который срабатывает при нажатии кнопки. В этом слоте некую переменную, например, paint, переводить в состояние истинно (по-умолчанию ложно). А в обработчике события рисования проверять эту переменную, если ложно, то ничего не далать, а просто выйти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.