Russian Qt Forum
Ноябрь 25, 2024, 20:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHelpEngineCore - немогу запустить.  (Прочитано 8602 раз)
-QT-
Гость
« : Май 08, 2009, 10:16 »

Всем привет и с наступающим праздником!
Мне нужно засунуть справку в бинарник.
Пытаюсь использовать встроенную справку так как в примере:
Код
C++ (Qt)
QString lcFilePuth = "C:/QtProject/MyApp/resources/help/user.qhc";
QHelpEngineCore *helpEngine = new QHelpEngineCore(lcFilePuth, this);
if(!helpEngine->setupData())
{
delete helpEngine;
helpEngine = 0;
return;
}
 
helpEngine->registerDocumentation(lcFilePuth);
 
Вылетает с варнингами:
Цитировать
WARNING:  QFSFileEngine::open: No file name specified
WARNING:  QTextBrowser: No document for qthelp://ru.myqt.myapp/help/index.html
Хелп ассистантом открывается нормально никаких проблем.
Если засунуть user.qhc в ресурсы то вообще никаких ворнингов и setupData() - false.
Помогите разрулить эту ситуёвину.
Записан
Rcus
Гость
« Ответ #1 : Май 08, 2009, 10:42 »

А как насчет QHelpEngineCore::error()?

P.S. файлы  Qt Collection files имеют расширение .qch
Записан
-QT-
Гость
« Ответ #2 : Май 08, 2009, 12:05 »

А как насчет QHelpEngineCore::error()?

P.S. файлы  Qt Collection files имеют расширение .qch

QHelpEngineCore::error() выдает пустоту ""
а я расширение брал как в работающем примере из QT.
И если поставить расширение .qch то вообще ничего не выводит и не срабатывает, а если .qhc
то вышеприведенную ошибку.

Кстати если файл справки засунуть в ресурсы то QHelpEngineCore::error() выдает "Cannot open collection file: :app/help/user.qhc"
« Последнее редактирование: Май 08, 2009, 12:10 от -=QT=- » Записан
-QT-
Гость
« Ответ #3 : Май 12, 2009, 08:57 »

По итогу я понял что это баг.
http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=247313
Но не догнал как все таки работает пример - ведь он работает сволочь.
Записан
igor_bogomolov
Гость
« Ответ #4 : Май 12, 2009, 12:01 »

Следущий код у меня нормально отображает страничку помощи
Код
C++ (Qt)
    QString collectionFile = "F:/QT/Examples/htmltextdelegate/doc/simpletextviewer.qhc";
    QHelpEngineCore * hec = new QHelpEngineCore(collectionFile);
 
    if (!hec->setupData()) {
       delete hec;
       hec = 0;
    }
 
    if (hec) {
        QList<QUrl> listUrl = hec->files(hec->namespaceName(collectionFile), hec->filterAttributes());
 
        QByteArray ba = hec->fileData(listUrl.first());
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");
        QString string = codec->toUnicode(ba);
 
        QTextBrowser *tb = new QTextBrowser();
        tb->setHtml(string);
        tb->show();
    }
Записан
igor_bogomolov
Гость
« Ответ #5 : Май 12, 2009, 12:32 »

Что то рано я обрадовался.
Таким образом загружается только запрашиваемая страничка. Ссылки не работают, картинки не отображаются.

Использование setSource
Цитировать
QFSFileEngine::open: No file name specified
QTextBrowser: No document for qthelp://com.sgs/documentation/editWindow.html
Записан
-QT-
Гость
« Ответ #6 : Май 12, 2009, 13:20 »

Нужно отнаследоваться от QTextBrowser
и переопределить:
QVariant loadResource(int type, const QUrl &name);
Код
C++ (Qt)
QVariant QextHelpBrowser::loadResource(int type, const QUrl &name)
{
  QByteArray ba;
   if (type < 4 && helpEngine)
   {
       QUrl url(name);
       if (name.isRelative())
           url = source().resolved(url);
 
       ba = helpEngine->fileData(url);
   }
   return ba;
}
 

Это работает и с ссылками но только не со ссылками типа : mailbox@mail.ru
на них отображается пустой документ и в логах:
Цитировать
WARNING:  QTextBrowser: No document for mailto:mailbox@mail.ru
Как это решить кто знает?

И Плохо еще другое, что эти файлы нельзя запихнуть в ресурсы,  В замешательстве тогда такой метод вообще не работает.
Записан
igor_bogomolov
Гость
« Ответ #7 : Май 12, 2009, 13:42 »

Нужно отнаследоваться от QTextBrowser
и переопределить:
QVariant loadResource(int type, const QUrl &name);
examples я конечно же посмотрел. Хотелось бы без наследования QTextBrowser обойтись. Видимо не получится Грустный.

Перетащил helpbrowser в свой проект. Делаю setSource. В результате получаю
Цитировать
QTextBrowser: No document for qthelp://com.sgs/documentation/etalonirovka.html
Странно, в listUrl он существует. Асистент отображает мой хелп нормально.
Записан
-QT-
Гость
« Ответ #8 : Май 13, 2009, 08:40 »

В итоге:
Хелп работает.
1. Переместил все файлы для генерации справки в один каталог.
2. Унаследовался от QTextBrowser
3. Запихнул .qch .qhc файлы в ресурсы и перед запуском справки копирую их в отдельный каталог
    (у меня это - ./tmp) по другому не работает.
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.264 секунд. Запросов: 21.