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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 4
1  Qt / Вопросы новичков / Re: Как настроить QLineEdit, чтобы он принимал только числа и точку : Июнь 10, 2019, 14:26
так оно ж не проверяет корректность ввода Улыбающийся
Корректность ввода я проверяю уже после того как нажали Ok в слоте accept(), а мне хотелось изначально в QLineEdit запретить ввод букв, и других ненужных символов.
2  Qt / Вопросы новичков / Re: Как настроить QLineEdit, чтобы он принимал только числа и точку : Июнь 10, 2019, 13:56
Нужного эффекта удалось добиться перехватом keyPressEvent() для QLineEdit.

Код:
void LineEditEvent::keyPressEvent (QKeyEvent *event)
{
     int key=event->key();
     if (key>=Qt::Key_0 && key<=Qt::Key_9||
             key==Qt::Key_Period||
             key==Qt::Key_Backspace||
             key==Qt::Key_Delete||
             key==Qt::Key_Minus)
      QLineEdit::keyPressEvent(event);
}
3  Qt / Вопросы новичков / Re: Как настроить QLineEdit, чтобы он принимал только числа и точку : Июнь 10, 2019, 10:24
Попробуйте QDoubleValidator.

Не помогает. Пишу
Код:
ui->minVal->setValidator(new QDoubleValidator(0, 100, 2, this));
И не могу после этого ввести точку. Разрешает ввод только цифр.
А если еще предварительно устанавливаю значение по умолчанию
Код:
ui->minVal->setText(QString::number(3.14));
то могу к нему добавлять буквы (
4  Qt / Вопросы новичков / Как настроить QLineEdit, чтобы он принимал только числа и точку : Июнь 10, 2019, 08:34
Здравствуйте!
Мне нужно сделать поле ввода для float, но такое, чтобы после запятой, можно было ввести произвольное количество цифр.
Не использую QDoubleSpinBox, потому что в нем указывается точность, и если установить 5 знаков, то даже целое число отображается с пятью нулями после запятой. Это некрасиво. Хочу использовать для этой цели  QLineEdit, помогите настроить валидатор так, чтобы в поле могли отображаться только цифры, минус и точка.
Например:
Код:
ui->lE_CycleTime->setValidator(new QRegExpValidator(QRegExp("^([1-9][0-9]*|0)(\\.|,)[0-9]{2}"), this));
Но, это не работает так как мне нужно.
5  Qt / Вопросы новичков / Re: Как предотвратить закрытие диалогового окна? : Май 22, 2019, 07:10
Bolonat, обрати внимание на названия большинства сигналов Qt, они имеют окончание "-ed", т.е. прошедшее время. Такие слоты посылаются после того, как что-то случилось.
Я обрабатываю событие - нажатие пользователем кнопки ОК. Все возможные слоты для данного случая - это accepted(), clicked(). И в них никак нельзя предотвратить закрытие окна. Но проблема уже решена, как предложили выше.
6  Qt / Вопросы новичков / Re: Как предотвратить закрытие диалогового окна? : Май 17, 2019, 09:24
Нужно перегрузить функцию accept
...
Спасибо! Получилось.
7  Qt / Вопросы новичков / Как предотвратить закрытие диалогового окна? : Май 17, 2019, 08:54
Здравствуйте!
Создаю диалоговое окно с кнопками Ok и Отмена. Обрабатываю нажатие кнопки Ок  - в  слоте accepted() - проверяю правильность введенных пользователем данных. Хочу, если пользователь ввел неверные данные, предотвратить закрытие диалогового окна, сообщить пользователю об ошибке и установить фокус в поле, где пользователь ввел ошибку. Но у меня не получается предотвратить закрытие диалогового окна. Подскажите, как это сделать?  

Код:

//Активация диалогового окна по кнопке мыши на главном виджете
void TimeValuePanel::mousePressEvent(QMouseEvent *event)
{
    if(!pSetPeriod){
         pSetPeriod = new SetPeriod(dtList.first(),dtList.last(),this);
    }

    if(pSetPeriod->exec()==QDialog::Accepted);
    {
        calcNewTimeList(m_dt1,m_dt2);
    }

}

//Обработка нажатия кнопки  Ок в диалоговом окне, проверка введенных данных
void SetPeriod::on_buttonBox_accepted()
{
    //Проверка введенных данных
    if(ui->dTimeBeg->dateTime()<m_dt1)
    {
        MesBoxErr("Начальная дата выходит за границы общего периода");
        ui->dTimeBeg->setFocus();
        //Здесь хочу предотвратить закрытие окна, но QDialog::DialogCode
        //принимает только два значения  Accepted и Rejected
        //в обоих случаях окно закрывается. Где и какой флаг
        //надо установить, чтобы окно не закрывалось?
    }
}

8  Qt / Вопросы новичков / Re: QByteArray перевести в float : Июнь 08, 2018, 11:38
Спасибо большое. Просто подмассив был выделен неправильно. Надо было сдвижку сделать на два байта:
 QByteArray ar4=one_ch.mid(66,4);

 Тогда:
 ar4[0]=0x41
 ar4[1]=0x20
 ar4[2]=0x00
 ar4[3]=0x00

В результате получаю 10.
9  Qt / Вопросы новичков / QByteArray перевести в float : Июнь 07, 2018, 19:31
Здравствуйте! Qt Creator 4.5.0 Qt 5.10.0

По модбасу получаю данные, формирую из них массив байт. Из этого массива последовательно выделяю подмассивы и читаю из них значения нужного мне типа, применяя QDataStream.
Не получается из QByteArray получить float.
Делаю следующее:

Код:
   QByteArray ar4=one_ch.mid(64,4);
   float r=0.0;
   QDataStream stream4(ar4);
   //поскольку байты местами менять не нужно, оставляю флаг по умолчанию - QDataStream::BigEndian
    stream4.setFloatingPointPrecision(QDataStream::SinglePrecision);
    stream4>>r;

 Под отладчиком вижу элементы ar4:
 ar4[0]=0x00
 ar4[1]=0x00
 ar4[2]=0x41
 ar4[3]=0x20

Должно получиться 10.0 (По крайней мере, это значение отображается в Modbus Poll), но  получаю всякую чушь.
Что я делаю не так?

Пробую тот же массив считать по-другому:
Код:
    float v=0.0;
    memcpy(&v, ar4.data(), sizeof(float));

или

Код:
    float z = *(reinterpret_cast<const float*>(ar4.constData()));
и тоже в результате получаю ерунду.
10  Qt / Вопросы новичков / Re: QOpcUaClient : Март 16, 2018, 07:43
Ой! Спустя неделю забросила! Смеющийся После всего геморроя с установкой дополнительных плагинов QFreeOpcUaPlugin и QOpen62541Plugin и их зависимостей open62541 и FreeOpcUa, установкой и компиляцией boost(подошла только определенная версия!), выяснилось, что выложенные на GitHub версии исходников и примеров не актуальны и надо ждать несколько недель новых версий Смеющийся Смотрите здесь. Жду новой версии Qt 5.11.
11  Qt / Вопросы новичков / Re: QOpcUaClient : Декабрь 18, 2017, 13:55
Скомпилировала. Получила  Qt5OpcUa.dll, Qt5OpcUad.dll, libQt5OpcUa.a, libQt5OpcUad.a.
12  Qt / Вопросы новичков / Re: QOpcUaClient : Декабрь 18, 2017, 10:00
У меня Qt 5.10. Только как правильно модуль собрать, я пока не знаю.
13  Qt / Вопросы новичков / QOpcUaClient : Декабрь 18, 2017, 09:16
Здравствуйте!
Мне нужно реализовать OPC UA клиент. В документации нашла описание класса QOpcUaClient. Специально для этого подняла версию Qt до 5.10. Подключаю компонент QT += opcua как описано здесь. Но в Qt 5.10 нет такого компонента ни для одного комплекта! Может, кто подскажет, что происходит? Надо дополнительно скачивать что-то?
14  Qt / Вопросы новичков / Re: Как получить имя модуля dll : Ноябрь 03, 2017, 12:49
А я думаю имеет - от кросс-платформенного фреймворка мы вправе ожидать кросс-платформенного решения.
Извините, но на мой дилетантский взгляд, это только добавит фреймворку багов и тормозов, и, скорее всего, разработчики это понимают.
15  Qt / Вопросы новичков / Re: Как получить имя модуля dll : Ноябрь 03, 2017, 08:18
Нужен любой адрес кода (но не данных) сидящий в этой dll. Это может быть адрес ф-ции ((void*)GetThisDllHandle) или статического метода, (QString::fromLocal8Bit) но не обычного
Aаа, теперь понятно - я просто "курить" не умею...)


не совсем понимаю это высказывание. При попытке скомпилировать этот код на платформе, отличной от виндоус, компилятор скажет «давай, до свидания», и кросс-платформенность Qt никак не поможет. Но этот же код будет прекрасно работать и оторванно от Qt (при компиляции под виндоус, естественно), если писать «просто» на С или С++. Суть в том, что вопрос чисто о виндоус-специфической вещи, которая к Qt никакого отношения не имеет.
Изначально, суть вопроса была - получить путь и наименование загруженной dll. Я не знала, есть ли Qt-шные методы и применила
"чисто виндоус-специфическую вещь" (благо, у меня не стоит задача разработать кроссплатформенное ПО), о чем и сообщила на форуме. Если бы кто-то предложил
другой способ, который имеет отношение к Qt, я бы с радостью применила его. Но сейчас я понимаю, что существование этого
способа маловероятно именно по причине кроссплатформенности Qt.    

Страниц: [1] 2 3 4

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