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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Spinners + undo  (Прочитано 6700 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Сентябрь 04, 2014, 16:25 »

Код
C++ (Qt)
QAbstractSpinBox::setAccelerated( true );
Ну вот, я опять Вас запутал  (так получилось Улыбающийся). У меня undo на уровне приема данных, пример

- юзер ввел число. Оно проверяется на валидность, возможно клампится. Если новое значение равно старому - ничего не делаем.  Иначе текущее значение параметра записывается в undo а новое принимается. При выполнении undo записанное значение замещает текущее и все UI обновляется. Что там было в clipboard - все равно.

В данном случае надо не только принять значение, но и перерисовать OpenGL сцену(ы). Поэтому setAccelerated не подходит, нужно не чаще а шаг больше. Это легко достигается: нажал и двигает мышу вверх - чем выше тем больше шаг. Но в Qt я этого не нашел
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Сентябрь 10, 2014, 14:59 »

Сделал так

Код
C++ (Qt)
extern bool undoDisabled;
 
void Spinner::timerEvent( ..)
{
...
undoDisabled = true;
emit SignalSpinInc(mStep);
undoDisabled = false;
}
 
extern bool undoOpened;
 
void OpenUndo( void )
{
 if (undoDisabled) return;
 assert(!undoOpened);
 undoOpened = true;
}
 
void CloseUndo( void )
{
 if (undoDisabled) return;
 assert(undoOpened);
 undoOpened = false;
}
Ну и любая запись в undo должна проверять флажок undoOpened, если false - ничего не писать. Все это выглядит незатейливо (или примитивно), нет никаких паттернов с гордыми названиями типа "стратегия"  Улыбающийся - ну может я просто не знаю как их применить.

Др схемы/предложения?

Спасибо
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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