Russian Qt Forum
Апреля 22, 2025, 12:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамически добавить таблицу в форму. Как?  (Прочитано 6291 раз)
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

Сообщений: 5877


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


Просмотр профиля 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.024 секунд. Запросов: 18.