Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: smartchecker от Март 31, 2010, 14:14



Название: Динамически добавить таблицу в форму. Как?
Отправлено: smartchecker от Март 31, 2010, 14:14
Допустим есть на форме QSpinBox, который может прирастать по 2.
Шаг ему можно задать в св-вах, а как сделать так чтобы руками нечётное число было не воткнуть?

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

Как?


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: alexman от Март 31, 2010, 14:37
как сделать так чтобы руками нечётное число было не воткнуть?
Можно отловить сигнал void QSpinBox::valueChanged ( int i )/void QSpinBox::valueChanged ( const QString & text ), и если значение нечетное, то сбрасывать на предыдущее значение.

И как этот spinbox зацепить за таблицу QTableWidget?
Опять же отлавливать сигнал!


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: SimpleSunny от Март 31, 2010, 14:41
Можно унаследоваться от QSpinBox и задать validator, чтобы последний символ != 1,3,5,7,9.


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: alexman от Март 31, 2010, 14:43
Можно унаследоваться от QSpinBox и задать validator, чтобы последний символ != 1,3,5,7,9.
А как вводить '32'?


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: SimpleSunny от Март 31, 2010, 15:03
Я почему-то думал, что validator будет вызываться по окончанию ввода, т.е. потери фокуса, а это оказывается не так.


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: smartchecker от Март 31, 2010, 15:35
Сделал такую конструкцию, но он не позволяет воводить, например, 92.
Максимальное значение в spinbox - 100
Код:
    int i = ui.spinBox->value();

    if (i % 2) {
        ui.spinBox->setValue(++i);
    }


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


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: alexman от Март 31, 2010, 16:01
Сделал такую конструкцию, но он не позволяет воводить, например, 92.
Максимальное значение в spinbox - 100
Код:
    int i = ui.spinBox->value();

    if (i % 2) {
        ui.spinBox->setValue(++i);
    }
Блокируй сигналы перед ui.spinBox->setValue(++i), потом разблокируй!


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: smartchecker от Март 31, 2010, 17:23
Блокируй сигналы перед ui.spinBox->setValue(++i), потом разблокируй!
В каком месте? В слоте, который реагирует на valueChanged()?
Или где?


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: Пантер от Март 31, 2010, 17:30
Перед ui.spinBox->setValue(++i); блокируй, после разблокируй.


Название: Re: Динамически добавить таблицу в форму. Как?
Отправлено: alexman от Март 31, 2010, 17:34
Блокируй сигналы перед ui.spinBox->setValue(++i), потом разблокируй!
В каком месте? В слоте, который реагирует на valueChanged()?
Или где?
Код:
ui.spinBox->blockSignals( true );
ui.spinBox->setValue(++i);
ui.spinBox->blockSignals( false );