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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамически добавить таблицу в форму. Как?  (Прочитано 6074 раз)
smartchecker
Гость
« : Март 31, 2010, 14:14 »

Допустим есть на форме QSpinBox, который может прирастать по 2.
Шаг ему можно задать в св-вах, а как сделать так чтобы руками нечётное число было не воткнуть?

И как этот spinbox зацепить за таблицу QTableWidget?
Нужно, при изменении значения в spinbox'е делать таблицу размера spinbox x spinbox, но, если размер
будет слишком большим, то таблицу делать со скроллбарами.

Как?
Записан
alexman
Гость
« Ответ #1 : Март 31, 2010, 14:37 »

как сделать так чтобы руками нечётное число было не воткнуть?
Можно отловить сигнал void QSpinBox::valueChanged ( int i )/void QSpinBox::valueChanged ( const QString & text ), и если значение нечетное, то сбрасывать на предыдущее значение.

И как этот spinbox зацепить за таблицу QTableWidget?
Опять же отлавливать сигнал!
« Последнее редактирование: Март 31, 2010, 14:39 от alexman » Записан
SimpleSunny
Гость
« Ответ #2 : Март 31, 2010, 14:41 »

Можно унаследоваться от QSpinBox и задать validator, чтобы последний символ != 1,3,5,7,9.
Записан
alexman
Гость
« Ответ #3 : Март 31, 2010, 14:43 »

Можно унаследоваться от QSpinBox и задать validator, чтобы последний символ != 1,3,5,7,9.
А как вводить '32'?
Записан
SimpleSunny
Гость
« Ответ #4 : Март 31, 2010, 15:03 »

Я почему-то думал, что validator будет вызываться по окончанию ввода, т.е. потери фокуса, а это оказывается не так.
Записан
smartchecker
Гость
« Ответ #5 : Март 31, 2010, 15:35 »

Сделал такую конструкцию, но он не позволяет воводить, например, 92.
Максимальное значение в spinbox - 100
Код:
    int i = ui.spinBox->value();

    if (i % 2) {
        ui.spinBox->setValue(++i);
    }
Записан
smartchecker
Гость
« Ответ #6 : Март 31, 2010, 16:01 »

Как в таблице сделать чтобы ячейки были по ширине содержимого?
Или как установить ширину для всех ячеек сразу?
Нашёл только setColumnWidth(), но там нужно эту операцию для каждого столбца повторять.
Записан
alexman
Гость
« Ответ #7 : Март 31, 2010, 16:01 »

Сделал такую конструкцию, но он не позволяет воводить, например, 92.
Максимальное значение в spinbox - 100
Код:
    int i = ui.spinBox->value();

    if (i % 2) {
        ui.spinBox->setValue(++i);
    }
Блокируй сигналы перед ui.spinBox->setValue(++i), потом разблокируй!
Записан
smartchecker
Гость
« Ответ #8 : Март 31, 2010, 17:23 »

Блокируй сигналы перед ui.spinBox->setValue(++i), потом разблокируй!
В каком месте? В слоте, который реагирует на valueChanged()?
Или где?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Март 31, 2010, 17:30 »

Перед ui.spinBox->setValue(++i); блокируй, после разблокируй.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alexman
Гость
« Ответ #10 : Март 31, 2010, 17:34 »

Блокируй сигналы перед ui.spinBox->setValue(++i), потом разблокируй!
В каком месте? В слоте, который реагирует на valueChanged()?
Или где?
Код:
ui.spinBox->blockSignals( true );
ui.spinBox->setValue(++i);
ui.spinBox->blockSignals( false );
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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