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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение данных с формы "Настройки COM-порта"  (Прочитано 7982 раз)
8Observer8
Гость
« : Сентябрь 08, 2014, 21:16 »

Привет!

Я сделал окно с настройками COM-порта:


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

Имя порта и скорость:
Код
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'ах.

Вроде ерунда, а я застрял. Помогите, пожалуйста, сделать красиво Улыбающийся

« Последнее редактирование: Сентябрь 08, 2014, 21:19 от 8Observer8 » Записан
BuRn
Гость
« Ответ #1 : Сентябрь 08, 2014, 22:06 »

Вы про модели слышали?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Сентябрь 09, 2014, 06:13 »

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

Код
C++ (Qt)
while(!asleep()) sheep++;
8Observer8
Гость
« Ответ #3 : Сентябрь 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 всё равно же текст добавляет? Вообще не понял идею.
« Последнее редактирование: Сентябрь 09, 2014, 06:57 от 8Observer8 » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #4 : Сентябрь 09, 2014, 07:18 »

Второй опциональный параметр userData ни о чем не говорит?
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
schmidt
Гость
« Ответ #5 : Сентябрь 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


Не всё, что можно сделать средствами дизайнера, одинаково полезно  Смеющийся
Записан
vizir.vs
Гость
« Ответ #6 : Сентябрь 09, 2014, 11:52 »

я использую дизайнер, только если нужно по-быстрому что-то наклепать и посмотреть как это будет смотреться. Ручками как-то удобнее получается.
Записан
8Observer8
Гость
« Ответ #7 : Сентябрь 09, 2014, 12:06 »

Да, разбирусь с этим вариантом. Пока это в новинку. Спасибо!

А что по поводу QComboBox + Model? Не стоит копать? Или на этом может что-то дельное получиться?
Записан
Bepec
Гость
« Ответ #8 : Сентябрь 09, 2014, 12:07 »

Вариант с QVariant и есть случай с model Улыбающийся Только в данном случае она установлена по умолчанию.

to vizir.vs - когда будет большой интерфейс и заказчик в процессе поиска, в дизейнере перекинуть пару виджетов туда-сюда быстрее и легче, чем в коде Веселый
Записан
8Observer8
Гость
« Ответ #9 : Сентябрь 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;
 
Записан
8Observer8
Гость
« Ответ #10 : Сентябрь 09, 2014, 15:59 »

Я .toInt() забыл написать Улыбающийся

Код
C++ (Qt)
   int currentIndex = ui->dataBitsComboBox->currentIndex();
   QSerialPort::DataBits dataBits = static_cast<QSerialPort::DataBits>( ui->dataBitsComboBox->itemData( currentIndex ).toInt() );
 
Записан
vizir.vs
Гость
« Ответ #11 : Сентябрь 09, 2014, 20:55 »

Вариант с QVariant и есть случай с model Улыбающийся Только в данном случае она установлена по умолчанию.

to vizir.vs - когда будет большой интерфейс и заказчик в процессе поиска, в дизейнере перекинуть пару виджетов туда-сюда быстрее и легче, чем в коде Веселый
Я поэтому и говорю, что если надо по быстрому наклепать (сделать прототип), то да, юзаю дизайнер. А если уже разрабатываю итого приложение, то делаю ручками. К тому же я редко придумываю интерфейс. Этим занимаются менеджеры с дизайнерами совместно. А я уже реализую его в реалях Qt
« Последнее редактирование: Сентябрь 09, 2014, 21:01 от vizir.vs » Записан
8Observer8
Гость
« Ответ #12 : Сентябрь 10, 2014, 06:44 »

К тому же я редко придумываю интерфейс. Этим занимаются менеджеры с дизайнерами совместно. А я уже реализую его в реалях Qt
Хоть это не совсем по теме, но как могут дизайнеры сделать для вас интерфейс? Тем более вручную? Наверное, с помощью QML - это возможно (судя по Шлее). Вы QML имели ввиду?
« Последнее редактирование: Сентябрь 10, 2014, 08:49 от 8Observer8 » Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #13 : Сентябрь 10, 2014, 08:03 »

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

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

Вы правы. Готовую форму написанную на qml дизайнеры не дают, а было бы круто=(
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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