Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2015, 10:54   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию QT - Кодирование с произвольной кодировкой

Есть вот такой вот массив: bool a2[10];
Имеется textEdit, в котором представлена произвольная информация, символы - буквы, цифры...
Мне нужно получить бинарный код, который я запишу в bool a2[10].

Я смотрел примеры, как это вообще делается:
Код:
QTextCodec *koiCodec = codecForName("KOI8-R");
    QByteArray data = koiCodec->fromUnicode(ui->textEdit->toPlainText());
Но ошибка:
Цитата:
C:\Users\engineer\Documents\Qt\sig_ gen\mainwindow.cpp:11: ошибка: 'codecForName' was not declared in this scope
QTextCodec *koiCodec = codecForName("KOI8-R");
Я не нашел ответа, но понял, что мне нужно не совсем так. Есть МКТ-2:
https://ru.wikipedia.org/wiki/%D0%9C%D0%A2%D0%9A-2 Мне нужно кодировать и декодировать символы этим кодом. Как это проще написать на QT?
Krasi вне форума Ответить с цитированием
Старый 10.11.2015, 15:25   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Но ошибка
Ну так правильно метод вызывайте QTextCodec::codecForName

Заведите массив перекодирования. Читайте файл, выделяйте по 5 битов и берите нужный элемент массива.

Последний раз редактировалось p51x; 10.11.2015 в 15:38.
p51x на форуме Ответить с цитированием
Старый 11.11.2015, 09:26   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Код:
QString str = ui->textEdit->toPlainText();
    QTextCodec *koiCodec = QTextCodec::codecForName("KOI8-R");
    QByteArray data = koiCodec->fromUnicode(ui->textEdit->toPlainText());
Приводит к
Цитата:
C:\Users\engineer\Documents\Qt\sig_ gen\mainwindow.cpp:11: ошибка: incomplete type 'QTextCodec' used in nested name specifier
QTextCodec *koiCodec = QTextCodec::codecForName("KOI8-R");
^
Цитата:
C:\Users\engineer\Documents\Qt\sig_ gen\mainwindow.cpp:12: ошибка: invalid use of incomplete type 'class QTextCodec'
QByteArray data = koiCodec->fromUnicode(ui->textEdit->toPlainText());
^
Что не так?
Krasi вне форума Ответить с цитированием
Старый 11.11.2015, 10:40   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А заголовки вы подключили?
p51x на форуме Ответить с цитированием
Старый 11.11.2015, 11:20   #5
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

А какие? Есть только эти:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
Krasi вне форума Ответить с цитированием
Старый 11.11.2015, 12:16   #6
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

С KOI8-R разобрался. #include <QTextCodec>
А вот как сделать свою кодировку, либо МКТ-2
Krasi вне форума Ответить с цитированием
Старый 11.11.2015, 13:21   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Если хотите через QTextCodec то пишите свой кодек и регистрируйте.
p51x на форуме Ответить с цитированием
Старый 11.11.2015, 14:14   #8
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

А можно подробнее?
Krasi вне форума Ответить с цитированием
Старый 11.11.2015, 14:39   #9
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

И если не через кодек, то можно так?:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextCodec>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString str = ui->textEdit->toPlainText();
    QTextCodec *koiCodec = QTextCodec::codecForName("KOI8-R");
    QByteArray data = koiCodec->fromUnicode(ui->textEdit->toPlainText());

    int a1[10];

    a1[0] = ui->lineEdit->text().toInt();
    a1[1] = 0;
    bool a2[5];
    a2 = mtk2('A');
    //a2[0] = 1;
}


//---------------------------------------------------
bool* mtk2(char c)
{
    bool* mass = new bool[5];
    if (c=='A') {mass[0] = 0; mass[1] = 1; mass[2] = 0; mass[3] = 0; mass[4] = 0;}
    if (c=='B') {mass[0] = 1; mass[1] = 0; mass[2] = 0; mass[3] = 0; mass[4] = 0;}
    return mass;
    return 0;
}

MainWindow::~MainWindow()
{

    delete ui;
}
Почему пишет
Цитата:
C:\Users\engineer\Documents\Qt\sig_ gen\mainwindow.cpp:21: ошибка: 'mtk2' was not declared in this scope
a2 = mtk2('A');
^
?
Krasi вне форума Ответить с цитированием
Старый 11.11.2015, 16:41   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Потому что нету там этой функции. Либо опишите функцию до, либо нарисуйте прототип до.
p51x на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RTTI. Заполнение произвольной структуры. Delphi_ProGer Общие вопросы Delphi 4 05.08.2012 10:02
стек произвольной глубины tiger() Общие вопросы C/C++ 10 11.05.2011 13:47
Ввод произвольной строки в C++ SrgGld Общие вопросы C/C++ 0 24.10.2010 00:02
Ширина текста у произвольной канвы AnTe Мультимедиа в Delphi 10 23.06.2009 14:59
выделение произвольной области на изображении seregaAV110 Помощь студентам 2 16.11.2008 11:46