Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Extreme confusing problem



  • Hello, guys, I am trying to create an icon in tray.
    The problem I met is rather strange.
    I added my icon.png to a .qrc file and loaded the image from that. The Image itself never shows up.
    Even if I copied the path or url given by qt creator itself, it just didn't work.
    However, when I moved my icon.png to a location on my disk say "c://" it worked.

    .pro file:
    RESOURCES += \
    Ima.qrc

    .qrc file:
    <RCC>
    <qresource prefix="/new">
    <file>icon.png</file>
    </qresource>
    </RCC>

    testing code:
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    QGraphicsPixmapItem item(QPixmap(":/new/icon.png"));
    /* qrc:/new/icon.png won't work either */
    scene.addItem(&item);
    view.show();

    real code:
    QIcon icon("C:\icon.png");
    trayIcon->setIcon(icon);
    setWindowIcon(icon);
    trayIcon->show();
    /* it works */

    "C:\icon.png" directory works fine for both testing code and real code.

    Thank you guys! I have already solved it.
    It turns out that Q_INIT_RESOURCE(***); is truly needed.
    And Unlinked problem when I added this line can be solved in following operation:

    1. Make your "***" in the parentheses is the name of your .qrc file and correctly typed
      2.Clean your project
      3.Qmake your project
      4.Run again and problem solved.


  • Hi and welcome to devnet,

    is your png file in the same directory of the .qrc??



  • @mcosta
    Yes.And I tried creating a folder in the same directory of .qrc file and move png to that folder. It didn't work



  • Have you tried to use the resource icon in your real code??

    To show an Item in a GraphicsView you have to set correctly GraphicsScene rect and the view

    This code

    ui->label->setPixmap(QPixmap(":/images/image.png"));
    

    works well for me using the resource

    <RCC>
        <qresource prefix="/images">
            <file>image.png</file>
        </qresource>
    </RCC>
    


  • Maybe the Q_INIT_RESOURCE(<qrc file name>) is missing from main?

    int main(int argc, char *argv[])
    {
        Q_INIT_RESOURCE(application);
        QApplication app(argc, argv);
       
        MainWindow mainWin;
        mainWin.show();
        return app.exec();
    }


  • @Rondog Q_INIT_RESOURCE is not required if you add the resource file in the .pro file



  • @Rondog Thank you Randog, But it is not the problem.
    I think that this line might be unnecessary. But you brought this up, I have another question for this line.
    I have tried this even before I asked here. And when I add this line to my main.cpp, It told me " LNK2019 unresolved symbol".
    There is an example in Qt document using this line, and I had the exact same libraries included.

    Note:

    1. resource file has been included in .pro file.
    2. Q_INIT_RESOURCE(Ima); /* name of my qrc file is Ima.qrc now*/


  • @mcosta Yes, I have. It doesn't work.



  • @PandaBoy could you attach your project? (the whole project directory)



  • The unresolved linker error will occour if the name inside the macro Q_INIT_RESOURCE cannot be found.

    I was not aware that this wasn't required, I tried it and sure enough it worked without it. It is interesting that when you did add it you ended up with a link error which means it can't be loaded (I have always added this line inside of main and get this error when I don't set the name properly).

    From a sample program I have the following (that does work):

    // qrc file =====================
    <!DOCTYPE RCC><RCC version="1.0">
    	<qresource prefix="/gui">
    		<file>autocapture.png</file>
    	</qresource>
    </RCC>
    
    // pro file =====================
    // note:  I put all the resources in a folder called 'res'
    RESOURCES += res/autocapture.qrc
    
    // usage example =====================
    	d_start_button->setIcon(QIcon(":/gui/autocapture.png"));
    

    A couple of observations that might be helpful.

    The resources line in the .PRO file ...

    RESOURCES += \
    Ima.qrc
    

    ... might be a problem. Why not this instead:

    RESOURCES += Ima.qrc
    

    The .qrc file is missing the first XML identification line (i.e. '<!DOCTYPE RCC>' ). Maybe the file is not recognized as a resource file without this line?



  • Hi,

    <!DOCTYPE RCC> is not needed.

    You have to add Q_INIT_RESOURCE when you want to load resources not embedded in your application.

    I'm not sure to understand; the simple icon example works or not??
    Your app with QGraphicsScene??


Log in to reply