Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Novicheck от Апрель 28, 2015, 11:10



Название: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 11:10
подскажите что не так, пожалуйста
Код:
QString city_1 = settings->value("city_1").toString();
mes = new QMessageBox(QMessageBox::NoIcon, tr("Описание объекта"), city_1);
ругается на QString city_1


Название: Re: подскажите что не так
Отправлено: gil9red от Апрель 28, 2015, 11:17
подскажите что не так, пожалуйста
Код:
QString city_1 = settings->value("city_1").toString();
mes = new QMessageBox(QMessageBox::NoIcon, tr("Описание объекта"), city_1);
ругается на QString city_1

Я сейчас тоже буду ругаться ;D
Какая ошибка? :)


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 11:20
действительно, извиняюсь
ошибка: no matching function for call to 'QMessageBox::QMessageBox(QMessageBox::Icon, QString, QString*&)'


Название: Re: подскажите что не так
Отправлено: Пантер от Апрель 28, 2015, 11:22
Ты точно правильно код привел?


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 11:23
один в один


Название: Re: подскажите что не так
Отправлено: PimenS от Апрель 28, 2015, 11:32
попробуй так:

Код:
    QString city_1(settings->value("city_1").toString());
    QMessageBox mes(QMessageBox::NoIcon, tr("Описание объекта"), city_1);
    mes.exec();


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 11:36
та же самая ошибка(


Название: Re: подскажите что не так
Отправлено: Пантер от Апрель 28, 2015, 11:38
Минимальный некомпилябельный пример в студию.


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 11:49
Код:
#include "map.h"

#include <QTextCodec>

map::map(QWidget *parent)
    : QWidget(parent)
{
    QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);

    btn_msc = new QPushButton(tr("Москва"));

    settings = new QSettings("data_map.ini", QSettings::IniFormat);
    QString city_1 = settings->value("city_1").toString();
    connect(btn_spb, SIGNAL(clicked()), SLOT(message_show()));
}

void map::message_show()
{
    mes = new QMessageBox(QMessageBox::NoIcon, tr("Описание объекта"), city_1);
    mes->show();
}

map::~map()
{
   
}


Название: Re: подскажите что не так
Отправлено: Пантер от Апрель 28, 2015, 11:52
Эм. city_1 ты создаешь в пределах области видимости конструктора, откуда ему взяться в message_show()???
Да, еще, нахрена называть класс именем, которое уже используется в stl?


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 11:58
имена так присвоены наоборот для удобства(удобства проверки в смысле), ибо их там огромное количество(здесь приведена лишь выдержка), а с инициализацией в конструкторе действительно я жестко затупил... спасибо большое!


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 12:54
подскажите еще пожалуйста как установить русскую кодировку для моего QString city_1.
QTextCodec *codec = QTextCodec::codecForName("CP1251"); в конструкторе я уже объявил, и он работает корректно с текстом в QLabel, QPushButton и заголовках форм, а в QString city_1 абру-кадабру выводит.
в чем может быть проблема?


Название: Re: подскажите что не так
Отправлено: Пантер от Апрель 28, 2015, 12:56
В какой кодировке ini файл? Да, не используй символы кириллицы в коде.
Смотри void QSettings::setIniCodec(QTextCodec * codec)


Название: Re: подскажите что не так
Отправлено: Novicheck от Апрель 28, 2015, 13:06
setIniCodec помог))
да, надо мне повнимательней курить документацию.
Спасибо большое, Пантер! выручаете меня сегодня весь день)


Название: Re: подскажите что не так
Отправлено: Kurles от Апрель 28, 2015, 13:06
Да, не используй символы кириллицы в коде.
Применительно к исходникам С++ + Qt чем плохо использование кириллицы, если все файлы в utf-8?


Название: Re: подскажите что не так
Отправлено: Пантер от Апрель 28, 2015, 13:33
Да, не используй символы кириллицы в коде.
Применительно к исходникам С++ + Qt чем плохо использование кириллицы, если все файлы в utf-8?
1. Есть же возможность перевода - зачем засорять исходники?
2. Не будет проблем, как у ТС.
3. Можно все увидеть в том случае, когда utf-8 недоступна.


Название: Re: подскажите что не так
Отправлено: Bepec от Апрель 28, 2015, 14:15
Проще выражаясь, ничем не плохо.
Есть пара подводных камней, но они несущественны и решаемы. Вопрос скорее привычки и принципов.

Хотя для начинающих использование совет не использовать кириллицу подходит, но добавляет такую кучу проблем, что новичек скорее плюнет на совет.

PS пример с моего овладевания Qt:
Использовать кириллицу в коде:
    Пишем слово "Траляля" и потом 3 строчки QTextCodec в main.
    
Не использовать -//-//-//-:
    Пишем слово "Tralala", запускаем лингвист, создаём файл перевода (не помню какое расширение), переводим Tralala в Траляля, компилируем всё в .qm, в коде программы заводим транслятор и загружаем файл перевода.

Я б сказал для крупных проектов совет подходит. Для средних и мелких проще написать "Траляля" :)

PPS и да, "Траляля" транслятор глотает так же хорошо, что и "Tralala".


Название: Re: подскажите что не так
Отправлено: Igors от Апрель 29, 2015, 06:50
Да, не используй символы кириллицы в коде.
Применительно к исходникам С++ + Qt чем плохо использование кириллицы, если все файлы в utf-8?
Тем что "неоднообразно" - если то ... или это... Решение "не использовать" совершенно однозначно и пресекает (ненужные) дебаты.

И вообще не надо считать что "tr" - это "вышак". По-взрослому все тексты должны быть в ресурсах