Russian Qt Forum
Сентябрь 30, 2024, 10:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Снова о изменении размера QDockWidget  (Прочитано 4029 раз)
Андрей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() также ни к чему не приводит.
« Последнее редактирование: Июнь 29, 2010, 22:42 от Андрей80 » Записан
Андрей80
Гость
« Ответ #1 : Июнь 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
« Последнее редактирование: Июнь 30, 2010, 01:25 от Андрей80 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.255 секунд. Запросов: 21.