Russian Qt Forum

Qt => Общие вопросы => Тема начата: -QT- от Май 08, 2009, 10:16



Название: QHelpEngineCore - немогу запустить.
Отправлено: -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.
Помогите разрулить эту ситуёвину.


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: Rcus от Май 08, 2009, 10:42
А как насчет QHelpEngineCore::error()?

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


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: -QT- от Май 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"


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: -QT- от Май 12, 2009, 08:57
По итогу я понял что это баг.
http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=247313 (http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=247313)
Но не догнал как все таки работает пример - ведь он работает сволочь.


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: igor_bogomolov от Май 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();
    }


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: igor_bogomolov от Май 12, 2009, 12:32
Что то рано я обрадовался.
Таким образом загружается только запрашиваемая страничка. Ссылки не работают, картинки не отображаются.

Использование setSource
Цитировать
QFSFileEngine::open: No file name specified
QTextBrowser: No document for qthelp://com.sgs/documentation/editWindow.html


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: -QT- от Май 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
Как это решить кто знает?

И Плохо еще другое, что эти файлы нельзя запихнуть в ресурсы,  :-\ тогда такой метод вообще не работает.


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: igor_bogomolov от Май 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 он существует. Асистент отображает мой хелп нормально.


Название: Re: QHelpEngineCore - немогу запустить.
Отправлено: -QT- от Май 13, 2009, 08:40
В итоге:
Хелп работает.
1. Переместил все файлы для генерации справки в один каталог.
2. Унаследовался от QTextBrowser
3. Запихнул .qch .qhc файлы в ресурсы и перед запуском справки копирую их в отдельный каталог
    (у меня это - ./tmp) по другому не работает.