Просмотр сообщений
|
Страниц: [1] 2 3 4
|
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); }
|
|
|
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(). И в них никак нельзя предотвратить закрытие окна. Но проблема уже решена, как предложили выше.
|
|
|
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.
|
|
|
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.
|
|
|
|
|