Russian Qt Forum
Сентябрь 30, 2024, 12:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Какой алгоритм дейстивий с qpainter...  (Прочитано 3234 раз)
serg_yl
Гость
« : Октябрь 17, 2010, 15:49 »

Всем добрый день или вечер, а кому то уже и ночи.Улыбающийся
Снова вопрос про рисование - qpainter...
Множество статей уже прочитал,  и не как не пойму как реализовать рисование эллипса на виджете (перепробовал множество статей и руководств, в том числе на этом форуме из раздела уроков)? То ли создавать свой новый класс (создать описание в файле *.h, а потом реализовать его в файле название класса*.cpp), а потом уже создать объект этого класса в файле main.cpp? Или можно просто добавить директиву и создать объект класса?

Разъясните плиз куда, чего, и как? Какого алгоритма дейстивий придерживаться?


Записан
marbius
Гость
« Ответ #1 : Октябрь 17, 2010, 16:22 »

Примерно такого:

http://www.prog.org.ru/index.php?topic=13556.msg88375#msg88375

http://doc.trolltech.com/4.7/qpainter.html#drawEllipse
Записан
serg_yl
Гость
« Ответ #2 : Октябрь 19, 2010, 12:11 »

µarbius - спасибо! Очень помагло.
P.S. Вопрос на засыпку, как написать если мне недо н-кол. фигур в связанный список поместить, да еще в дин. памяти и чтобы появлялись при нажатии на кнопку? Шокированный
Записан
marbius
Гость
« Ответ #3 : Октябрь 19, 2010, 14:02 »

НЕ СОВСЕМ по условию, но может такой подход Вас устроит?
Код
C++ (Qt)
#include <QtGui>
 
class myWidget : public QWidget
{
   Q_OBJECT
 
private:
   bool drawObjects;
 
   QGraphicsScene *scene;
 
   void paintEvent(QPaintEvent *e)
   {   if (!drawObjects)
           return;
       QPainter painter(this);
       scene->render(&painter);
   }
 
public:
   explicit myWidget(QWidget *parent = 0)
   {   // Добавляем кнопку
       QPushButton *btn=new QPushButton("Push me",this);
       // устанавливаем положение и размеры кнопки
       btn->setGeometry(10,10,80,20);
       // устанавливаем "обработчик события по нажатию на кнопку"
       connect(btn, SIGNAL(clicked()), this, SLOT(doit()));
 
 
       // пока не выводим свои объекты
       drawObjects=false;
 
 
       // создаем "контейнер"
       scene=new QGraphicsScene();
 
       // добавляем объекты
       scene->addLine(10,10,100,100);
       scene->addEllipse(40,40,30,60);
   }
   ~myWidget()
   {   delete scene;
   }
 
private slots:
   Q_SLOT
   void doit()
   {
       /* обрабатываем нажатие на кнопку */
 
       // устанавливаем флаг "мы хотим хотим нарисовать запомненные объекты"
       drawObjects=true;
       // выводим объекты
       repaint();
   }
 
};
 
#include "main.moc"
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   myWidget w;
   w.setGeometry(80,80,300,300);
   w.show();
 
 
   return a.exec();
}
 
Записан
marbius
Гость
« Ответ #4 : Октябрь 19, 2010, 14:16 »

а если Вы захотите получить доступ к добавленным в сцену элементам, то Вы можете применить такой подход:
Код
C++ (Qt)
QList<QGraphicsItem*> list = scene->items();
 

http://doc.qt.nokia.com/4.7/qgraphicsscene.html#items

Следует учесть, что порядок элементов в полученном в списке будет обратным, т.е. первый добавляемый элемент в сцену в списке будет последним, и наоборот, последний добавленный будет в списке первым.
« Последнее редактирование: Октябрь 19, 2010, 14:28 от µarbius » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.156 секунд. Запросов: 21.