Pdf viewer using QDesktopServices



  • Hi all,

    I am trying to display a *pdf * file using Qt.

    I used QDesktopServices for this purpose.
    @
    QString str = "/home/chaitra/Desktop/xyz.pdf";
    QDesktopServices::openUrl(QUrl(str, QUrl::TolerantMode));
    @

    Though I have Evince pdf viewer, the pdf file is being displayed on the web browser.
    While it runs I can see the following:
    Opening "/home/chaitra/Desktop/xyz.pdf" with Document Viewer (application/pdf)
    No protocol specified
    No protocol specified
    Cannot parse arguments: Cannot open display:

    Can I know why it is not displaying using the default pdf viewer. Is there any additional things that I need to do to display the pdf using the pdf viewer?

    Please help me to resolve this.

    Thanks you in advance

    [edit: added missing coding tags SGaist]


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    You are using the wrong way to build a QUrl since it's a local file

    Try with:

    @
    QDesktopServices::openUrl(QUrl::fromLocalFile(str));
    @

    Hope it helps



  • Hi,

    I tried with:
    @QDesktopServices::openUrl(QUrl::fromLocalFile(str));@

    But I ended up with the same result. PDF is opening in web browser not using Evince.
    The error is as below:
    "Error: no "view" mailcap rules found for type "application/pdf"
    Opening "/home/chaitra/Desktop/xyz.pdf" with Document Viewer (application/pdf)
    No protocol specified
    No protocol specified
    Cannot parse arguments: Cannot open display:"

    Can I know what I need to do?


  • Lifetime Qt Champion

    Are you sure Evince is the default PDF viewer on your system ?



  • Ya I am sure I am using that for any pdf view.

    But I am unable to display pdf using QtUrl.


  • Lifetime Qt Champion

    Just to be sure, Evince opens when you double click on a file ?



  • [quote author="ChaitraMohan" date="1406523641"]
    ...
    Cannot parse arguments: Cannot open display:"
    ...
    [/quote]

    You don't run application over the network, don't you?
    In addition to SGaist question, try to open this pdf in a terminal.
    @
    xdg-open /home/chaitra/Desktop/xyz.pdf
    @



  • Hi,
    Thank you both.

    @SGaist
    Ya when I double click on the pdf it opens via "Evince" only.

    @andreyc
    No I am running my application over network. It a simple application which I have written to open the pdf file. But Its opening via web browser.

    I tried with the below commands in terminal. The pdf open via Evince.
    @xdg-open /home/chaitra/Desktop/xyz.pdf@



  • Hi,

    May it was a problem with Evince or what I don't know the pdf was opening via web browser instead of Evince.

    Now I installed the Adobe pdf viewer. With the code following code pdf is opening via Adobe.

    @QString str = "/home/chaitra/Desktop/xyz.pdf";
    QDesktopServices::openUrl(QUrl::fromLocalFile(str));@

    Thank you for the support.



  • Hi,

    I have one question.
    Does QDesktopServices doesnot work in embedded environment?
    Because when I try to run the application to open in an embedded environment the following error I am getting:
    QDesktopServices::launchwebBrowser not implemented

    Can I know the reason for this?

    Thank you in advance.


  • Lifetime Qt Champion

    Hi,

    What embedded environment ?



  • Hi,

    For embedded linux.

    I have cross compiled the Qt4.8.6 giving the following configuration options:
    @./configure -prefix /usr/local/Qt_4.8.6 -embedded arm -platform qws/linux-x86-g++ -xplatform qws/linux-arm-linaro-g++ -static -no-mmx -no-rpath -no-3dnow -no-sse -no-sse2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle -little-endian -qt-gfx-linuxfb -fontconfig -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-webkit -no-qt3support -nomake examples -nomake demos -nomake docs -nomake translations -qt-freetype -qt-libjpeg -qt-libpng -gfx-transformed@

    The Qt applications are running on the embedded linux. But when I tried to open a pdf using the QDesktopservices:
    @QString str = "/home/chaitra/Desktop/xyz.pdf";
    QDesktopServices::openUrl(QUrl::fromLocalFile(str));@

    I am getting the following error when I run the Qt application:
    QDesktopServices::launchwebBrowser not implemented


  • Lifetime Qt Champion

    It's not an error. You don't have any desktop environment that handles file/program association so how should Qt know what to launch ? Also since you are using QWS, if you had any program able to read your pdf it should also be built to use QWS.



  • Hi,

    bq. You don’t have any desktop environment that handles file/program association so how should Qt know what to launch ?

    I dint understand your sentence. Can you tell me little details about that?

    bq. Also since you are using QWS, if you had any program able to read your pdf it should also be built to use QWS.

    While building Qt source what should I include so that I can get the pdf view?


  • Lifetime Qt Champion

    Desktop Environment: KDE, Gnome, LXDE etc…
    The file type/program association is not something that is automagical, your desktop environment has settings where this information is stored so when you double click on a document/media/whatever it opens one application. QDesktopEnvironment uses these services when available.

    For viewing PDFs, you need to use an external library like poppler



  • Yes I have Gnome Desktop environment.
    When I double click on the document, it opens with application also. Still when I run the application that statement pops up.


  • Lifetime Qt Champion

    Not on your target, otherwise you wouldn't be using QWS



  • On my target itself I have gnome running.
    When I double click on the pdf it opens using evince application.


  • Lifetime Qt Champion

    Then if your target is running Gnome, why do you use Qt for Embedded Linux ?



  • I want to run a Qt application, that opens pdf while I am running the application.


  • Lifetime Qt Champion

    That point is clear. My question is why don't you use a standard Qt, since you already have Gnome running on your target ?



  • I don't want Qt to be installed on the target, so I have used Qt for embedded linux.


  • Lifetime Qt Champion

    Qt for Embedded Linux doesn't mean it won't get installed. It means that you can use Qt without a display server like Xorg



  • Yes I understood that.
    But I need to open a pdf how do I do that?


  • Lifetime Qt Champion

    Have a look at poppler


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.