QDockWidget resize Problem
Verfasst: 8. August 2007 16:53
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:
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)
Hat jemand ne Idee was ich falsch mache?
Danke im voraus.
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++;
}
}
}
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;}
};
Danke im voraus.