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
QWidget, Größe festlegen
-
Michael L.
- Beiträge: 10
- Registriert: 29. April 2005 20:27
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
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
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...
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
Ok nun zeig ich den Code: so zeichne ich
teil der draw methode
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
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);
}
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);
}
}
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();