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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как реализовать аналог FormCreate() из Lazarus  (Прочитано 3800 раз)
evb87ar
Гость
« : Март 07, 2015, 23:09 »

Добрый день, форумчане,
прошу вашей помощи в следующем затыке:
есть форма, на форме QSplitter, где болтается два виджета.

Задача: после запуска приложения, изменить размер первого виджета в QSplitter согласно значению из настроек.

Попытки: применение QSplitter.setSizes() в __init__ не приводят к нужному результату, так как форма ещё не знает какие у неё размеры. QSplitter.sizes() выдаёт [<какое-либо число>, 0]

Пробовал делать привязку в resizeEvent, но не нравится мне такой подход, ибо неправильный он какой-то. Да и каждый раз надо значение сохранять, потом вызывать... не то это (как старый паскалист чую).

В Lazarus всё просто и понятно, после FormCreate все размеры форма уже знает, но ещё не отрисована на экране, отсюда и пляши, как говорится.

Соответственно вопрос: как реализовать однократную обработку при запуске приложения\показе формы? Или есть какой-то другой способ?

UPD: showEvent() не подходит, так как на этот момент времени размер формы является тем, какой установлен в качестве минимального. А окно может быть открыто как на весь экран, так и с минимальными размерами (смотря как пользователь закрыл).

UPD 2: sizes() после showMaximized() из отдельной функции так же возвращает минимальные размеры формы.
« Последнее редактирование: Март 07, 2015, 23:19 от evb87ar » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Март 07, 2015, 23:26 »

Похожая тема http://www.prog.org.ru/topic_28319_0.html Подмигивающий
Записан

evb87ar
Гость
« Ответ #2 : Март 07, 2015, 23:37 »

gil9red, благодарствую, как вариант подходит Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 08, 2015, 08:58 »

Ну в первый раз тоже устанавливать надо  Улыбающийся Я выкручивался так
Код
C++ (Qt)
class CSplitter : public QSplitter {
public:
CSplitter( QWidget * parent ) : QSplitter(parent), mSavedPos(0) {}
 
void resizeEvent( QResizeEvent * e )
{
QSplitter::resizeEvent(e);
int pos = mSavedPos;
mSavedPos = 0;
if (pos) moveSplitter(pos, 1);
}
 
      int GetPos( void ) const
      {
         return handle(1)->x();
      }
 
int mSavedPos;
};
 
И заряжать mSavedPos
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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