Seite 1 von 1

[gelöst] QImage in QGridLayout

Verfasst: 6. August 2009 12:35
von mark93
moin,

vorneweg es ist mein erster Beitrag und ich hoffe ich hab die richtige Kategorie gewählt.

Ich möchte ein QWidgetLayout nach dem folgendem Muster:

Code: Alles auswählen

    |       A        |       B        |       C        |
---|-------------------------------------------|
    |                 |                 |                 |
  1|     Bild       |      Bild      |  Bild         |
    |                 |                 |                 |
---|-------------------------------------------|   
    |                 |                 |                 |
  2|     Bild       |      Bild      |  Bild         |
    |                 |                 |                 |
---|-------------------------------------------|  
    |                 |                 |                 |
  3|     Bild       |      Bild      |  Bild         |
    |                 |                 |                 |
---|-------------------------------------------|  
Wobei A,B,C,1,2,3 Labels wie diese sind:

Code: Alles auswählen

<QtGui>
QLabel *label_a = new QLabel("<h2>A</h2>",this);
Die Bilder sind ebenfalls Labels:

Code: Alles auswählen

<QPixmap>

QPixmap pic;
bool b = false;

b = pic.load(":/new/prefi1/Leer.PNG");

QLabel *bild_label= new QLabel(this);
bildlabel->setPixmap(pic);
Dann habe ich mir gedacht, um zu verhindern das die Label A usw. genauso groß sind wie die Pixmaps , weise ich ihnen doch einen feste größe zu:

Code: Alles auswählen

 label_a->setFixedSize(/*Bildbreite HIER*/,sizeHint().heigh());
Bei den Zahlen natürlich andersrum:

Code: Alles auswählen

label_1->setFixedSize(sizeHint().width(),/*Bildhöhe HIER*/);
Dann habe ich das Layout erstellt , die labels durch addWidget() hinzugefügt, wie oben zu erkennen ist. Hierbei blieb aber das erste Feld leer also row 0 column 0;

Zuletzt habe ich natürlich das Layout gesetzt setLayou(gridLayout);

So es ließ sich alles kompilieren doch, das Layout war nicht zuerkennen.

Zuerst dachte ich es liegt das der Pfad zum Bild vllt falsch ist dann müsste er ja aber die textlabels anzeigen.

Ach noch zur Info ich wollte keine .ui files, da ich den Inhalt der Labels später noch ändern möchte. Ich weis zwar das setPixmap() ein public slot ist, aber ich habe dort fehlermeldungen bekommen, das die Labels private sind. Ich habe es nicht verstanden und da ich zu der Zeit einen Internetausfall hatte konnte ich nicht schon früher fragen, nun denn ohne .ui files müsste es ja genauso gut gehen.

Wäre toll wenn ihr mich auf meinen Fehler aufmerksam machen könntet.

gruß

mark

Verfasst: 6. August 2009 13:19
von franzf
Wenn ich dich recht verstehe, solltest du das über die sizePolicy machen.
Am besten dem label links oben eine vertikale und horizontale Maximum-SizePolicy verpassen:

Code: Alles auswählen

topLeftLabel->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Maximum );
Und alles andere mit setFixedSize usw. streichen...

Verfasst: 6. August 2009 13:50
von Troll.Soft
hier ist mal der Code aus Tutorial t6 leicht vereinfacht, so das man etwas sehen kann.

Code: Alles auswählen

#include <QApplication>
#include <QGridLayout>
#include <QWidget>
#include <QLabel>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = 0);
};

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QGridLayout *grid = new QGridLayout;

    for (int row = 0; row < 3; ++row) {
        for (int column = 0; column < 3; ++column) {
            QPixmap Pixmap("L:/frau.png");
            QLabel* Label = new QLabel(this);
            Label->setPixmap(Pixmap);
            grid->addWidget(Label, row, column);
        }

    }

    setLayout(grid);
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWidget widget;
    widget.show();
    return app.exec();
}

Verfasst: 7. August 2009 12:29
von mark93
Erstmal vielen Dank euch beiden das ihr euch mit meinem Problem beschäftigt habt.

franzf du hast mein Problem mit den textLabels gelöst.
Das Problem mit den Bildern hatte ich weiterhin, aber ich habe meinen Fehler jetzt gefunden, dass konntet ihr nicht wissen: Die Dateiendung bei diesem Bild hieß nicht '.PNG' wie bei anderen Bildern die ich hinzugefügen wollte sondern '.png' .

Jetzt klappt auf jeden Fall alles, nochmal ein Dankeschön :D

gruß

mark