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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QComboBox, выделение заданного элемента выпадающего списка  (Прочитано 2622 раз)
voltron
Гость
« : Декабрь 19, 2011, 22:42 »

Есть QComboBox в котором пользователь выбирает масштаб из заранее заданного списка, например "1:500" или "1:25". В этом же комбобоксе (т.е. в его поле для редактирования) отображается текущий масштаб и  пользователь может ввести в поле свое значение, не входящее в предустановленный список.

Можно ли при раскрытии выпадающего списка устанавливать выделение не на первый элемент, а на ближайший к текущему масштабу? Например, текущий масштаб "1:280", а в списке есть значения "1:100", "1:250" и  "1:500". Нужно, чтобы при раскрытии выпадающего списка автоматически выделился пункт "1:250".
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Декабрь 20, 2011, 07:45 »

Как-то так:
Код
C++ (Qt)
class ScaleComboBox : public QComboBox
{
  Q_OBJECT
public:
       ScaleComboBox( QWidget* parent = 0 ) : QComboBox( parent ) {}
       virtual ~ScaleComboBox() {}
protected:
       void showPopup()
       {
            QComboBox::showPopup();
            QLocale locale( C );
            float cs = locale.toFloat( currentText().replace( ':', '.' ) );
            float min = 999999;
            int min_index = 0;
            for( int i = 0; i < count(); i++ )
            {
                float s = locale.toFloat( itemText( i ).replace( ':', '.' ) );
                if( qAbs( cs - s ) < min )
                {
                    min = qAbs( cs - s );
                    min_index = i;
                }
            }
            blockSignals( true );
            view()->setCurrentIndex( model()->index( min_index, 0 ) );
            blockSignals( false );
       }
};
« Последнее редактирование: Декабрь 20, 2011, 07:47 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
voltron
Гость
« Ответ #2 : Декабрь 20, 2011, 10:35 »

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


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