Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: voltron от Декабрь 19, 2011, 22:42



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

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


Название: Re: QComboBox, выделение заданного элемента выпадающего списка
Отправлено: GreatSnake от Декабрь 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 );
       }
};


Название: Re: QComboBox, выделение заданного элемента выпадающего списка
Отправлено: voltron от Декабрь 20, 2011, 10:35
Спасибо, попробую.