Qt 4.7.3 Eigener Designer

jkallup

Erfahrenes Mitglied
Hallo,

versuche gerade mit Qt 4.7.3 MingW32 C++ einen Eigenen Designer zu basteln.
Alles läuft schonmal gut, Haupt Widget (Designer) und PushButton lassen sich darstellen und verschieben - also der Pushbutton.
Was ich nicht hinbekomme, ist folgendes:
in der paint event methode zeichne ich ein rechteck und 8 kleine blöcke wie man das vom designer anderer Sprachen auch kennt.
Das MouseMoveEvent arbeitet auch soweit recht gut, also wenn man oben links auf ein block stößt, verändert sich der mauscursor.
soweit so gut.
wenn ich nun den designer anklicke und dessen größe ändern möchte geht das nur mit unten recht oder mitte unten gut.
mitte oben gibt es schon schwierigkeiten.
gibt es da was zu beachten?
hier der code:
danke für hilfe

Code:
void DragWidget::mouseReleaseEvent(QMouseEvent *event)
{
  DesignerPushButton *child = qobject_cast<DesignerPushButton*>(childAt(event->pos()));
  if (!child)
  {
    paintMainForm = 1;
    update();
    if (event->button() == Qt::LeftButton)
    {
      int px = event->x();
      int py = event->y();

      if (dclick == MC_CENTER_DOWN /* this works */ || dclick == MC_CENTER_UP /* this not work*/ )
      {
        resize(size().width(),py);
      } else if (dclick == MC_RIGHT_DOWN)
      {
        resize(px,py); // this line works
      } else if (dclick == MC_CENTER_RIGHT)
      {
        resize(px,size().height());
      } move(2,2);
    }
  }
}

void DragWidget::mouseMoveEvent(QMouseEvent *event)
{
  int xp = event->x();
  int yp = event->y();
  int rs = 5;
  int cp = 0;

  char buffer[100];
  sprintf(buffer,"%d - %d",xp,yp);
  label->setText(QString(buffer));
  label->resize(120,20);
  label->update();

  if ((xp >= cp  && xp <= rs) && (yp >= cp && yp <= rs))
  {
    dclick = MC_LEFT_UP;
    setCursor(QCursor(Qt::SizeFDiagCursor));
  } else
  if ((xp >= size().width ()-rs && xp <= size().width ())
  &&  (yp >= size().height()-rs && yp <= size().height()))
  {
    setCursor(QCursor(Qt::SizeFDiagCursor));
    dclick = MC_RIGHT_DOWN;
  } else
  if ((xp >= cp && xp <= rs)
  &&  (yp >= size().height()-rs && yp <= size().height()-rs))
  {
    dclick = MC_LEFT_DOWN;
    setCursor(QCursor(Qt::SizeBDiagCursor));
  } else
  if (((xp >= size().width ()-rs && xp <= size().width())
  &&   (yp >= cp && yp <= rs)))
  {
    dclick = MC_UP_RIGHT;
    setCursor(QCursor(Qt::SizeBDiagCursor));
  } else
  if ((xp >= (size().width() / 2)-rs && xp <= (size().width() / 2))
  &&  (yp >= cp && yp <= rs))
  {
    dclick = MC_CENTER_UP;
    setCursor(QCursor(Qt::SizeVerCursor));
  } else
  if ((xp >= (size().width() / 2)-rs && xp <= (size().width() / 2))
  &&  (yp >= size().height()-rs && yp <= size().height()))
  {
    dclick = MC_CENTER_DOWN;
    setCursor(QCursor(Qt::SizeVerCursor));
  } else {
    //setCursor(QCursor(Qt::ArrowCursor));
    //dclick = 0;
  }
}
 
Zurück