Qt: динамическое изменение размера

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2559
ОС: Debian

Qt: динамическое изменение размера

Сообщение IMB »

Доброго дня!
Необходимо изменять размер центрального окна при нажатии определённой кнопки, размер окна должен измениться на размер дополнительного поля QTextEdit в которое выводится отладочная информация.
Попробовал метод описанный в "Qt4: программирование GUI на C++" - layout()->setSizeConstraint(QLayout::SetFixedSize). Не работает - выставляет размер окна таким, что видно только меню и status bar.
Поиск в сети вывел на другой способ зафиксировать размер окна - setFixedSize(geometry().width(), geometry().height()). Размер окна фиксируется, но при этом видно то место, где должен появится QTextEdit.
Управление показом/скрытием элемента осуществляется так:

Код: Выделить всё

ui->debug_output->hide(); //изначально скрываем

void MainWindow::on_actionDebug_output_triggered(bool checked)
{
    is_debug = checked;
    ui->debug_output->setVisible(checked);
}

Подскажите?
Спасибо.
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)
Контактная информация:

Re: Qt: динамическое изменение размера

Сообщение Voral »

Есть такой метод adjustSize(). Возможно перед его вызовом нужно вызвать QApplication::processEvents().
Далее берешь размеры диалога и подставляешь в setFixedSize

вот только я сам это не делал, почитай в доке внимательно по этим методам, возможно надо чтоб диалог перерисовался.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Qt: динамическое изменение размера

Сообщение Denjs »

т.е. вам надо по фактическому размеру текста в отладочном окне выставить размер виджета?
гм... где-то я набредал в Qt на получение фактических (в точках) размеров и параметров для заданной буквы заданного шрифта... понимаете мысль? по буквам посчитать что и как там будет написано)))

но это как-то геморройно для данной задачи, не находите?...
имхо - делайте фиксированного размера и с прокруткой. и не морочьтесь... при появлении полосы прокрутки пользователь поймет что там ещё что-то есть и прочитает.

лучше потратьте время на решение какой более существенной проблемы...

PS: вот тут спрашивали? http://www.prog.org.ru/index.php?action=forum
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: Qt: динамическое изменение размера

Сообщение IMB »

Denjs писал(а):
22.06.2011 15:06
т.е. вам надо по фактическому размеру текста в отладочном окне выставить размер виджета?

Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable
Контактная информация:

Re: Qt: динамическое изменение размера

Сообщение Portnov »

В gtk есть специальный виджет Expander, который является контейнером. Открывать/закрывать его можно как мышкой, так и программно. Думаю, в Qt есть какой-нибудь аналог.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)
Контактная информация:

Re: Qt: динамическое изменение размера

Сообщение Voral »

Вот код на коленке, который делает то что нужно

Код: Выделить всё

#ifndef DIALOG_H
#define DIALOG_H

#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT
private:
    QHBoxLayout layout;
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
private slots:
    void clickTest();
};

#endif // DIALOG_H

Код: Выделить всё

#include "dialog.h"
#include <QtGui>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    this->setLayout(&layout);
    QPushButton *bt = new QPushButton("Add");
    layout.addWidget(bt);
    this->adjustSize();
    this->setFixedSize(this->size());
    connect(bt,SIGNAL(clicked()),this,SLOT(clickTest()));
}

Dialog::~Dialog()
{

}
void Dialog::clickTest()
{
    QPushButton *bt = new QPushButton("Add 2");
    layout.addWidget(bt);
    this->adjustSize();
    this->setFixedSize(this->size());
};


IMB писал(а):
22.06.2011 15:21
Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.

Тут главное желаемая цель. Данный вариант подходит в том случае если вам нужно окно с неизменяемым размером (например мышкой). Если же вам нужно окно которое изменяет размры при определенных обстоятельствах,но сохраняет возможность изменения размеров той же мышой, то вам не надо ставить фиксированный размер - есть resize();
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: Qt: динамическое изменение размера

Сообщение IMB »

Voral писал(а):
22.06.2011 17:05
IMB писал(а):
22.06.2011 15:21
Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.

Тут главное желаемая цель. Данный вариант подходит в том случае если вам нужно окно с неизменяемым размером (например мышкой). Если же вам нужно окно которое изменяет размры при определенных обстоятельствах,но сохраняет возможность изменения размеров той же мышой, то вам не надо ставить фиксированный размер - есть resize();

Мне нужно неизменяемое мышкой окно, оно должно изменять размер только нажатии/отжатии кнопки.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Qt: динамическое изменение размера

Сообщение Denjs »

кстати - а если вы "на-весь-экран"? как тогда?
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: Qt: динамическое изменение размера

Сообщение IMB »

Denjs писал(а):
22.06.2011 18:09
кстати - а если вы "на-весь-экран"? как тогда?

Данный режим не предполагается, но с удовольствием выслушаю Ваши соображения.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Qt: динамическое изменение размера

Сообщение Denjs »

IMB писал(а):
22.06.2011 20:27
Denjs писал(а):
22.06.2011 18:09
кстати - а если вы "на-весь-экран"? как тогда?

Данный режим не предполагается, но с удовольствием выслушаю Ваши соображения.

Ну не на весь экран, а скажем окно растянуто по чти до размеров экрана. При попытке увеличить размер - оно увеличится _за_ нижний край экрана.

Я советов давать не буду кроме одного - мне лично не нравится сам подход который вы хотите реализовать)))
т.е. вот это мне как принцип не нравится :
при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Ответить