Seite 1 von 1

QWidget, Größe festlegen

Verfasst: 5. Juni 2005 19:43
von Michael L.
Hi,
ich zeichne in einem QWifget einige Rechtecke und möchte, dass das Layout stimmt, die Größe des Wiidgets einstellen. Mit BaseSize funktioniert es nicht, was muss ich nehmen?

Thx im vorraus

Verfasst: 5. Juni 2005 21:55
von lepsai
welche Rechtecke, welches Layout....

Beschreib mal deine Aufgabenstellung bzw. Problem anständig :(

Verfasst: 6. Juni 2005 10:16
von Michael L.
Sry wenn die Informationen nicht reichen. Was ich möchte ist einfach die Größe eines QWidget einstellen.

Ich benutze das PaintEvent und zeichne selber, was ist eigentlich egal, in meinem Fall Rechtecke.(Quadrate in Form einer Matrix angeordnet, formaen also zusammen wieder ein großes Quadrat) Aber aus diesem Grund, da ich selber zeichne, kann Qt nicht die Größe selbst bestimmen.

Ich starte eine QApplication und übergebe eine Instanz dieses Widgets als Hauptfenster und starte diese dann. Es geht alles ausser das das Applicationsfenster zu Groß is ist.

Layout benutze ich keins für das Widget.

Soll ich teile des Quelltextes posten? (Macht den Post immer so lang und das schreckt einige ab)

mfg

Verfasst: 6. Juni 2005 10:38
von lepsai
Du zeichnest also ein Gitter in einem Widget und willst, dass dieses das ganze Fenster einnimmt. Dafür must nur ein Paar zusätzliche Berechungen durchfüren. Du must die Breite und Höhe von einzelnen Gridelementen dynamisch berechnen. Angenommen die Breite des Fensters ist W und Höhe des Fensters ist H, dann gilt:

int cellWidth = W/numberCellsHorizontal;
int cellHeight = H/numberCellsVertical;

mit diesen Werten zeichnest du dann dein Gitter... Diese Berechung gehört dann in resizeEvent(), welches von dir überlaeden werden müsste.

Ich hätte aber an deiner Stelle die schon fertige Qt-Klasse genommen: QGridView...

Verfasst: 6. Juni 2005 10:59
von Michael L.
Ok nun zeig ich den Code: so zeichne ich

Code: Alles auswählen

 int** m_pMatrix;

Code: Alles auswählen

void MatrixDraw::paintEvent(QPaintEvent *l_pEvent)
{
  QPainter l_painter(this);
  int l_iSide = QMIN(width(),height());
  l_painter.setViewport((width()-l_iSide)/2,
			(height()-l_iSide)/2,
			l_iSide,
			l_iSide);
  // Größe an die Anzahl der Elemente anpassen
  l_painter.setWindow(0,0,m_iSize*10,m_iSize*10);
  draw(&l_painter);
}
teil der draw methode

Code: Alles auswählen

QBrush l_qpBrushLight(colorGroup().light());
    QBrush l_qpBrushMidle(colorGroup().mid());

    for(int i=0;i<m_iSize;i++)
    {
      for(int j=0;j<m_iSize;j++)
      {
	// Ist das Feld gesetzt dunkel zeichnen, sonst hell
	if(m_pMatrix[i][j]==0) l_pPainter->setBrush(l_qpBrushLight);
	else l_pPainter->setBrush(l_qpBrushMidle);

	l_pPainter->drawRect((i*10),(j*10),(i+1)*10,(j+1)*10);
      }
    }
es soll also in der Mitte des Fenster, egal welche Auflösung und Form, ein Quadrat gezeichnet werden. In diesem sind die Felder der MAtrix welche gesetzt sind dunkel und die die nicht gesetzt sind hell. Dieses Fenster möchte ich so setzen das es am Anfang ebenfalls quadratisch ist und alles gut anzeigt, da dieses jetzt viel zu groß dargestellt wird.

gestartet wird die Application so:

Code: Alles auswählen

QApplication app(argc,argv);
  MatrixDraw *mdi = new MatrixDraw();
  app.setMainWidget(md);
 
  md->show();
  return app.exec();

Verfasst: 6. Juni 2005 11:07
von lepsai
Dann müssen die Werte l_iSide und m_iSize in resizeEvent() neu berechnet werden...