Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: daimon от Октября 11, 2012, 00:28



Название: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 00:28
Как подключить css в ресурсах?

Код
C++ (Qt)
QWebPage *page = new QWebPage();
page->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile(":/Resources/default.css"));

если просто локальный файл - всё работает

http://stackoverflow.com/questions/9712754/setting-external-css-for-qwebview-with-resource-file (http://stackoverflow.com/questions/9712754/setting-external-css-for-qwebview-with-resource-file)


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 08:12
Эммм.. Вас не волнует, что вы пытаетесь открыть файл, находящийся в ресурсах (запихнутый туда и не распакованный), как обычный файл?

Пример как должно быть: берёте колбасу => откусываете => профит.

У вас: берёте колбасу => ложите в холодильник => пытаетесь откусить через холодильник => ломаете зубы => удивление, голод, тема на форуме :D

PS вы сейчас пытаетесь открыть файл в ресурсах как локальный файл. А необходимо всего то считать из ресурсов -> запихнуть куда угодно. Он жеж ведь запакован в вашу программу.


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: mutineer от Октября 11, 2012, 09:59
Вроде ж по приведенной ссылке ответили на вопрос


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Igors от Октября 11, 2012, 10:17
Он жеж ведь запакован в вашу программу.
Точнее: он сохранен без всякой упаковки как static данные. Это, кстати, противоречит общей идее ресурсов - они совсем не обязаны быть read-only и загружаться немедленно. Зато с совместимостью без проблем.


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 10:20
Ну вроде ж он запихан в бинарном виде с указанием его типа, не?

PS а можно как нить достать из Qt exe/dll его ресурсы?


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Igors от Октября 11, 2012, 10:34
Ну вроде ж он запихан в бинарном виде с указанием его типа, не?
Ну да

PS а можно как нить достать из Qt exe/dll его ресурсы?
Насчет "достать" не знаю (не вижу как), но это и не особо интересно - ведь легально редактировать без "пересборки" все равно нельзя, что конечно плохо


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 10:42
Как из обычных windows exe доставать - знаю. А вот как из Qt-шных не особо :)

Просто очень интересно, данные, допустим, в текстовом файле получаются общедоступными тогда? Если файл в ресурсах?


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Igors от Октября 11, 2012, 11:00
Как из обычных windows exe доставать - знаю. А вот как из Qt-шных не особо :)

Просто очень интересно, данные, допустим, в текстовом файле получаются общедоступными тогда? Если файл в ресурсах?
Ресурсы Вындоуз - жалкий огрызок по сравнению с тем что было на Mac еще 20 лет назад :) "Файл/данные в ресурсе" имеет разный смысл на разных платформах. На Вындоуз это в формате самого файла, на Mac ресурсы поддерживаются файловой системой, на линукс - не знаю. А "Qt ресурсы" - это как бы Вы написали напр
Код
C++ (Qt)
static char data [] = { .... // тут километры )
 
Ну то есть просто сегмент данных программы - и все. Ну и конечно с редактированием "извне" мрачно


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 12:02
Ппц. А каких нить координат этой области памяти нет? Он же по идее должен иметь какие то ограничения?

PS искал манулы - не нашёл :)


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 13:52
пробую считать файл
Код
C++ (Qt)
QFile file(":/m_metod_qt/Resources/default.css");
 
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
qDebug()<<file.exists();

в ответ false

http://prntscr.com/h7pcu (http://prntscr.com/h7pcu)
http://www.youtube.com/watch?v=sWIQIi4lg58 (http://www.youtube.com/watch?v=sWIQIi4lg58)

что не так?


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 14:08
Код:
	QFile file(":/qrcRead/Resources/qrcread.cpp");
if (!file.open(QIODevice::ReadOnly))
return;

QString f(file.readAll());

Работает как часы.

PS а вот это QFile::ReadOnly вы откуда взяли? Оо

PPS возможно новая версия куте :) Не видел, незнаю.


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: m_ax от Октября 11, 2012, 14:24

PS а вот это QFile::ReadOnly вы откуда взяли? Оо

PPS возможно новая версия куте :) Не видел, незнаю.

QFile наследует от QIODevice..


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 14:27
  ;D


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 14:43
Код
C++ (Qt)
QFile file(":/qrc/Resources/default.css");
 
if (!file.open(QIODevice::ReadOnly)){
qDebug()<<file.exists();
return;
}
 
QString f(file.readAll());
qDebug()<<f;

нет файла и всё

http://prntscr.com/h7rrh (http://prntscr.com/h7rrh)
http://prntscr.com/h7rt5 (http://prntscr.com/h7rt5)
http://prntscr.com/h7ru8 (http://prntscr.com/h7ru8)

что не так?


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: m_ax от Октября 11, 2012, 14:46
пробую считать файл
Код
C++ (Qt)
QFile file(":/m_metod_qt/Resources/default.css");
 
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
qDebug()<<file.exists();

в ответ false

http://prntscr.com/h7pcu (http://prntscr.com/h7pcu)
http://www.youtube.com/watch?v=sWIQIi4lg58 (http://www.youtube.com/watch?v=sWIQIi4lg58)

что не так?

А для чего здесь QLatin1String? Что оно делает?


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 14:47
пробую считать файл
Код
C++ (Qt)
QFile file(":/m_metod_qt/Resources/default.css");
 
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
qDebug()<<file.exists();

в ответ false

http://prntscr.com/h7pcu (http://prntscr.com/h7pcu)
http://www.youtube.com/watch?v=sWIQIi4lg58 (http://www.youtube.com/watch?v=sWIQIi4lg58)

что не так?

А для чего здесь QLatin1String? Что оно делает?

это так с примера содрано, пока проблема - нет файла


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: m_ax от Октября 11, 2012, 14:48
Код
C++ (Qt)
QFile file(":/qrc/Resources/default.css");
 
if (!file.open(QIODevice::ReadOnly)){
qDebug()<<file.exists();
return;
}
 
QString f(file.readAll());
qDebug()<<f;

нет файла и всё

http://prntscr.com/h7rrh (http://prntscr.com/h7rrh)
http://prntscr.com/h7rt5 (http://prntscr.com/h7rt5)
http://prntscr.com/h7ru8 (http://prntscr.com/h7ru8)

что не так?

А это зачем?
Код
C++ (Qt)
qDebug()<<file.exists();
 



Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: m_ax от Октября 11, 2012, 14:50
Короче путь к файлу у вас не правильно записан. Вот и не может он его открыть..


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 14:54
Короче путь к файлу у вас не правильно записан. Вот и не может он его открыть..
если так QFile file("Resources/default.css"); то подхватывается сразу с локали

https://www.dropbox.com/s/wz40tiybci8zxmj/m_metod_qt.7z (https://www.dropbox.com/s/wz40tiybci8zxmj/m_metod_qt.7z)
за говнокод не судите, моя задача есть перевести сие на Qt
к файлу тому стучусь в m_metod_qt.cpp


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 14:57
Код
C++ (Qt)
QFile file(":/qrc/Resources/default.css");
 
if (!file.open(QIODevice::ReadOnly)){
qDebug()<<file.exists();
return;
}
 
QString f(file.readAll());
qDebug()<<f;

нет файла и всё

http://prntscr.com/h7rrh (http://prntscr.com/h7rrh)
http://prntscr.com/h7rt5 (http://prntscr.com/h7rt5)
http://prntscr.com/h7ru8 (http://prntscr.com/h7ru8)

что не так?

А это зачем?
Код
C++ (Qt)
qDebug()<<file.exists();
 



вывести в консоль нашло ли файл или нет


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Пантер от Октября 11, 2012, 15:03
Короче путь к файлу у вас не правильно записан. Вот и не может он его открыть..
если так QFile file("Resources/default.css"); то подхватывается сразу с локали

https://www.dropbox.com/s/wz40tiybci8zxmj/m_metod_qt.7z (https://www.dropbox.com/s/wz40tiybci8zxmj/m_metod_qt.7z)
за говнокод не судите, моя задача есть перевести сие на Qt
к файлу тому стучусь в m_metod_qt.cpp
Все работает.


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 15:05
Короче путь к файлу у вас не правильно записан. Вот и не может он его открыть..
если так QFile file("Resources/default.css"); то подхватывается сразу с локали

https://www.dropbox.com/s/wz40tiybci8zxmj/m_metod_qt.7z (https://www.dropbox.com/s/wz40tiybci8zxmj/m_metod_qt.7z)
за говнокод не судите, моя задача есть перевести сие на Qt
к файлу тому стучусь в m_metod_qt.cpp
Все работает.
Windows x64 ultimate не хочет


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 15:06
Не работало. Взял qrc, удалил оттуда ваш файл, добавил заного -> работает.
W7 x64


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Пантер от Октября 11, 2012, 15:08
daimon, попробуй полный ребилд сделать.


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 15:11
daimon, попробуй полный ребилд сделать.
вроде подхватилось, всему виной было - Qt вроде не создал сырец из под моего ресурса и следовательно его не компилил в бинарник, пересоздал файл ресурса вроде заработало


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: Bepec от Октября 11, 2012, 15:12
Думается, что это не Qt виновато, а addin ваш. Но проблема в принципе решена :)


Название: Re: работа с файлами и QUrl из под ресурсов
Отправлено: daimon от Октября 11, 2012, 15:16
итого css думаю встраивать так

Код
C++ (Qt)
QWebPage *page = new QWebPage();
//page->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile("Resources/default.css"));
QFile file(":/qrc/Resources/default.css");
 
if (!file.open(QIODevice::ReadOnly)){
qDebug()<<"File not exists";
return;
}
 
QString fileStr(file.readAll());
 
page->mainFrame()->setHtml("<style>"+ fileStr + "</style>" + sample.answer().c_str());
ui.webView->setPage(page);