Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
#1

Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String - C++

29.10.2015, 00:27. Просмотров 875. Ответов 30

Есть строка Glib::ustring, пытался её конвертировать в sf::String, и вроде бы всё работает без особых костылей, но как добрался до кириллицы, нифига ничего не работает.
Придумал такой костыль:
C++
1
2
3
4
5
6
7
sf::String convert_from_ustring (const Glib::ustring& source_string) 
{
    static std::wstringstream ss ;
    ss.clear() ;
    ss << source_string ;
    return sf::String(ss.str()) ;
}
У кого есть винда (под Linux'ами вроде пашет, но тоже лучше потестить) с соответствующими библиотеками (sfml и glibmm) просьба протестировать этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <fstream>
#include <sstream>
#include <SFML/Graphics.hpp>
#include <glibmm.h>
 
 
namespace sfml_tools
{
    //TODO: multithread version
    sf::String convert_from_ustring (const Glib::ustring& source_string)
    {
        static std::wstringstream ss ;
        ss.clear() ;
        ss << source_string ;
        return sf::String(ss.str()) ;
    }
}
 
 
 
 
int main()
{
    using sfml_tools::convert_from_ustring ;
    //std::locale::global(std::locale("ru_RU.UTF-8"));
    std::ifstream file("input.txt") ; //Файл в кодировке utf-8 с русским текстом
    if ( !file.is_open() )
        return -1 ;
 
    std::string line ;
    std::getline ( file , line ) ;
 
    Glib::ustring u_str(line);
    sf::String s( convert_from_ustring(u_str) ) ;
 
    sf::RenderWindow wnd( sf::VideoMode( 800 , 600 ) , "SFML-tools library tests" ) ;
    wnd.setTitle(s);
 
    sf::Font fnt ;
    //Свой шрифт, поддерживающий кириллицу, поставьте
    if ( !fnt.loadFromFile("UbuntuMono-B.ttf") ) {
        return -1 ;
    }
 
    sf::Text txt ( s , fnt , 16 )  ;
    txt.setColor(sf::Color::White);
 
    while( wnd.isOpen() ){
        sf::Event event ;
        while( wnd.pollEvent( event ) ){
            if( event.type == sf::Event::Closed )
                wnd.close() ;
        }
        wnd.clear( sf::Color::Black ) ;
        wnd.draw(txt) ;
        wnd.display() ;
    }
}
Здесь цепочка преобразований std::string -> Glib::ustring -> sf::String.
Нормально ли выводится заголовок и текст в окне.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2015, 00:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String (C++):

Дедушка, а что это за костыль у тебя? - C++
А что это за костыли такие?Прошу помощи олдфагов.Можно будет составить список хотя бы 10 самых самых и привести примеры исходного кода.

Memo->Lines[1] - что за тип? костыль? C++ Builder - C++ Builder
Пояснение: bus03_eightschools.time - int Lines - &quot;06:30&quot; Как записать эту строчку правильно: bus03_eightschools.time =...

Необходимо протестировать костыль - C++
#include &lt;iostream&gt; #include &lt;type_traits&gt; template &lt; typename ReturnType , typename ... ArgsTypePack &gt; void *...

Конвертирование из vector<string> в map - C++
Здравствуйте! Подскажите, пожалуйста, как из vector&lt;string&gt; считать элементы вектора в map. Изначально дан текстовый файл, в котором...

Конвертирование float/int to string - C++
Здравствуйте, я пишу программу на dev-c++ и мне надо конвертировать число в string.Я просто не знаю как это сделать в dev-c++. Помогите...

Glib.h в Windows - C++
Доброго времени суток! Столкнулся с маленькой проблемой: не компилируется программа с библиотекой glib.h в windows (MinGW). Под debian...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
29.10.2015, 00:52  [ТС] #2
Собственно, под Ubuntu-MATE 14.04:
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
29.10.2015, 02:32  [ТС] #3
Еще такой вариант у меня работает:
C++
1
sf::String s( sf::String::fromUtf32(u_str.begin(),u_str.end()) ) ;//Или fromUtf16. Варианты очень хреновые
Добавлено через 43 минуты
Сделал так, если кому будет интересно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
namespace
{
    class ucs4_string_wrapper
    {
    public:
        ucs4_string_wrapper (const Glib::ustring & source_string)
            : m_data (nullptr)
            , m_wc(0)
        {
            m_data = g_utf8_to_ucs4_fast(source_string.data(), source_string.bytes(), &m_wc) ;
        }
        ~ucs4_string_wrapper()
        {
            g_free(m_data) ;
        }
        const gunichar * data() const
        {
            return m_data ;
        }
    private:
        ucs4_string_wrapper (const ucs4_string_wrapper&) = delete ;
        ucs4_string_wrapper & operator=(const ucs4_string_wrapper&) = delete ;
        gunichar * m_data ;
        glong m_wc ;
    };
}
 
 
namespace sfml_tools
{
    sf::String convert_from_ustring (const Glib::ustring& source_string)
    {
        ucs4_string_wrapper usc4_str (source_string) ;
        return sf::String ( static_cast<const sf::Uint32*>(usc4_str.data()) ) ;
    }
}
 
//...
 
sf::String s(convert_from_ustring(u_str)) ;
0
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 09:26 #4
Croessmah, поставил sfml и glib2 и glibmm с помощью msys2. Прописал пути в Search Directories (он меня задолбал, честно говоря - то один файл не могу найти, то другой, в общем, в итоге я его уговорил, что все файлы есть у нас), можно компилить. Попробовал первый пример. Не компилит. Ошибку выдаёт:
1
Миниатюры
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String  
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
29.10.2015, 10:41  [ТС] #5
Компилятору: `pkg-config --cflags glibmm-версия`
Линкеру: `pkg-config --libs glibmm-версия`
С такими кавычками, как в примере. Версию свою прописать

Добавлено через 17 минут
gru74ik, в qtcreator у меня CMakeLists.txt такой:
Код
project(sfml_tools)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST )
add_definitions(-std=c++14)
file(GLOB TEMPLATE_HEADERS . "resholder.hpp")
find_package(PkgConfig)
pkg_check_modules(GLIBMM glibmm->=2.0)
link_directories(${GLIBMM_LIBRARY_DIRS})
include_directories(${GLIBMM_INCLUDE_DIRS})
pkg_check_modules(LIBXML libxml++->=2.6)
link_directories(${LIBXML_LIBRARY_DIRS})
include_directories(${LIBXML_INCLUDE_DIRS})

set(SFML_LIBRARIES sfml-graphics sfml-window sfml-system)
add_executable(${PROJECT_NAME} ${SRC_LIST} ${TEMPLATE_HEADERS})
target_link_libraries (${PROJECT_NAME} ${GLIBMM_LIBRARIES} ${SFML_LIBRARIES} ${LIBXML_LIBRARIES})
0
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 10:43 #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Компилятору: `pkg-config --cflags glibmm-версия`
Линкеру: `pkg-config --libs glibmm-версия`
Так?
1
Миниатюры
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String  
Kerry_Jr
Модератор
Эксперт PHP
2191 / 1987 / 694
Регистрация: 14.05.2014
Сообщений: 5,812
Записей в блоге: 1
Завершенные тесты: 5
29.10.2015, 10:58 #7
gru74ik, pkg-config - это утилита, ее уж точно в C::B не нужно прописывать.

Добавлено через 54 секунды
Попробуйте то, что написал Croessmah, в MSYS выполнить.
1
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 11:00 #8
В QtCreator пока тоже не получается:
1
Миниатюры
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String  
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 11:04 #9
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
gru74ik, pkg-config - это утилита, ее уж точно в C::B не нужно прописывать.
Я плохо эти инструменты знаю. Благодарю за поправку.

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Попробуйте то, что написал Croessmah, в MSYS выполнить.
Сейчас попробую.
1
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
29.10.2015, 11:09  [ТС] #10
Цитата Сообщение от gru74ik Посмотреть сообщение
Так?
Кликните здесь для просмотра всего текста
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String


P.S. естественно, pkg-config должен стоять. Ну или либы и пути руками прописывать.
1
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 11:10 #11
Не прокатило:
1
Миниатюры
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String  
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 11:10 #12
Croessmah, ага, понятненько. Ща попробуем.
1
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 11:28 #13
Не, ошибка та же самая остаётся. Настройки вот так сделал:
1
Миниатюры
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String  
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,374
Записей в блоге: 3
Завершенные тесты: 1
29.10.2015, 11:31  [ТС] #14
gru74ik, а версия glibmm 2.4?
Что команда pkg-config --libs glibmm-2.4 в консоли выдает(без кавычек)?
0
gru74ik
Модератор
Эксперт CЭксперт С++
4177 / 1805 / 197
Регистрация: 20.02.2013
Сообщений: 4,943
Записей в блоге: 21
29.10.2015, 11:45 #15
Цитата Сообщение от Croessmah Посмотреть сообщение
gru74ik, а версия glibmm 2.4?
Да, msys2 именно эту версию ставит:
1
Миниатюры
Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String   Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2015, 11:45
Привет! Вот еще темы с ответами:

Асинхронные очереди Glib - C++
Всем привет! Не уверен в своём навыке понимания, решил воспользоваться библиотекой glib. Потребовалась реализация передачи сообщений от...

c++ string конвертирование - C++/CLI WinForms
есть string1 = 12.35.40 типо время надо сравнить с string2 = 14.42.25 тоже типо время и узнать разницу между ними. по идее будет где то...

Конвертирование String в Thickness - C# WPF
Есть textbox с биндом на свойство типа thickness. но автоматом не ковертит. на ввод 1,2,3,4 - никакой реакции. &lt;TextBox...

Конвертирование double to string. - C#
1. при конвертирование double to string, получається разделитель между целой и дробной частью кома, а нужно точку есть 1,22 а нужно 1.22...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.10.2015, 11:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru