Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Aleksey от Сентябрь 27, 2012, 09:04



Название: QTextBrowser Изменить html в runtime [РЕШЕНО]
Отправлено: Aleksey от Сентябрь 27, 2012, 09:04
Здравствуйте.

На маленькой форме нужно организовать выбор товара.

Товар - это картинка и текст.

Все товары (их не много) должны быть включены в exe файл.

(http://i42.fastpic.ru/big/2012/0927/34/0ec22de34a82af6fc031789739582f34.png)

Решил все организовать с помощью QTextBrowser и пары кнопок.
Научился добавлять в ресурсы программы картинки для html QTextBrowser.

Вопрос: можно ли добавить в ресурсы программы набор разных html для каждого товара и как их в runtime загрузить в QTextBrowser?

Спасибо за внимание.


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 09:10
Мда. У меня рука не поднимается описать все мои чуйства :)

Суй свои товары в qrc.

setSource() поможет засунуть в TextBrowser.



Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Aleksey от Сентябрь 27, 2012, 09:52
Суй свои товары в qrc.
setSource() поможет засунуть в TextBrowser.

Верес, я сделал так:
Засунул html в qrc файл, вот его содержание:
Код:
<RCC>
    <qresource prefix="/ru_images">
        <file>Res_RU/images/hare_ru.jpg</file>
    </qresource>
    <qresource prefix="/ru_html">
        <file>Res_RU/html/hare_ru.html</file>
    </qresource>
</RCC>

Затем, при старте формы попробовал загрузить html вот так:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // tb_good is QTextBrowser
    ui->tb_good->setSource( QString(":/ru_html/Res_RU/html/hare_ru.html") );
    ui->tb_good->show();
}

После запуска TextBrowser пуст :(


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 10:12
Код:
setSource(QUrl::fromLocalFile("тутВашПуть"));


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Aleksey от Сентябрь 27, 2012, 10:18
Код:
setSource(QUrl::fromLocalFile("тутВашПуть"));

Верес, большое спасибо. Заработало. Появилась и картинка и текст.

Только вместо русских букв почему-то кракозябры, хотя html код я один в один копировал из свойств обьекта QTextBrowser в конструкторе формы.


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 10:20
Нууу... А кодеки на русский язык вы установили? :)
Код:
#include <QTextCodec>
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
std::locale loc("russian_russia.1251");
std::locale::global(loc);

Пропиши в мейне.


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Aleksey от Сентябрь 27, 2012, 11:28
Нууу... А кодеки на русский язык вы установили? :)
Пропиши в мейне.

Усп, про кодеки я ничего не знаю. Придется почитать.

Код вставил, не работает. При старте выдает runtime ошибку. Чего-то создать не может.

В консоли такой текст:
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
 


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 12:03
Упс :) У тебя ж не винда наверно :)  UTF-8 везде поставь, должно тогда заработать.

Хотя не уверен, что в QTextBrowser кодировка автоматом не ставится.
Ты html код в чём сохраняешь? в какой кодировке? А в заголовке html указываешь кодировку? :)


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Aleksey от Сентябрь 27, 2012, 12:54
Верес, у меня винда. Сорри, что не сообщил ранее. Консоль я имел ввиду qtCreator'а.

html я беру и копирую из окошка свойств обьекта QTextBrowser и вставляю в открытый нотепад, затем сохраняю как html. В какой кодировке я это делаю - не знаю. Указания кодировки в таком html нет. Я пробовал его добавлять в строчку "<meta name="qrichtext" content="1" />", указание кодировки: "<meta name="qrichtext" content="1; charset=utf-8"/>".
Не помогло. Менял кодировку на другую (windows-1251) - не помогает.

А что делает строчка "std::locale loc("russian_russia.1251");"? Похоже, ломается на ней.

Я думаю, что преобразование русских букв, которые я пишу в дизайнере форм в свойствах компонентов, преобразуются в юникод на этапе компиляции. То есть в QTextBrowser кодировка автоматом не ставится.




Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 13:03
В дизайнере все свойства, все компоненты и прочее хранится в Unicode :) Собственно потому у тебя там на кнопочках могут быть русские буковки, без установки кодировки :)

В общем цимус - берёшь в своём браузере сохраняешь эту страницу :) Да да, вот эту! Да да, на которой я пишу :D

И суёшь этот html себе в textBrowser.

Код:
if (видны русские буковки)
{
 смотришь где указана кодировка и её копируешь
}
else
{
хз что у тебя там, у меня всё работает :D
}


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Aleksey от Сентябрь 27, 2012, 13:29
Верес, спасибо за идею. :) Сохранил pda.compulenta.ru и QTextBrowser отобразил страничку с русскими буквами. Буду искать определение кодировки.


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 13:39
Код:
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Вот осталось только определиться в какой кодировке у тебя в html ке текст :D

PS а заяца такой откуда? Хочу такого :D


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Aleksey от Сентябрь 27, 2012, 13:50
Да.

Вот такой код открывается QTextBrowser нормально:
Код:
<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        </head>
        <body>
Тест русских букв
        </body>
</html>

*.htm файл в кодировке windows-1251, надо полагать. Я его редактирую в qt creator.

А заяц из гугла. :)
Сделал поиск еще раз. Вот, он существует и в не цифровом виде: http://www.1c-interes.ru/catalog/all7154/10902568/


Название: Re: QTextBrowser Изменить html в runtime
Отправлено: Bepec от Сентябрь 27, 2012, 13:52
В заголовок темы пихни [РЕШЕНО]. Ну или удали тему :) Таких овродя много ;)