Seite 1 von 1

QIcon wird nicht dargestellt [Gelöst]

Verfasst: 25. Dezember 2009 22:50
von Igell
Hallo,
ich versuche Grade über eine qrc fiel ein Icon einzubinden und das als Button auszugeben.
Die qrc Datei habe ich mithilfe von Qt-creator erzeugt.
Es will nur nicht funktionieren

Code: Alles auswählen

# -------------------------------------------------
# Project created by QtCreator 2009-12-25T21:48:57
# -------------------------------------------------
TARGET = test
TEMPLATE = app
SOURCES += main.cpp \
    test.cpp
HEADERS += test.h
RESOURCES += Icon.qrc

Code: Alles auswählen

#ifndef TEST_H
#define TEST_H

#include <QtGui/QWidget>
#include <QBoxLayout>
#include <QPushButton>

class Test : public QWidget
{
    Q_OBJECT
public:
    Test(QWidget *parent = 0);
    ~Test();
    QPushButton *but1,*but2,*but3;
    QVBoxLayout *vlay;
};
#endif // TEST_H

Code: Alles auswählen

#include "test.h"
#include "qrc_Icon.cpp"
#include <QIcon>


Test::Test(QWidget *parent) : QWidget(parent)
{
    but1 = new QPushButton("Button1");
    but2 = new QPushButton("Button2");
    but3 = new QPushButton("Button3");
    vlay = new QVBoxLayout;

    but1->setIcon(QIcon(":/bilder/0001.png"));

    vlay->addWidget(but1);
    vlay->addWidget(but2);
    vlay->addWidget(but3);

    this->setLayout(vlay);
}

Test::~Test()
{
}

Verfasst: 25. Dezember 2009 22:53
von Burgpflanze

Code: Alles auswählen

but1->setIcon(QIcon(QPixmap(":/bilder/0001.png"))); 

Verfasst: 25. Dezember 2009 23:03
von Igell
Geht trotzdem nicht

Verfasst: 25. Dezember 2009 23:21
von franzf
Poste mal die Icon.qrc. Außerdem die main().
Ich denke entweder stimmt der Pfad in deiner Resource-Datei nicht, oder du hast die Resource nicht initialisiert.

Im übrigen:
1) QIcon::QIcon ( const QString & fileName )
man braucht also kein temporäres QPixmap. Kostet nur zusätzliche Rechenzeit.
2) button->setIcon(":/images/button.png");
reicht. setIcon erwartet ein QIcon. Der Compiler ist jetzt so schlau und sucht sich hier einen QIcon-Konstruktor, der einen QString als Argument erwartet.
Das geht nicht mehr, wenn der entsprechende Konstruktor als "explicit" deklariert ist.
So lange das nicht der Fall ist würde ich die Intelligenz des Compilers dankend annehmen. Der Code wird kürzer und dadurch übersichtlicher ;)

// edit:
erst jetzt gesehen (war vorher nicht angemeldet...)
Es ist der falsche Pfad!!!
button->setIcon(":/new/prefix1/bilder/0001.png");
funktioniert.

Verfasst: 26. Dezember 2009 11:18
von Igell
Danke hat endlich funktioniert :D
Hab auch das :
button->setIcon(":/images/button.png");
versucht, schlug leider fehl, mit der Begründung :

Code: Alles auswählen

error: no matching function for call to ‘QPushButton::setIcon(const char [30])’
Geb ich den Konstruktor aber an geht es.

Verfasst: 27. Dezember 2009 12:26
von franzf
Ich hab mal kurz in die Sourcen geschaut, und da steht das:

Code: Alles auswählen

explicit QIcon(const QString &fileName); // file or resource name
Das heißt es ist nicht erlaubt, durch die Übergabe eines QString an setIcon implizit ein QIcon-Objekt zu erstellen.
Das ist hier aber eh nicht das Problem, sondern eher dass ":/images/button.png" noch kein QString ist, sondern erstmal nur ein const char*...

Verfasst: 3. Januar 2010 09:34
von 24dan
Hi bitte tue uns und Dir einen Gefallen marker Deine Posts doch bitt mit [gelöst] wenn Du eine Lösung hast.
[workaround] ist auch drinn..
8)