Code: Alles auswählen
void paintEvent(...) {
QPainter painter;
void paintGrid(&painter);
}
Code: Alles auswählen
void paintEvent(...) {
QPainter painter;
void paintGrid(&painter);
void paintSelectionBox(&painter);
}
Code: Alles auswählen
void paintEvent(...) {
QPainter painter;
void paintGrid(&painter);
}
Code: Alles auswählen
void paintEvent(...) {
QPainter painter;
void paintGrid(&painter);
void paintSelectionBox(&painter);
}
?!? Sry, aber warum nochmal sollte das nicht gehen?slash-ex hat geschrieben:ich wollte die zweite funktion, von der ersten entkoppeln. dasist bei einem paintevent aber nicht möglich.
ja das mache ich ja auch, aber durch das paintevent wird halt jedesmal auch die erste funktion neu aufgerufen, wenn ich die zweite benutzen möchte.Du kannst so viele Einzelfunktionen mit nem QPainter als Parameter in deinem paintEvent() aufrufen wie du willst.
Code: Alles auswählen
/*
* protected functions
*/
void SelectorWidget::paintEvent ( QPaintEvent * /*event*/ ) {
QPainter painter(this);
QPen pen; // creates a default pen
/*
* rechne die größe des Zeichenbereiches aus
*/
m_iWinWidth = m_iNumOfFrames * m_rRectSize.width();
m_iWinHeight = (m_iNumTracks+1) * m_rRectSize.height();
/*
* zeichne für jeden Track den Namen in die ersten 250Pix
* dann zeichne die Kastenansicht
*/
QPoint pointTitles(m_rRectSize.x()+15, m_rRectSize.y() + m_rRectSize.height()/2+4); // Position für den Titel des Tracks
QPoint pointRects(m_iLabelSize, m_rRectSize.y()+0); // Position für die Kastenansicht (etwas weiterrechts)
/*
* LookAt Track zeichnen
*/
painter.drawText(pointTitles, "LookAt's"); // zeichne den Titel des LookAt Tracks
DrawLookAtTrack(&painter, pointRects);
pointTitles.setY(pointTitles.y() + m_rRectSize.height() ); // wechsle die Zeile je nach breite der Kastenansicht
pointRects.setY(pointRects.y() + m_rRectSize.height() ); // wechsle die Zeile je nach breite der Kastenansicht
/*
* Scene Tracks zeichnen
*/
for(int i = 0; i < m_iNumTracks; i++) {
if(m_lTrackNames.size() > i) {
painter.drawText(pointTitles, m_lTrackNames.at(i) ); // zeichne den Titel der Scene-Tracks
}
SelectorWidget::DrawSceneTracks(&painter, pointRects);
pointTitles.setY(pointTitles.y() + m_rRectSize.height() ); // wechsle die Zeile je nach breite der Kastenansicht
pointRects.setY(pointRects.y() + m_rRectSize.height() ); // wechsle die Zeile je nach breite der Kastenansicht
}
/*
* Zeichne Rahmen
*/
pen.setWidth(2);
pen.setBrush(Qt::black);
painter.setPen(pen);
painter.drawRect(m_rRectSize.x() + m_iLabelSize, m_rRectSize.y(), m_iWinWidth, m_iWinHeight);
painter.drawRect(m_rRectSize.x(), m_rRectSize.y(), m_iWinWidth + m_iLabelSize, m_iWinHeight);
/*
* Zeichne Auswahlrahmen
*/
SelectorWidget::DrawSelectionRect(&painter);
}Code: Alles auswählen
void SelectorWidget::DrawSelectionRect(QPainter *pPainter) {
QPen pen; // creates a default pen
pen.setWidth(1);
pen.setBrush(Qt::red);
pPainter->setPen(pen);
int startX;
int startY;
QPoint mouseDelta;
if(m_pMouseMove.x() >= m_pMouseDown.x() && m_pMouseMove.y() >= m_pMouseDown.y() ) {
startX = /*m_rRectSize.x() + */ m_iLabelSize + m_pMouseDown.x() * m_rRectSize.width();
startY = m_rRectSize.y() + 0 + m_pMouseDown.y() * m_rRectSize.height();
mouseDelta = m_pMouseMove - m_pMouseDown;
mouseDelta += QPoint(1, 1);
}
else if(m_pMouseMove.x() <= m_pMouseDown.x() && m_pMouseMove.y() <= m_pMouseDown.y() ) {
startX = /*m_rRectSize.x() + */ m_iLabelSize + m_pMouseMove.x() * m_rRectSize.width();
startY = m_rRectSize.y() + 0 + m_pMouseMove.y() * m_rRectSize.height();
mouseDelta = m_pMouseDown - m_pMouseMove;
mouseDelta += QPoint(1, 1);
}
else if(m_pMouseMove.x() >= m_pMouseDown.x() && m_pMouseMove.y() <= m_pMouseDown.y() ) {
startX = /*m_rRectSize.x() + */ m_iLabelSize + m_pMouseDown.x() * m_rRectSize.width();
startY = m_rRectSize.y() + 0 + m_pMouseMove.y() * m_rRectSize.height();
mouseDelta.rx() = m_pMouseMove.x() - m_pMouseDown.x();
mouseDelta.ry() = m_pMouseDown.y() - m_pMouseMove.y();
mouseDelta += QPoint(1, 1);
}
else if(m_pMouseMove.x() <= m_pMouseDown.x() && m_pMouseMove.y() >= m_pMouseDown.y() ) {
startX = /*m_rRectSize.x() + */ m_iLabelSize + m_pMouseMove.x() * m_rRectSize.width();
startY = m_rRectSize.y() + 0 + m_pMouseDown.y() * m_rRectSize.height();
mouseDelta.rx() = m_pMouseDown.x() - m_pMouseMove.x();
mouseDelta.ry() = m_pMouseMove.y() - m_pMouseDown.y();
mouseDelta += QPoint(1, 1);
}
int width = mouseDelta.x() * m_rRectSize.width();
int height = mouseDelta.y() * m_rRectSize.height();
if(m_eCurrentMouseAction == ePressDown)
pPainter->drawRect(startX, startY, m_rRectSize.width(), m_rRectSize.height() );
if(m_eCurrentMouseAction & eSelecting)
pPainter->drawRect(startX, startY, width, height);
}Code: Alles auswählen
void SelectorWidget::mouseMoveEvent ( QMouseEvent * event ){
if(m_eCurrentMouseAction == ePressDown)
m_eCurrentMouseAction = MouseAction(ePressDown | eSelecting);
QPoint point = event->pos();
int currentColumn;
int currentRow;
int curX = point.x() - m_iLabelSize; // ist um 150 Pixel wegen Label verschoben
int curY = point.y() - m_rRectSize.y();
currentColumn = curX / m_rRectSize.width();
currentRow = curY / m_rRectSize.height();
if(currentRow < m_iNumTracks+1 && currentColumn < m_iNumOfFrames && currentRow >= 0 && currentColumn >= 0) {
m_pMouseMove = QPoint(currentColumn, currentRow);
std::cout << "MouseM: X=" << currentColumn << "; Y=" << currentRow << std::endl;
}
SelectorWidget::update();
QWidget::mouseMoveEvent ( event );
}Code: Alles auswählen
void SelectorWidget::DrawSceneTracks(QPainter *pPainter, QPoint startPt) {
QPen pen; // creates a default pen
/*
* Zeichne einzelne Blöcke
*/
pen.setWidth(1);
pen.setBrush(Qt::black);
pPainter->setPen(pen);
for(int i = 0; i < m_iNumOfFrames; i++) {
QRect rect(startPt.x() + i*m_rRectSize.width(), startPt.y(), m_rRectSize.width(), m_rRectSize.height());
if(m_rRectSize.width() > 1)
pPainter->drawRect(rect);
pPainter->fillRect(rect, QColor(192, 128, 0, 200) );
}
}