QIcon wird nicht dargestellt [Gelöst]

Verschiedenes zu Qt
Antworten
Igell
Beiträge: 27
Registriert: 11. November 2009 20:36

QIcon wird nicht dargestellt [Gelöst]

Beitrag 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()
{
}
Dateianhänge
Bildschirmfoto.png
Bildschirmfoto.png (11.43 KiB) 5264 mal betrachtet
Zuletzt geändert von Igell am 3. Januar 2010 13:18, insgesamt 1-mal geändert.
Wissen ist die einzige Ressource, die sich vermehrt wenn man sie teilt
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

Beitrag von Burgpflanze »

Code: Alles auswählen

but1->setIcon(QIcon(QPixmap(":/bilder/0001.png"))); 
Gruß, Peter
Igell
Beiträge: 27
Registriert: 11. November 2009 20:36

Beitrag von Igell »

Geht trotzdem nicht
Wissen ist die einzige Ressource, die sich vermehrt wenn man sie teilt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Igell
Beiträge: 27
Registriert: 11. November 2009 20:36

Beitrag 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.
Wissen ist die einzige Ressource, die sich vermehrt wenn man sie teilt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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*...
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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)
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten