crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Шаговый ресайз
RazrFalcon
  опции профиля:
сообщение 11.7.2011, 16:23
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Нужно что бы окон ресайзилось с определенным шагом, к примеру 40pix.
Пример: ширина 200, 240, 280... Других значений не должно быть.
Пробовал так:
int step=40;
void MainWindow::resizeEvent(QResizeEvent *e)
{
  if (e->size().width() > e->oldSize().width()+step) {
    e->accept();
  } else {
    e->ignore();
  }
}
никакого эффекта.
Как реализовать такой ресайз?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.7.2011, 17:07
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Для твоей задачи:
если твоё условие не выполняется, ты должен вернуть accept (принято), чтобы считать что событие обработано. Если ты вернёшь ignore (игнорировать) оно будет обработано кем-то другим, вышестоящим (не знаю кем для окна).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.7.2011, 17:19
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Ясно. Только что дальше делать?
К примеру: у меня ширина окна 200пикс, и пока она не станет 240, окно должно быть шириной 200, а потом резко стать 240.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.7.2011, 18:04
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


как входим в обработчик события, автоматом ставится флажёк accepted.
Проверяем условие,
если истино, то изменяем размер окна, для этого проще вызвать этот же обработчик базового класса (QMainWindow::resizeEvent(e)).
если ложно просто выходим
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.7.2011, 21:07
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Не понял =/

  e->accept();
  if (e->size().width() > e->oldSize().width()) {
    qDebug()<<"hi";
  } else {
    return;
  }
Так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.7.2011, 21:23
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


не установлен у меня Qt сейчас здесь, попробовать не могу. Но можно сделать вот так:

в QMainWindow::resizeEvent(e) достаём размер, который сейчас указал пользователь:

e->size().width()

корректируем:

int newWid=int(( e->size().width() + step/2 ) /step)*step;

устанавливаем новый размер в newWid
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.7.2011, 21:29
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


void MainWindow::resizeEvent(QResizeEvent *e)
{
  if (твоё условие) {
    QMainWindow::resizeEvent(e);
  }
}


Цитата(Litkevich Yuriy @ 11.7.2011, 21:04) *
как входим в обработчик события, автоматом ставится флажёк accepted.
флажёк ставится автоматически, т.е. без твоего участия
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.7.2011, 22:07
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


  if (e->size().width() > e->oldSize().width()+40) {
    qDebug()<<"hi";
    QMainWindow::resizeEvent(e);
  }
Никакого эффекта... =(

Сообщение отредактировал RazrFalcon - 11.7.2011, 22:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.7.2011, 23:17
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


сделай простейший компилируемый пример и выложи сюда.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.7.2011, 23:26
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Вот.

Сообщение отредактировал RazrFalcon - 11.7.2011, 23:26
Прикрепленные файлы
Прикрепленный файл  resizeByStep.zip ( 1.56 килобайт ) Кол-во скачиваний: 105
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 19.4.2024, 5:06