QDockWidget resize Problem

Alles rund um die Programmierung mit Qt
Antworten
baseman37
Beiträge: 4
Registriert: 6. Oktober 2006 19:01

QDockWidget resize Problem

Beitrag von baseman37 »

Hi,

ziel ist es, mehreren DockWidgets in einem Fenster die gleiche Hoehe zuzuordnen. Dies funktioniert in soweit, das ich mit setGeometry(x,x,x,x) den Fenstern die Groesse zuordnen kann. Dabei verschwindet aber der Balken zwischen zwei dockWidget"s, mit welchem ihre Groesse manuel angepasst werden kann, was schon ziemlich doof ist.

Hier Sinngemaess der Code:

Code: Alles auswählen

void fenster::setup()
{
       setAnimated(false);
       setDockNestingEnabled(true);
       setDockOptions(!QMainWindow::AllowTabbedDocks);
}

void fenster::addDock(QWidget *myWidget)
{
        QDockWidget *newDock = new QDockWidget("ein Fenster",this);
        newDock->setWidget(myWidget);
        myWidget->setEnabled(true);\
        myWidget->show();

        connect(newDock,SIGNAL(visibilityChanged(bool)),this,SLOT(arrange()));
	
        addDockWidget(Qt::BottomDockWidgetArea,newDock,Qt::Vertical);      
        
       // dockList ist im Header deklariert: QList<QDockWidget*> dockList;
        dockList.append(newDock);
       // siehe unten
       // fensterList.append(myWidget);
}

void fenster::arrange()
{
       if (dockList.count() > 0)
       {
              QRect rect = geometry();
              int notFloatingCount = 0;
              for (int i = 0; i < dockList.count() ; i++)
	      {
			if (!dockList.at(i)->isFloating())
				notFloatingCount++;
	      }
	      if (notFloatingCount > 0)
	      {
			int dockHeight = rect.height()/notFloatingCount;
			int dif = 0;
			for (int i = 0 ; i < dockList.count(); i++)
			{
				if (!dockList.at(i)->isFloating())
				{						        
                                        //1.Versuch
dockList.at(i)->setGeometry(0,(i-dif)*dockHeight,rect.width(),dockHeight);
                                        //2.Versuch
					//dockList.at(i)->resize(rect.width(),dockHeight);
                                        //dockList.at(i)->move(0,(i-dif)*dockHeight);
                                        //3.Versuch
                                        // fensterList ist hier eine List, die parallel zur dockList gefuehrt wird und die fenster, welche eine DockWidget bekommen, eingefuegt werden
                                        // QSize size(rect.width(),dockHeight);
                                        //fensterList.at(i)->setSizeHint(size);
				}
				else
					dif++;
			}
		}
}
Was ich auch noch versucht habe, ist das auskommentierte Resize. Die richtige Groesse wird dem Fenster auch zugewiesen, allerdings muss das Fenster dann noch an die richtige Stelle mit dem move Befehl bewegt werden. Sobald ich das mache, verschwindet der Balken wieder.
Sau bloede: sobald ich den Fenster eine Fixed size zuweise ist der Balken vorhanden, aber nicht zu gebrauchen. Wenn ich dann wieder minimum und maximum Size zurueksetze, veraendert sich wieder die groesse des Fensters.

Mit sizeHint im child Widget hab ich es auch schon versucht, allerdings ohne Erfolg (vielleicht hab ich da auch was falsch gemacht, deshalb hier noch kurz etwas Code)

Code: Alles auswählen

class fenster : public QWidget
{
     QSize size;

    public:
    
     QWidget...
     
     void setSizeHint(const QSize &size){ this->size = size;}
     virtual QSize sizeHint() const { return size;}

};
Hat jemand ne Idee was ich falsch mache?

Danke im voraus.
Antworten