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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: перевод из одной кодовой страницы в другую  (Прочитано 8039 раз)
roginovicci
Гость
« : Апрель 21, 2009, 19:18 »

Помогите разобраться как переводить текст из одной кодовой страницы в другую. Например из кои8 в утф8 и обратно, или из кои8 в цп1251.
Работа с строками не из main() так что QTextCodec не подходит, почему то он только из тела main работает. Не до конца понимаю почему. Пока что единственное, что приходит в голову - создание дочернего класса на базе QTextCodec...
Записан
Rcus
Гость
« Ответ #1 : Апрель 21, 2009, 19:30 »

/*потерял на мгновение да речи*/
...!!!

что значит не из main? из WinMain? Или ваша система настолько необычна, что исполняемые модули имеют другую точку входа?

у меня QTextCodec работают нормально, давайте вы покажете нам пример в котором его использование ведет к неожиданные недокументированным результатам. И нет, для использования таких распространенных кодировок как windows-1251, koi-8 и utf8 потомки QTextCodec не нужны
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Апрель 21, 2009, 19:30 »

>>Работа с строками не из main() так что QTextCodec не подходит,
никакой привязки кодека к функции main не существует
Записан

Юра.
roginovicci
Гость
« Ответ #3 : Апрель 22, 2009, 15:40 »

Я имел ввиду, что действия связанные с кодеком производятся не в теле main(). Вот что у меня происходит:
Код:
#include "maindialog.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

 //   QTextCodec * myTextCodec = QTextCodec::codecForName("KOI8-R");
 //   QTextCodec::setCodecForCStrings (myTextCodec);
    MainFrame win;
    win.show();

    app.exec();

}

если раскоментировать строки начинающиеся с QTextCodec то ошибки не происходит при компиляции. А вот если тоже самое проделать в классе MainFrame:
Код:
class MainFrame : public QDialog, private Ui::MainDialog
{
    Q_OBJECT
public:
    MainFrame(QWidget *parent = 0);
public slots:
// нажали на кнопку
    void load_pressed();
};
MainFrame::MainFrame(QWidget *parent): QDialog(parent)
{
    setupUi(this);
    connect(Load_butn, SIGNAL(clicked()),this, SLOT(load_pressed()));
}
void MainFrame::load_pressed()
{
    QTextCodec * myTextCodec = QTextCodec::codecForName("KOI8-R");
    QTextCodec::setCodecForCStrings (myTextCodec);
    delete myTextCodec;
}
то происходит ошибка компиляции:
maindlg.cpp|22|error: incomplete type `QTextCodec' used in nested name specifier|
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Апрель 22, 2009, 15:51 »

#include <QTextCodec>

?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
roginovicci
Гость
« Ответ #5 : Апрель 22, 2009, 15:55 »

Оппа... стыдно мне Обеспокоенный...
А удалять надо объект?
Код:
 delete myTextCodec;
Я что то не понимаю. Создается объект или нет?
« Последнее редактирование: Апрель 22, 2009, 16:05 от roginovicci » Записан
spirit
Гость
« Ответ #6 : Апрель 22, 2009, 16:09 »

не нужно его удалять таким образом,
Qt сама его убьет.
если конечно ты его сам руками не создаешь,
а получал через метод QTextCodec::codecForName и ему подобные.
Записан
roginovicci
Гость
« Ответ #7 : Апрель 22, 2009, 16:15 »

Да, получаю при помощи codecForName. т.е. таким образом я получаю указатель на объект созданный самой куте, да? Ведь я же не могу сам создать объект виртуального класса, верно?
Записан
spirit
Гость
« Ответ #8 : Апрель 22, 2009, 16:16 »

ага, Qt сама его создаетб, сама и удаляет.
Записан
roginovicci
Гость
« Ответ #9 : Апрель 22, 2009, 16:26 »

понял. Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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