Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt4] QString преобразование в wchar_t*


Автор: Girin 31.3.2008, 10:52
Нужно перевести корректно   кутешную строку в wchar_t* . 
Преобразование через стльную строку : 
Код
const wchar_t * temp=str.toStdWString().c_str();
 работает почему то через раз  при тестовых запусках программы, т.е. иногда возвращается пустая строка. Хотя вводимые данные одни и те же при каждом запуске. А прямое преобразование :
Код
wchar_t * temp=reinterpret_cast<wchar_t *>(fileName.toLocal8Bit().data());

не работает вообще ...

Автор: Denjs 31.3.2008, 10:59
делал так:
Код

int t_seriallink_otpd::Open(QString DevPath_)


.... бла-бла-бла ...

    // Win:
    #elif defined (Q_WS_WIN)
        WCHAR buf[2048];
        //qDebug() << "---> entering: " << "Open() " << DevPath_;
        buf[DevPath_.toWCharArray((wchar_t*)&buf)]=0;
            //to_wchar_t(DevPath_,&buf,2048);
    
        Serial_Handle = CreateFile(
                (const WCHAR*)&buf
                ,GENERIC_READ | GENERIC_WRITE  // Read-Write access
                ,0 // Cannot be shared ( else- FILE_SHARE_READ | FILE_SHARE_WRITE )
                ,NULL // Security Attributes
                ,OPEN_EXISTING // Open existing file
                ,FILE_ATTRIBUTE_NORMAL || FILE_FLAG_WRITE_THROUGH // | FILE_FLAG_NO_BUFFERING // Auto flush
                ,NULL // Template File
                );
.... и далее по тексту...

Автор: Girin 31.3.2008, 11:13
Спасибо огромное ! Теперь все нормально преобразуется 

Автор: SABROG 31.3.2008, 12:07
А можно вопрос ? Для чего в Qt использовать WinApi CreateFile ? Для обращения к COM'порту чтоль ?

Автор: Denjs 31.3.2008, 13:22
Цитата(SABROG @ 31.3.2008,  12:07)
А можно вопрос ? Для чего в Qt использовать WinApi CreateFile ? Для обращения к COM'порту чтоль ?

оно самое. 

Автор: just_geek 1.4.2008, 11:50
под виндой и такое сработает:
wchar_t *arr = (wchar_t*)str.utf16();

Автор: SABROG 1.4.2008, 12:15
А нафиг вообще так извращаться с кодировкой ? Можно юзать CreateFileA, чтобы текст в обычной кодировке передавать.

Автор: archimed7592 4.4.2008, 00:00
Оффтопик: есть опенсурс либа для работы с COM портом в Qt.


Цитата(Girin @  31.3.2008,  10:52 Найти цитируемый пост)
 работает почему то через раз  при тестовых запусках программы

Конечно... ибо нужно писать так:
Код

std::wstring wstr = str.toStdWString();
const wchar_t * temp= wstr.c_str();
// ... указатель temp станет невалидным("станет работать через раз" :)) в тот же момент, когда уничтожится объект wstr

Автор: Denjs 6.4.2008, 10:55
>>Оффтопик: есть опенсурс либа для работы с COM портом в Qt.
да,... QExtSerialPort ...(?) но я об этом узнал когда уже поздно было ... и теперь их две (библиотеки)... ^_^

обе опенсорсных и обе под QT ) моя правда не только для com-порта...


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)