Russian Qt Forum

Qt => Общие вопросы => Тема начата: 8Observer8 от Сентябрь 08, 2014, 21:16



Название: Получение данных с формы "Настройки COM-порта"
Отправлено: 8Observer8 от Сентябрь 08, 2014, 21:16
Привет!

Я сделал окно с настройками COM-порта:
(http://i7.pixs.ru/storage/1/1/6/333png_6597690_13757116.png)

Не могу придумать, как бы эти данные извлечь в переменные.

Имя порта и скорость:
Код
C++ (Qt)
   QString portName = ui->portNameComboBox->currentText();
   QSerialPort::BaudRate baudRate =
           static_cast<QSerialPort::BaudRate> ( ui->baudRateComboBox->currentText().toInt() );
 

А как быть с остальным?

Я сначала думал ориентироваться на индекс в ComboBox, но, к примеру, в QSerialPort::Parity значения такие: 0, 2, 3, ... То есть пропущена единица. Можно конечно это учесть, но некрасивая идея...

Была идея сделать кучу if'ов и сравнивать по текстам в ComboBox'ах.

Вроде ерунда, а я застрял. Помогите, пожалуйста, сделать красиво :)



Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: BuRn от Сентябрь 08, 2014, 22:06
Вы про модели слышали?


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: Kurles от Сентябрь 09, 2014, 06:13
Столько флуда на форуме, а даже до уровня "ребёнка ассистентского подземелья" (с) не дорос :)
Храни нужное значение в самом айтеме комбобокса.
void QComboBox::addItem ( const QString & text, const QVariant & userData = QVariant() );
QVariant QComboBox::itemData ( int index, int role = Qt::UserRole ) const;


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: 8Observer8 от Сентябрь 09, 2014, 06:46
Вы про модели слышали?
Да, я их для баз данных применяю

Столько флуда на форуме, а даже до уровня "ребёнка ассистентского подземелья" (с) не дорос :)
Храни нужное значение в самом айтеме комбобокса.
void QComboBox::addItem ( const QString & text, const QVariant & userData = QVariant() );
QVariant QComboBox::itemData ( int index, int role = Qt::UserRole ) const;
То есть мне надо заполнять comboBox'ы не в дизайнере, а в конструкторе окна? Метод addItem всё равно же текст добавляет? Вообще не понял идею.


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: Kurles от Сентябрь 09, 2014, 07:18
Второй опциональный параметр userData ни о чем не говорит?


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: schmidt от Сентябрь 09, 2014, 11:04
Идея в том, что текст в комбо - это только то, что видит пользователь. Представьте себе, что комбобокс - это тот же хеш с данными, ключами которого выступают строки. Под ними можно хранить любое значение QVariant() . И, да, заполнять комбо  для этого нужно в коде, используя вызовы addItem(...), либо setItemData ( int index, const QVariant & value, int role = Qt::UserRole ).

Код:
addItem ( const QString & text, const QVariant & userData = QVariant() )

либо

Код:
setItemData ( int index, const QVariant & value, int role = Qt::UserRole )

если пункты уже созданы. Для извлечения привязанного к выбранному пункту значения используйте метод

Код:
QVariant QComboBox::itemData ( int index, int role = Qt::UserRole ) const


Не всё, что можно сделать средствами дизайнера, одинаково полезно  ;D


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: vizir.vs от Сентябрь 09, 2014, 11:52
я использую дизайнер, только если нужно по-быстрому что-то наклепать и посмотреть как это будет смотреться. Ручками как-то удобнее получается.


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: 8Observer8 от Сентябрь 09, 2014, 12:06
Да, разбирусь с этим вариантом. Пока это в новинку. Спасибо!

А что по поводу QComboBox + Model? Не стоит копать? Или на этом может что-то дельное получиться?


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: Bepec от Сентябрь 09, 2014, 12:07
Вариант с QVariant и есть случай с model :) Только в данном случае она установлена по умолчанию.

to vizir.vs - когда будет большой интерфейс и заказчик в процессе поиска, в дизейнере перекинуть пару виджетов туда-сюда быстрее и легче, чем в коде :D


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: 8Observer8 от Сентябрь 09, 2014, 15:54

Что-то я не до конца понял:
Цитировать
invalid cast from type 'QVariant' to type 'QSerialPort::DataBits'
     QSerialPort::DataBits dataBits = (QSerialPort::DataBits) ui->dataBitsComboBox->itemData( currentIndex );                                                                                       

Код
C++ (Qt)
   // Data Bits
   ui->dataBitsComboBox->addItem( "5", QSerialPort::Data5 );
   ui->dataBitsComboBox->addItem( "6", QSerialPort::Data6 );
   ui->dataBitsComboBox->addItem( "7", QSerialPort::Data7 );
   ui->dataBitsComboBox->addItem( "8", QSerialPort::Data8 );
 

Код
C++ (Qt)
   int currentIndex = ui->dataBitsComboBox->currentIndex();
   QSerialPort::DataBits dataBits = ( QSerialPort::DataBits ) ui->dataBitsComboBox->itemData( currentIndex );
   qDebug() << dataBits;
 


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: 8Observer8 от Сентябрь 09, 2014, 15:59
Я .toInt() забыл написать :)

Код
C++ (Qt)
   int currentIndex = ui->dataBitsComboBox->currentIndex();
   QSerialPort::DataBits dataBits = static_cast<QSerialPort::DataBits>( ui->dataBitsComboBox->itemData( currentIndex ).toInt() );
 


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: vizir.vs от Сентябрь 09, 2014, 20:55
Вариант с QVariant и есть случай с model :) Только в данном случае она установлена по умолчанию.

to vizir.vs - когда будет большой интерфейс и заказчик в процессе поиска, в дизейнере перекинуть пару виджетов туда-сюда быстрее и легче, чем в коде :D
Я поэтому и говорю, что если надо по быстрому наклепать (сделать прототип), то да, юзаю дизайнер. А если уже разрабатываю итого приложение, то делаю ручками. К тому же я редко придумываю интерфейс. Этим занимаются менеджеры с дизайнерами совместно. А я уже реализую его в реалях Qt


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: 8Observer8 от Сентябрь 10, 2014, 06:44
К тому же я редко придумываю интерфейс. Этим занимаются менеджеры с дизайнерами совместно. А я уже реализую его в реалях Qt
Хоть это не совсем по теме, но как могут дизайнеры сделать для вас интерфейс? Тем более вручную? Наверное, с помощью QML - это возможно (судя по Шлее). Вы QML имели ввиду?


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: torwig от Сентябрь 10, 2014, 08:03
К тому же я редко придумываю интерфейс. Этим занимаются менеджеры с дизайнерами совместно. А я уже реализую его в реалях Qt
Хоть это не совсем по теме, но как могут дизайнеры сделать для вас интерфейс? Тем более вручную? Наверное, с помощью QML - возможно (судя по Шлее) Вы QML имели ввиду?
Я так понимаю, имелось в виду, что дизайнер нарисует все, отдаст тебе к примеру .psd или отдельные картинки (возможно шрифты, цвета, градиенты и т.д.), а программист уже все реализует в реалиях виджетов, кнопок, комбобоксов и т.п. Хотя конечно самый идеал это бы готовая форма дизайнера (qml), но это мечты)


Название: Re: Получение данных с формы "Настройки COM-порта"
Отправлено: vizir.vs от Сентябрь 11, 2014, 11:39
К тому же я редко придумываю интерфейс. Этим занимаются менеджеры с дизайнерами совместно. А я уже реализую его в реалях Qt
Хоть это не совсем по теме, но как могут дизайнеры сделать для вас интерфейс? Тем более вручную? Наверное, с помощью QML - возможно (судя по Шлее) Вы QML имели ввиду?
Я так понимаю, имелось в виду, что дизайнер нарисует все, отдаст тебе к примеру .psd или отдельные картинки (возможно шрифты, цвета, градиенты и т.д.), а программист уже все реализует в реалиях виджетов, кнопок, комбобоксов и т.п. Хотя конечно самый идеал это бы готовая форма дизайнера (qml), но это мечты)

Вы правы. Готовую форму написанную на qml дизайнеры не дают, а было бы круто=(