crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику FireBlack ::: Спасибо сказали: 13 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
27.8.2015, 18:16 Проблемы с выводом русских символов
В Qt 5.5 изменился механизм работы qDebug функции (ну еще и qWarning, qCritical и qFatal заодно). Данное нововведение нарушает обратную совместимость, но некоторые разработчики Qt считают это нормальным. Однако в интернете поднялось нехилое бруление говн, так что посмотрим что из этого выйдет.

Обойти данную гадость можно использую функцию noquote.
Раскрывающийся текст
qDebug().noquote() << QString("кириллица");
ht1515, lanz,
18.3.2015, 20:34 Кодировка в Qt creator
Данная проблема возникла из-за того, что раньше QtCreator по умолчанию использовал системную кодировку (которая в винде Windows-1251); теперь он использует UTF-8.

Вашу проблему можно решить двумя способами:

1. Быстро, но не правильно - изменить настройки QtCreator'а чтобы он по умолчанию использовал системную кодировку.
Делается это в параметрах (меню "Инструменты"->"Параметры"), в разделе "Текстовый редактор", во вкладке "Поведение", в настройках "Кодировки файлов".

2. Правильно, но чуть дольше - необходимо пересохранить все ваши исходники в кодировке UTF-8.
Для этого открываете файл в той кодировке в которой он сохранен (скорее всего Windows-1251), открываете меню "Правка"->"Select Encoding...", выбираете кодировку UTF-8, и сохраняете файл кнопкой "Сохранить в кодировке".

kvak,
17.1.2015, 6:57 Не могу запустить приложение
Цитата(Dark2011 @ 17.1.2015, 1:01) *
В общем такая проблемка....писал приложение с Qt 5.3.2 ....работал в QtCreator с Mingw
С помощью PE Explorer проверил все зависимости все библиотеки подтянул
На рабочих машинах все норм запускается.... Решил провести экспримент поставил на вируталку голую Win 8.1 - поймал Runtime Error
"The application has requested the Runtime to terminate it in an unusual way"

Скорее всего PE Explorer отобразил не все зависимости. Используйте утилиту windeployqt.exe. Хотя, как оказалось, она копирует не все библиотеки, да и подтягивает много лишнего...

Например, для запуска минимального оконного приложения на Qt 5.4 необходимо следующее:
Раскрывающийся текст
platforms/qwindows.dll
icudt53.dll
icuin53.dll
icuuc53.dll
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll

В вашем случае, при использовании QtMultimedia, лучше еще добавить:
Раскрывающийся текст
mediaservice/dsengine.dll
mediaservice/qtmedia_audioengine.dll
Qt5Multimedia.dll
Qt5MultimediaWidgets.dll




Dark2011,
14.1.2015, 18:14 Запуск программ на ПК где не установлена Qt.
Цитата(Trisch @ 14.1.2015, 16:00) *
arhohryakov, Это указывается где-то в настройках Creator-а или при запуске windeployqt.exe через консоль?

При запуске windeployqt.exe, через параметры.
arhohryakov, Trisch,
28.12.2014, 17:22 QDate туда сюда
Цитата(ldir @ 28.12.2014, 15:37) *
Здравствуйте, уважаемые форумчане.
Столкнулся с такой штукой: надо было перевести из строки в QDate. Строка типа "27 ноября 2014 г." - т.е. была получена из даты методом QDate::currentDate().toString(Qt::SystemLocaleLongDate). Короче никак. Подскажите, почему

qDebug() << QDate::fromString(QDate::currentDate().toString(Qt::SystemLocaleLongDate),Qt::SystemLocaleLongDate);

дает пустой QDate?

Увы, это старый баг Qt.
ldir,
6.11.2014, 13:41 Проблема с QSettings
Цитата(Trisch @ 6.11.2014, 13:09) *
Вот в чем может быть проблема?

Возможно проблемы с доступом. Проверьте что выводит QSettings::status().
А возможно Вам следует просто вызвать QSettings::sync().
Trisch,
5.9.2014, 23:28 Не создается файл в windows
Цитата(Trisch @ 5.9.2014, 22:56) *
Под Linux все нормально работает, но под windows файл не создается.
При этом, в другой программе подобный код под windows нормально отрабатывает.

Вот в чем может быть проблема? Где можно искать неполадки?

Неполадки можно посмотреть вызвав функцию file.errorString().

Файл может не создаваться по нескольким причинам. Во-первых, из-за нарушения правил именования файлов - наличия запрещенных символов (которые, кстати, в Linux'е и в windows'е отличаются), слишком длинного имени файла, слишком большой вложенности каталогов и т.д.. Во-вторых. из-за нехватки прав у Вашей программы или пользователя - попробуйте запустить ее от имени администратора. В-третьих, из-а повреждения файловой системы. В-четвертых, из-за защиты файловой системы от записи (если, например, используете SD карту с locker'ом).
В общем, проблема может быть где угодно - все зависит от конкретной ситуации.
Trisch,
5.9.2014, 4:56 Правильно написать функцию в GUI проге
Цитата(Aleksei @ 4.9.2014, 22:19) *
если писать if (iFile.isOpen()== true) тоже не работает. Запускается без ошибки но результат всегда закрыт файл.

Вам явно не хватает знаний языка, и как уже советовали выше - стоит почитать литературу. Я бы порекомендовал Лафоре, данная книженция чертовки помогла мне в свое время.

QFile iFile(mFile);
if (iFile.isOpen()== true)
Данная конструкция всегда будет возвращать false т.к. вы поверяете открытость не mFile, а открытость объекта iFile, для которого функция open не вызывалась. iFile, cFile и oFile - это совершенно разные переменные, между собой никак не связанные.

void MainWindow::on_pushButton_3_clicked()
{
    QFile cFile(mFile);
    cFile.close();
}
Данная конструкция вообще лишена смысла т.к. вы пытаетесь закрыть еще не открытый файл. Поймите, Вы работаете не с файлом mFile (это всего лишь путь к файлу, а не его handle), а с локальным объектом QFile, который создаете на стеке и который будет уничтожен при выходе из функции, например здесь:
void MainWindow::on_pushButton_2_clicked()
{
    QFile oFile(mFile);
    if(!oFile.open(QFile::ReadOnly | QFile::Text))
    {
       QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
       return;
    }
    QTextStream stream(&oFile);
    QString buffer = stream.readAll();
    ui->textEdit->setText(buffer);
}    //<- вот здесь объект oFile будет уничтожен, и закрытие файла произойдет автоматически.


Если Вы хотите управлять объектом QFile вручную, то Вам следует вынести его в члены класса, например:
Раскрывающийся текст

где то в .h файле:
QFile _file;

в .cpp файле:
void MainWindow::on_action_1_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    if(!fileName.isEmpty())
    {
         ui->statusBar->showMessage("Выбран файл",1500);
         ui->svoistvaButton->setEnabled(true);
         _file.setFileName(fileName);
    }
    else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
    return;

}

void MainWindow::on_svoistvaButton_clicked()
{
    QFileInfo info(_file);
    ui->label->setText("Имя файла: " + info.fileName());
    ui->label_2->setText("Размер файла: " + QString::number(info.size()/1024) + " Кб");
    ui->label_3->setText("Дата изменения: " + info.lastModified().toString());
}

void MainWindow::on_pushButton_2_clicked()
{
    if(!_file.isOpen() && !_file.open(QFile::ReadOnly | QFile::Text))
    {
       QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
       return;
    }
    QTextStream stream(&_file);
    QString buffer = stream.readAll();
    ui->textEdit->setText(buffer);
}
void MainWindow::on_pushButton_3_clicked()
{
    _file.close();
}
void MainWindow::on_pushButton_clicked()
{
    if (_file.isOpen())
        ui->statusBar->showMessage("Файл открыт",1500);
    else
        ui->statusBar->showMessage("Файл закрыт",1500);
}

Однако такой подход не является правильным т.к. файл у Вас открыт слишком долго. Обычно файлы закрываются сразу после использования (например, чтения или записи), чтобы другие приложения тоже имели к ним доступ.
Aleksei,
4.9.2014, 8:30 Создание сетевого подключения на PC
Цитата(Make_Pic @ 4.9.2014, 5:58) *
Остался баг с подтрмаживанием обмена по COM порту при перемещении или изменении размеров окна?

Это связано с тем, что судя по всему, у Вас работа с COM портом производится в основном потоке, где обрабатываются события интерфейса. И Вам следует создать специальный поток для работы с COM портом.

Цитата(Make_Pic @ 4.9.2014, 5:58) *
...чтобы программы имели доступ в интернт, короче было нормальное подключение к интернету чере 3G модем

Теоретически, после установления соединения должно появится новое сетевое подключение, через которое все программы и будут выходить в интернет.
Если его нет, то прошу прощения, значит мое предположение не верно. И Вам проще всего использовать дополнительное ПО для установления соединения. В Linux'е, я бы использовал WvDial. Под винду в интернете нашел:
3G Modem Internet Dialer - софтину с интерфейсом, в исходном коде которой можно посмотреть как это делается;
DotRas - библиотеку, которую можно использовать для установления соединения;
Qt Cell Module - модуль для работы с телефонией;
и MSDN документацию - для программного создания соединения.
Что из этого подойдет не знаю, тут только пробовать надо.
Make_Pic,
2.9.2014, 22:41 перетаскивание группы виджетов
Цитата(borune @ 2.9.2014, 19:23) *
Хотелось бы все-таки использовать мышь для решения задачи.

Вот, за вечер набросал примерчик. Реализовал как Drag&Drop, так и кнопочки.
К сожалению, не могу сказать что получилось просто, быстро и понятно - однако вполне работоспособно :). А вот теперь вопрос к знатокам: правильный ли у меня подход или же нет и все можно сделать проще?
borune,
30.8.2014, 12:27 Урок 11 Попробуем выстрелить;Баг отрисовки - как исправить?
Проще всего данный баг лечится простой заменой update(region); на update(); в функции CannonField::moveShot().

Кстати, чтобы избавиться от эффекта антиалиазинга (при отрисовки орудия) стоит добавить painter.setRenderHint(QPainter::Antialiasing, true); после QPainter painter(this); в функции CannonField::paintEvent(QPaintEvent *).

I_Wanna_Know,

RSS Текстовая версия Сейчас: 18.9.2024, 16:29