LINUX.ORG.RU

помогите с QDockWindow


0

0

Добрый день! Устал тут мучаться с QDockWindow, потому что не хочет
на экране показывать так, как мне надо, устал уже сегодня экспериментировать,
поэтому прошу помощи. Надо расположить 2 QDockWindow следующим образом:

---------------------------
     |                    |
     |   Область с        |
     |   компонентами     |
     |                    |
     |                    |
  1  |                    |
     |                    |
     |                    |
     |====================|
     |        2           |
     |                    |
--------------------------

Это как например в QT Linguist. А у меня, как бы я ни мучался,
2-я DockWindow занимает __ВСЮ__ нижнюю область, то есть так:
---------------------------
     |                    |
     |   Область с        |
     |   компонентами     |
     |                    |
     |                    |
  1  |                    |
     |                    |
     |                    |
==========================|
              2           |
                          |
--------------------------

Подскажите, как правильно это сделать, устал уже мучаться :(
Смотрел исходники лингвиста, но я пока не очень дружу с layouts,
чтобы их так круто расположить. Пробовал по-всякому. Но никак :(


Судя по исходникам, (кстати там layouts ни причем) сначала нужно создать область QDockArea в "области с компонентами", а затем уже QDockWindow в этой области. Подробнее см. конструктор MessageEditor в qt/tools/linguist/linguist/msgedit.cpp


ANDI ★★
()
Ответ на: комментарий от ANDI

Да я там уже смотрел ... Я сначала сам этот кусок нашёл, весь
просмотрел - даже сделал аналогично тому, как в лингвисте было. Но
наверное что-то всё же упустил ... :( Посмотрите, может кто-то найдёт
мою ошибку.

--------------------------------------------------------------------
#ifndef _cform_h_
#define _cform_h_

#include "form1.h"
#include "cw.h"
#include <qtoolbox.h>
#include <qlistview.h>
#include <qbuttongroup.h>
#include <qtoolbutton.h>
#include <qstring.h>

class CForm : public Form1
{
    Q_OBJECT
	
public:
	CForm ( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel )
		: Form1 ( parent, name, fl )
	{
		QDockWindow *dw = new QDockWindow( QDockWindow::InDock, this );
		dw->setResizeEnabled( TRUE );
		dw->setFixedExtentWidth( 200 );
		setDockEnabled( dw, DockTop, FALSE );
		setDockEnabled( dw, DockBottom, FALSE );
		setDockEnabled( dw, DockRight, FALSE );
		dw->setCloseMode( QDockWindow::Always );
		addDockWindow( dw, tr("Context"), Qt::DockLeft );
								  
		toolBox = new QToolBox( dw );
		dw->setWidget( toolBox );
		QListView * b = new QListView ( toolBox );
		dw->setWidget( b );

		dw->setCaption( tr( "Testing QDockWindow" ) );
		toolBox->addItem ( b, "label" );

		W * pW = new W ( this );
			
		setCentralWidget( pW );
	}
private:
	QToolBox * toolBox;
};
#endif
------------------------------------
//
//	cw.h
//
//
#ifndef _cw_h_
#define _cw_h_

#include <qdockarea.h>
#include <qlistview.h>
#include <qlayout.h>
#include <qmainwindow.h>
#include <qtoolbox.h>
#include <qtextbrowser.h>
#include <qscrollview.h>

class W : public QWidget
{
	Q_OBJECT
public:								
	W ( QWidget * parent = 0, const char * name = 0, WFlags f = 0 )
	: QWidget ( parent, name, f )
	{
        QListView * l = new QListView ( this );
		QDockArea * bottomDock = new QDockArea( Qt::Horizontal, QDockArea::Reverse,
                                                this, "bottom dock area" );
	    bottomDock->setMinimumHeight( 10 );
	    bottomDock->setSizePolicy( QSizePolicy( QSizePolicy::Minimum,
	                                            QSizePolicy::Minimum) );
		QMainWindow *mw = (QMainWindow*)topLevelWidget();
		QDockWindow *dw1 = new QDockWindow( QDockWindow::InDock, bottomDock );
                dw1->setResizeEnabled( TRUE );
		mw->addDockWindow( dw1, DockBottom );
		mw->setDockEnabled( dw1, DockLeft, FALSE );
		mw->setDockEnabled( dw1, DockRight, FALSE );
		dw1->setCloseMode( QDockWindow::Always );

		QToolBox * toolBox = new QToolBox( dw1 );
		dw1->setWidget( toolBox );
		
		QTextBrowser * tb = new QTextBrowser ( toolBox );
		QListView * b = new QListView ( toolBox );
		dw1->setWidget( b );
			 
		dw1->setCaption( tr( "Testing QDockWindow" ) );
		toolBox->addItem ( b, "label" );
		
                QScrollView * sv = new QScrollView( this, "scroll view" );
	        sv->setHScrollBarMode( QScrollView::AlwaysOff );
	        sv->viewport()->setBackgroundMode( PaletteBackground );
		sv->addChild ( tb );
					
		QBoxLayout * box = new QVBoxLayout ( this );
		box->addWidget ( sv );
		box->addWidget ( l );
		box->addWidget ( bottomDock );
	}
	~W () {}
};
#endif
-----------------------------------------
#include <qapplication.h>
#include "cform.h"
#include <qtranslator.h>
#include <qtextcodec.h>

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    CForm w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}

RomanU
() автор топика
Ответ на: комментарий от RomanU


Если не сложно, кинь свой вопрос на форум http://qtforum.org
Я не знаю в чем может быть проблема, но самому интересно.

ANDI ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.