1

Тема: Українська мова в QT

Доброго дня всім, мені потрібно взяти символ з textEdit'a, але цей символ буде українською або російською, перевіряю символ

if(text[1] == 'П')

але воно повертає фолс, при тому, що все виконує умови.

Що ж робити?

2

Re: Українська мова в QT

а text[1] - це точно 'П' ? Може text[0] ?

Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: RostikTawer1

3

Re: Українська мова в QT

Точно 'П' - я вже багато як перевіряв, і у мене цикл з нуля йде, 1 я щоб зрозуміли написав

Подякували: FakiNyan1

4

Re: Українська мова в QT

А якщо L'П'?

Подякували: RostikTawer, FakiNyan, Betterthanyou, nazar4

5

Re: Українська мова в QT

Дякую, допомогли, а що це таке? вперше бачу таке

6

Re: Українська мова в QT

http://en.cppreference.com/w/cpp/langua … er_literal
http://en.cppreference.com/w/cpp/langua … ng_literal

Подякували: RostikTawer, leofun012

7 Востаннє редагувалося Betterthanyou (20.03.2018 23:27:21)

Re: Українська мова в QT

Для порівняння рядків (а також символів) є спеціальний метод "compare"
http://doc.qt.io/qt-5/qstring.html#compare-1
і клас QChar для символів
http://doc.qt.io/qt-5/qchar.html
bool operator==(QChar c1, QChar c2)
Returns true if c1 and c2 are the same Unicode character; otherwise returns false.

8

Re: Українська мова в QT

О, це чудово, що ви написали про QChar! І як же ви пропонуєте його тут застосовувати? Дайте здогадаюся:

if(text[1] == QChar(L'П'))

правильно? Дуже зручно.

Подякували: sensei1

9

Re: Українська мова в QT

if(text.at(1) == "П")

10

Re: Українська мова в QT

Betterthanyou написав:
if(text.at(1) == "П")

Обклався попкорном, чекаю на спробу це реалізувати.

Подякували: 0x9111A1

11

Re: Українська мова в QT

koala написав:
Betterthanyou написав:
if(text.at(1) == "П")

Обклався попкорном, чекаю на спробу це реалізувати.

Щo реалізувати ? Не зрозумів, QString i QChars вже має такі перевантаження

QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character...,QString provides dozens of overloads designed to simplify string usage...

#include <QCoreApplication>
#include <QString>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString text1 = "*Привіт*";
    QString text2 = "*Щось інше*";
    
    
    if(text1.at(1) == "П")
        std::cout<<"Success\n";
    else
        std::cout<<"Fail\n";

    if (text2.at(1) == "П")
        std::cout << "Success\n";
    else
        std::cout << "Fail\n";

    return a.exec();
}

12

Re: Українська мова в QT

І що, таке прокатило?
Тоді цікаво вже, чому перше не йшло.

13 Востаннє редагувалося Betterthanyou (22.03.2018 21:56:58)

Re: Українська мова в QT

Так, працює.



'П' це

http://www.utf8-chartable.de/unicode-ut … p;utf8=dec
UTF-8(dec.) = 208 159

    unsigned char text[10] = "П\0";
    std::cout<<(unsigned)text[0]<<'\n';
    std::cout<<(unsigned)text[1]<<'\n';
    std::cout<<(unsigned)text[2]<<'\n';
//208 159 0

у одинарних лапках може бути лише один символ (за стандартними налаштуваннями кодування), тому 208 відкидається (159 залишається). (не перевірено!)

std::cout<<(unsigned)(unsigned char)'П'<<'\n';
//159

у подвійних лапках можна "скільки завгодно" писати символів, вони не будуть відкидатися.

The wchar_t type is defined by MIDL as an unsigned short (16-bit) data object.
L'П' - це два байти
'П' - один байт


Оскільки Qt працює в Unicode 4.0 character, то напевно ASCII конвертується в Unicode, а вже потім порівнюється

QCeator видає попередження якщо написати 'П': "warning: multi-character character constant [-Wmultichar]
if(text1.at(1) == 'П')"

Якщо ж  написати "П" - ніяких попереджень/помилок немає


std::cout<<(unsigned short)L'П'<<'\n';//1055
std::cout<<(unsigned short)'П'<<'\n';//53407

1055 - Unicode code point (або  0x41f)
53407 (208 | 159)  - UTF-8(dec.)