Seite 1 von 1

Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 5:26 pm
von wellnestom
Hi,
bin noch neu hier und mache meine ersten Versuche mit Qt (C++).
Ich hab folgende Frage: Ich hab mit dem Qt Designer ein QWidget mit einem QGraphicsView erstellt. Wenn jetzt das Fenster mit der Maus größer/kleiner 'gezogen' wird, oder das Fenster auf Fullscreen geht, soll auch der QGraphicsView immer die Größe des Widgets haben. Wie mach ich das? Es muß doch eine Möglichkeit geben die Inhalte eines Fensters (Widget's) dynamisch vergrößern/verkleinern zu können.

Gruß Tom

Re: Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 7:36 pm
von nufan
Wie hast du dein Widget erstellt? Ist dein QGraphicsView in einem Layout, das du auf dein Hauptfenster anwendest?
Etwas Beispielcode wäre nicht schlecht ;)

Re: Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 8:00 pm
von wellnestom
Erstellt hab ich das mit dem Qt Designer. Also:
Neues Formular / unter "Templates" QWidget ausgewählt / und dann von der WidgedBox den GraphicsView hineingezogen.
Code hab ich noch nicht viel. Nur die Headerdatei und den Quellcode für die Klasse.

Header:

Code: Alles auswählen

#ifndef TACHO_H
#define TACHO_H

#include <QWidget>

namespace Ui {
class Tacho;
}

class Tacho : public QWidget
{
    Q_OBJECT

public:
    explicit Tacho(QWidget*parent = 0);
    ~Tacho();

private:
    Ui::Tacho *ui;

private slots:

};

#endif // TACHO_H
Klasse:

Code: Alles auswählen

#include "tacho.h"
#include "ui_tacho.h"
#include <iostream>

Tacho::Tacho(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Tacho)
{
    ui->setupUi(this);

}

Tacho::~Tacho()
{
    delete ui;
}

und die Qt Designer xml:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Tacho</class>
 <widget class="QWidget" name="Tacho">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>843</width>
    <height>552</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QGraphicsView" name="graphicsView">
   <property name="geometry">
    <rect>
     <x>150</x>
     <y>70</y>
     <width>461</width>
     <height>311</height>
    </rect>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

Re: Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 8:10 pm
von nufan
Du hast deinen View einfach auf dein Widget gelegt, ohne ein Layout zu verwenden. Das macht dann natürlich beim Ändern der Größe Probleme. Klick mal mit der rechten Maustaste auf dein äußeres Widget, wähle "Lay out" und dann "Lay Out Horizontically" bzw. "Lay Out Vertically" (wenn nur 1 Widget im Layout ist, dann ist das das gleiche).

Re: Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 8:35 pm
von wellnestom
Danke! Da hätte ich echt selber drauf kommen müssen. :oops:
Wie krieg ich jetzt noch das Widget dazu immer im Fullscreen, ohne Fensterrahmen und ohne Fensterleiste aufzugehen? Das man also nur noch den View sieht.

Gruß Tom

Re: Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 8:40 pm
von nufan
wellnestom hat geschrieben:Danke! Da hätte ich echt selber drauf kommen müssen. :oops:
Dafür ist das Forum da :)
wellnestom hat geschrieben:Wie krieg ich jetzt noch das Widget dazu immer im Fullscreen, ohne Fensterrahmen und ohne Fensterleiste aufzugehen? Das man also nur noch den View sieht.
Gute Frage, das dürfte aufwendiger werden... du müsstest die WindowFlags (http://doc.qt.digia.com/qt/qwidget.html ... Flags-prop) anpassen und Margin/Padding des Layouts und des Container-Widgets ändern. Oder du löst deinen View aus dem Layout, versteckst deinen Container und setzt die WindowFlags des Views. Da müsste ich selber herumprobieren. Versuchs mal selbst und wenn du es nicht schaffst, lad doch bitte mal ein vollständiges und gezipptes Qt-Projekt hoch :)

Re: Qt: Größe in QWidget dynamich ändern

Verfasst: Mi Nov 14, 2012 9:07 pm
von wellnestom
Hat geklappt!
Alle Margin's Padding's auf 0, das ganze nicht mit
instanzname.show();
sondern mit
instanzname.showFullScreen();
dann noch im Qt Designer den View ausgewählt, unter QFrame/frameShape = 'No Frame' ausgewählt, und fertig.

Danke für die schnelle Hilfe!!!!!