Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: unixforum wiki, alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

 
Reply to this topic Start new topic
> Qt: динамическое изменение размера
IMB
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 12:15
Сообщение #1


Что-то мне здесь надоело
Иконка группы

Сообщений: 2269

Вставить имя   :   Цитата

ОС: Debian

Группа: Участники

Автор темы
Доброго дня!
Необходимо изменять размер центрального окна при нажатии определённой кнопки, размер окна должен измениться на размер дополнительного поля 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);
}

Подскажите?
Спасибо.
Go to the top of the page
 
+Quote Post
Voral
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 13:33
Сообщение #2


Свой человек
Иконка группы

Сообщений: 1198

Вставить имя   :   Цитата

ОС: Debian Wheezy (amd64)
Город: Иваново

Группа: Участники

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

вот только я сам это не делал, почитай в доке внимательно по этим методам, возможно надо чтоб диалог перерисовался.


--------------------
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Go to the top of the page
 
+Quote Post
Denjs
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 14:06
Сообщение #3


Жить без форума не могу
Иконка группы

Сообщений: 1680

Вставить имя   :   Цитата

ОС: SuSe 10.2

Группа: Участники

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

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

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

PS: вот тут спрашивали? http://www.prog.org.ru/index.php?action=forum


--------------------
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Go to the top of the page
 
+Quote Post
IMB
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 14:21
Сообщение #4


Что-то мне здесь надоело
Иконка группы

Сообщений: 2269

Вставить имя   :   Цитата

ОС: Debian

Группа: Участники

Автор темы
Цитата(Denjs @ Jun 22 2011, в 14:06) *
т.е. вам надо по фактическому размеру текста в отладочном окне выставить размер виджета?

Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.
Go to the top of the page
 
+Quote Post
Portnov
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 14:59
Сообщение #5


Матёрый линуксоид
Иконка группы

Сообщений: 1785

Вставить имя   :   Цитата

ОС: Debian testing/unstable
Город: Магнитогорск

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

В gtk есть специальный виджет Expander, который является контейнером. Открывать/закрывать его можно как мышкой, так и программно. Думаю, в Qt есть какой-нибудь аналог.


--------------------
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Go to the top of the page
 
+Quote Post
Voral
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 16:05
Сообщение #6


Свой человек
Иконка группы

Сообщений: 1198

Вставить имя   :   Цитата

ОС: Debian Wheezy (amd64)
Город: Иваново

Группа: Участники

Вот код на коленке, который делает то что нужно
Код
#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 @ Jun 22 2011, в 15:21) *
Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.

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


--------------------
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?


Спасибо сказали:
IMB,
Go to the top of the page
 
+Quote Post
IMB
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 16:20
Сообщение #7


Что-то мне здесь надоело
Иконка группы

Сообщений: 2269

Вставить имя   :   Цитата

ОС: Debian

Группа: Участники

Автор темы
Цитата(Voral @ Jun 22 2011, в 16:05) *
Цитата(IMB @ Jun 22 2011, в 15:21) *
Нет, я хочу что бы при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода, при деактивации - уменьшилось.

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

Мне нужно неизменяемое мышкой окно, оно должно изменять размер только нажатии/отжатии кнопки.
Go to the top of the page
 
+Quote Post
Denjs
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 17:09
Сообщение #8


Жить без форума не могу
Иконка группы

Сообщений: 1680

Вставить имя   :   Цитата

ОС: SuSe 10.2

Группа: Участники

кстати - а если вы "на-весь-экран"? как тогда?


--------------------
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Go to the top of the page
 
+Quote Post
IMB
bookmark
gyfbbdvkffmrljmmmwd
Jun 22 2011, в 19:27
Сообщение #9


Что-то мне здесь надоело
Иконка группы

Сообщений: 2269

Вставить имя   :   Цитата

ОС: Debian

Группа: Участники

Автор темы
Цитата(Denjs @ Jun 22 2011, в 17:09) *
кстати - а если вы "на-весь-экран"? как тогда?

Данный режим не предполагается, но с удовольствием выслушаю Ваши соображения.
Go to the top of the page
 
+Quote Post
Denjs
bookmark
gyfbbdvkffmrljmmmwd
Jun 23 2011, в 11:09
Сообщение #10


Жить без форума не могу
Иконка группы

Сообщений: 1680

Вставить имя   :   Цитата

ОС: SuSe 10.2

Группа: Участники

Цитата(IMB @ Jun 22 2011, в 20:27) *
Цитата(Denjs @ Jun 22 2011, в 17:09) *
кстати - а если вы "на-весь-экран"? как тогда?

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

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

Я советов давать не буду кроме одного - мне лично не нравится сам подход который вы хотите реализовать)))
т.е. вот это мне как принцип не нравится :
Цитата
при активации отладочного вывода главное окно увеличилось на размер окна для отладочного вывода


--------------------
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28th July 2014 - в 11:15




Rating@Mail.ru Rambler's Top100