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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: програмно не меняется размер у QDockWidget  (Прочитано 16535 раз)
DmP
Гость
« : Январь 25, 2006, 16:56 »

Qt 4.1 есть класс, который наследует QDockWidget.
Не получается ни в конструкторе, ни в другом месте уменьшить размер QDockWidget при его выводе на экран.

resize() - не дает ни какого эффекта. Может, что не так делаю.
Как можно изменить размер окошка с QDockWidget? =)
Записан
burunduk
Гость
« Ответ #1 : Январь 25, 2006, 17:04 »

сталкивался с этими неудобствами Грустный
попробуйте использовать setMaximumSize(), setMaximumWidth(), setMinimumSize() ...
Записан
DmP
Гость
« Ответ #2 : Январь 25, 2006, 17:20 »

Цитата: "burunduk"
сталкивался с этими неудобствами Грустный
попробуйте использовать setMaximumSize(), setMaximumWidth(), setMinimumSize() ...


Весело получаеться, оказываеться QDockWidget находиться внутри еще одного окна, и если потянуть за линию, то окошечко QDockWidget с кнопочками не изменяеться. =)
Как временный вариант, подходит, но ... =)
Записан
Steven_Orko
Гость
« Ответ #3 : Январь 25, 2006, 18:12 »

А если у меня два таких объекта: один слева, а другой внизу.  Как мне сделать размер нижнего таким как мне надо при выводе на экран, и при этом чтобы его пользователь мышкой мог изменять?
Записан
DmP
Гость
« Ответ #4 : Январь 26, 2006, 09:32 »

Цитата: "Steven_Orko"
А если у меня два таких объекта: один слева, а другой внизу.  Как мне сделать размер нижнего таким как мне надо при выводе на экран, и при этом чтобы его пользователь мышкой мог изменять?


По ходу надо получить класс QRubberBand на котором и лежит QDockWidget, но QMainWindow - его отдаватть по документации не хочет. =(
Видемо это баг Qt 4.1 =)
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Январь 26, 2006, 11:04 »

этот баг еще с 3.3 тянецца Грустный
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
DmP
Гость
« Ответ #6 : Январь 26, 2006, 12:08 »

Цитата: "Racheengel"
этот баг еще с 3.3 тянецца Грустный


 Улыбающийся

Попробывал покапаться в исходниках, там используються QDockWidgetLayout, QDockSeparator, QDockWidgetSeparator, QMainWindowLayout, но все настолько запутанно, что решил забить на это. =)
Записан
Steven_Orko
Гость
« Ответ #7 : Январь 26, 2006, 12:58 »

А может кто-нибудь перевести этот вопрос по попводу программного изменения размеров QDockWidget на английский? Я его отошлю троллям. У меня там техподдержка есть зарегистрированная. Или им можна так по-русски писать? ))) Как получу ответ, сразу здесь выложу в этой теме.
Записан
DmP
Гость
« Ответ #8 : Январь 26, 2006, 14:22 »

Цитата: "Steven_Orko"
А может кто-нибудь перевести этот вопрос по попводу программного изменения размеров QDockWidget на английский? Я его отошлю троллям. У меня там техподдержка есть зарегистрированная. Или им можна так по-русски писать? ))) Как получу ответ, сразу здесь выложу в этой теме.


Можно, просто:

Method QDockWidget::resize() not working. Please answer, how change size docked window from program?

Но я в английском не силен. Грустный

И я также лазил по английскому форуму и по официальной рассылке Qt, ни где на подобные вопросы вообще не отвечали. Мне еще повезло, что мне посоветовали установить, минимальный и максимальный размер. Улыбающийся Кстати, спасибо. Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Январь 26, 2006, 15:48 »

Method QDockWidget::resize() does not work. Please answer, how to change the size of the docked window from a program?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Steven_Orko
Гость
« Ответ #10 : Январь 26, 2006, 15:55 »

Вот первый ответ:
Цитировать


Is that dock widget docked or floating? Note that you can in general not
resize a widget that lives in a layout programmatically - that's the
layout's job, after all.

Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #11 : Январь 26, 2006, 16:02 »

хм.. чего-то они видать недопоняли... какой layout, если надо размер придоченного окна поменять... лучше спросить ИМХО так:

The problem is the following. When my application is about to be closed, it saves the geometry parameters of all the docked and floating windows. But on the next start, while restoring, these windows could not be setted up with the saved geometries, they're using default geometry. How should I set up geometry correctly?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Steven_Orko
Гость
« Ответ #12 : Январь 26, 2006, 17:06 »

Они попросили пример небольшой, где я пытаюсь делать то, что мне надо. Я им отправил проект, где просто в конструкторе пытаюсь установить высоту окна, пристыкованного вниз.
Записан
DmP
Гость
« Ответ #13 : Январь 26, 2006, 17:32 »

Цитата: "Steven_Orko"
Они попросили пример небольшой, где я пытаюсь делать то, что мне надо. Я им отправил проект, где просто в конструкторе пытаюсь установить высоту окна, пристыкованного вниз.


Если еще нужно, но здесь не весь код. =) Не хватает описания MainWnd.

Код:

#include <QDockWidget>

class QTextEdit;
class QCloseEvent;

class MessageWindow : public QDockWidget
{
Q_OBJECT;

public:
MessageWindow(QWidget *parent = 0);

// Статические функции
static void Message(QString Msg, QString Marker="");
static void Clear();
static void Close();

static MessageWindow* m_msgWin;

private:
//static MessageWindow* m_msgWin;
QTextEdit *m_text;

void closeEvent(QCloseEvent *e);
};


Код:

#include "app/message_window.h"

#include <QTextEdit>
#include <QMainWindow>

MessageWindow* MessageWindow::m_msgWin = 0;

MessageWindow::MessageWindow(QWidget *parent)
: QDockWidget(parent)
{
setAllowedAreas(Qt::BottomDockWidgetArea);
setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable);

m_text = new QTextEdit(this);
m_text->setReadOnly(true);

setWidget(m_text);

QSize sz = size();
sz.setHeight(100);  << ----- Does not work
resize(sz);

}

void MessageWindow::Message(QString Msg, QString Marker)
{
if (!m_msgWin)
{
m_msgWin = new MessageWindow(MainWnd);
MainWnd->addDockWidget(Qt::BottomDockWidgetArea, m_msgWin);
}
m_msgWin->m_text->append(Msg);
}

void MessageWindow::Clear()
{
if (m_msgWin)
{
m_msgWin->m_text->clear();
}
}

void MessageWindow::Close()
{
if (m_msgWin)
{
m_msgWin->close();
m_msgWin = 0;
}
}

void MessageWindow::closeEvent(QCloseEvent *e)
{
m_msgWin = 0;
}
Записан
Steven_Orko
Гость
« Ответ #14 : Январь 26, 2006, 21:43 »

to DmP:
Спасибо за код, ответа пока нет.
Слушай, а мож тебе в деструкторе  m_msgWin обнулять лучше?

добавлено спустя 4 часа 1 минуту:

 Есть хорошие новости!!! Получен ответ от техподдержки троллей. Код, который они написали действительно работает и он НАСТОЛЬКО ПРОСТ, прям до немогу ))))) Ладно, томить не буду, вот сам текст письма:
Цитировать

You cannot resize a widget that is managed by a layout, but you can tell
the layout how large you would like your widget to be. To do that,
reimplement QWidget::sizeHint(), i.e.

Код:
class CMyDock2: public QDockWidget
{
    Q_OBJECT
public:
    CMyDock2(const QString & title, QWidget * parent = 0, Qt::WFlags
flags = 0);
    ~CMyDock2() {};

    QSize sizeHint() const
    {
        QSize sh = QDockWidget::sizeHint();
        sh.setHeight(40);
        return sh;
    }
};

to ALL:
Добавляем, исправляем и радуемся!!! Веселый

добавлено спустя 5 минут:

 to DmP:
Думаю, тебе эта штука поможет ))))Удачи!!
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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