Я пытаюсь нарисовать простую двухмерную фигуру в окне QWidget
. Определен paintEvent
, а также определен объект рисования класса QPainter
. Мой рисунок содержит элементы, которые мне нужно рисовать более одного раза в разных местах, такие как линии, текст и т. д. Для этой цели я использую функции для рисования этих линий с различными позициями. Аналогично для текста. Для того, чтобы сделать программу короче, тоже модульная.
Функция paintEvent
вызывает функции, которые используются для расчета и рисования.
Как передать объект художника QPainter
, определенный в paintEvent
, в functions.
например
void Classname::drawText(QString text, int PosX, int PosY, QPainter painter)
{
QSize size=this->size();
QFont times("Helvetica [Cronyx]", 10);
QFontMetrics box(times);
int boxWidth = box.width(text);
int boxHeight = box.height();
painter.setFont(times);
painter.setPen(Qt::white);
painter.drawText(PosX,PosY,text);
}
затем я получаю сообщение об ошибке, когда среда vc++ сообщает мне, что имя типа не разрешено для объекта рисования класса QPainter
.
Если я определяю объект QPainter
painter1, как показано ниже:
void Classname::drawText(QString text, int PosX, int PosY, QPainter painter)
{
QPainter painter1;
QSize size=this->size();
QFont times("Helvetica [Cronyx]", 10);
QFontMetrics box(times);
int boxWidth = box.width(text);
int boxHeight = box.height();
painter.setFont(times);
painter.setPen(Qt::white);
painter.drawText(PosX,PosY,text);
}
программа компилируется, но результата нет.
Это часть кода, я определяю объекты класса QPainter
во всех функциях.
Я прочитал эту тему, но инструкции не Чисто. Должны ли функции begin()
и end()
вызываться во всех случаях рисования или только один раз в функции paintEvent
?
QPicture
. Затем вы просто воспроизводите его в своемpaintEvent
. Другой способ — использоватьQPainterPath
для хранения многократно используемой масштабируемой векторной графики. - person Kuba hasn't forgotten Monica   schedule 04.09.2013