Страница 1 из 1
Qt: динамическое изменение размера
Добавлено: 22.06.2011 13:15
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);
}
Подскажите?
Спасибо.
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 14:33
Voral
Есть такой метод adjustSize(). Возможно перед его вызовом нужно вызвать QApplication::processEvents().
Далее берешь размеры диалога и подставляешь в setFixedSize
вот только я сам это не делал, почитай в доке внимательно по этим методам, возможно надо чтоб диалог перерисовался.
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 15:06
Denjs
т.е. вам надо по фактическому размеру текста в отладочном окне выставить размер виджета?
гм... где-то я набредал в Qt на получение фактических (в точках) размеров и параметров для заданной буквы заданного шрифта... понимаете мысль? по буквам посчитать что и как там будет написано)))
но это как-то геморройно для данной задачи, не находите?...
имхо - делайте фиксированного размера и с прокруткой. и не морочьтесь... при появлении полосы прокрутки пользователь поймет что там ещё что-то есть и прочитает.
лучше потратьте время на решение какой более существенной проблемы...
PS: вот тут спрашивали?
http://www.prog.org.ru/index.php?action=forum
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 15:21
IMB
Denjs писал(а): ↑22.06.2011 15:06
т.е. вам надо по фактическому размеру текста в отладочном окне выставить размер виджета?
Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 15:59
Portnov
В gtk есть специальный виджет Expander, который является контейнером. Открывать/закрывать его можно как мышкой, так и программно. Думаю, в Qt есть какой-нибудь аналог.
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 17:05
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();
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 17:20
IMB
Voral писал(а): ↑22.06.2011 17:05
IMB писал(а): ↑22.06.2011 15:21
Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.
Тут главное желаемая цель. Данный вариант подходит в том случае если вам нужно окно с неизменяемым размером (например мышкой). Если же вам нужно окно которое изменяет размры при определенных обстоятельствах,но сохраняет возможность изменения размеров той же мышой, то вам не надо ставить фиксированный размер - есть resize();
Мне нужно неизменяемое мышкой окно, оно должно изменять размер только нажатии/отжатии кнопки.
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 18:09
Denjs
кстати - а если вы "на-весь-экран"? как тогда?
Re: Qt: динамическое изменение размера
Добавлено: 22.06.2011 20:27
IMB
Denjs писал(а): ↑22.06.2011 18:09
кстати - а если вы "на-весь-экран"? как тогда?
Данный режим не предполагается, но с удовольствием выслушаю Ваши соображения.
Re: Qt: динамическое изменение размера
Добавлено: 23.06.2011 12:09
Denjs
IMB писал(а): ↑22.06.2011 20:27
Denjs писал(а): ↑22.06.2011 18:09
кстати - а если вы "на-весь-экран"? как тогда?
Данный режим не предполагается, но с удовольствием выслушаю Ваши соображения.
Ну не на весь экран, а скажем окно растянуто по чти до размеров экрана. При попытке увеличить размер - оно увеличится _за_ нижний край экрана.
Я советов давать не буду кроме одного - мне лично не нравится сам подход который вы хотите реализовать)))
т.е. вот это мне как принцип не нравится :
при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода