Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Андрей80 от Июнь 29, 2010, 20:11



Название: Снова о изменении размера QDockWidget
Отправлено: Андрей80 от Июнь 29, 2010, 20:11
Здравствуйте, уважаемые!
Извините, что задаю поднимавшийся  ранее вот здесь
http://www.prog.org.ru/topic_2457_0.html
вопрос, но к сожалению не смог разобраться.

Есть главное окно приложения и прикрепленный снизу док-виджет
Код окна:
Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
   //Append CDockWidget
   editor = new QTextEdit();
   editor->setFont(QFont("Monospace", 10, 1, false));
   actionPanel = new CDockWidget("Editor"));
   actionPanel->setWidget(editor);
   actionPanel->setAllowedAreas(Qt:: BottomDockWidgetArea);
   addDockWidget(Qt:: BottomDockWidgetArea, actionPanel);
    //Добавление центральной области
   workspace = new Workspace();
   setCentralWidget(workspace);
  }
 

Код CDockWidget:
Код
C++ (Qt)
#ifndef CDOCKWIDGET_H
#define CDOCKWIDGET_H
 
#include <QDockWidget>
#include <QtGui>
class CDockWidget : public QDockWidget
{
public:
   CDockWidget(const QString & title, QWidget * parent = 0, Qt::WFlags
flags = 0);
 
QSize sizeHint();
 
};
 
#endif // CDOCKWIDGET_H
 

 и определение:
Код
C++ (Qt)
CDockWidget::CDockWidget(const QString & title, QWidget * parent,
                        Qt::WFlags flags):QDockWidget(title, parent,
                                                             flags)
{
 
}
 
QSize CDockWidget::sizeHint()
   {
       QSize sh = QDockWidget::sizeHint();
       sh.setHeight(700);
       return sh;
   }
 

Мне нужно, чтобы после запуска приложения размер прикрепляемого окна по вертикали был 700px. Однако этого не происходит. Что не так делаю никак не могу понять, точнее не могу понять почему переопределение sizeHint должно что-то менять,  вызов CDockWidget::sizeHint() также ни к чему не приводит.


Название: Re: Снова о изменении размера QDockWidget
Отправлено: Андрей80 от Июнь 30, 2010, 00:09
Нашел такой рабочий пример, решил выложить для таких как я =). Суть в том что sizeHint переопределяем не для наследника QDockWidget  а для наследника того класса, что содержится в QDockWidget.
Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
   workspace = new Workspace();
   this->setCentralWidget(workspace);
   actionPanel = new QDockWidget("QueUe", this);
   editor = new CTextEdit(actionPanel);
   editor->setFont(QFont("Monospace", 10, 1, false));
 
   actionPanel->setWidget(editor);
   actionPanel->setAllowedAreas(Qt:: BottomDockWidgetArea);
   addDockWidget(Qt:: BottomDockWidgetArea, actionPanel);
}
 
Объявление:
Код
C++ (Qt)
 
#ifndef CTEXTEDIT_H
#define CTEXTEDIT_H
 
#include <QTextEdit>
 
class CTextEdit : public QTextEdit
{
   Q_OBJECT
public:
   CTextEdit(QWidget *parent = 0);
 
   QSize sizeHint() const;
 
};
 
#endif // CTEXTEDIT_H
 
Реализация:
Код
C++ (Qt)
CTextEdit::CTextEdit(QWidget *parent):QTextEdit(parent)
{
 
}
 
QSize CTextEdit:: sizeHint() const
{
      return QSize(this->parentWidget()->width(), 700);
}
 

Так работает. Пример нашел здесь:
http://developer.qt.nokia.com/faq/answer/how_can_i_resize_a_qdockwidget_programatically