QWidget, Größe festlegen

Alles rund um die Programmierung mit Qt
Antworten
Michael L.
Beiträge: 10
Registriert: 29. April 2005 20:27

QWidget, Größe festlegen

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

welche Rechtecke, welches Layout....

Beschreib mal deine Aufgabenstellung bzw. Problem anständig :(
Michael L.
Beiträge: 10
Registriert: 29. April 2005 20:27

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
Michael L.
Beiträge: 10
Registriert: 29. April 2005 20:27

Beitrag 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();
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Dann müssen die Werte l_iSide und m_iSize in resizeEvent() neu berechnet werden...
Antworten