Qlabel mit Bild in einem QWidget
Qlabel mit Bild in einem QWidget
Hallo,
ich habe ein QWidget mit fixer größe und möchte nun ein Bild in diesem Widget anzeigen.
setFixedSize(200,200);
QVBoxLayout *layout=new QVBoxLayout(this);
setLayout(layout);
imageLabel=new QLabel(this);
imageLabel->setBackgroundRole(QPalette::Base);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
imageLabel->setScaledContents(true);
layout->addWidget(imageLabel);
QImage image(pfad);
imageLabel->setPixmap(QPixmap::fromImage(image));
Das Anzeigen funktioniert, nur möchte ich, dass das Widget immer die fixe größe beibehält und das Bild aber ein gesperrtes Seitenverhältnis hat.
Da sollte natürlich bei so manchen Bildern ein teil des Fensters grau bleiben.
Wie kann ich das nun einstellen, dass sich das Bild der größe des Widgets unterordnet aber nicht das Seitenverhältnis geändert wird?
mfg
acdc
ich habe ein QWidget mit fixer größe und möchte nun ein Bild in diesem Widget anzeigen.
setFixedSize(200,200);
QVBoxLayout *layout=new QVBoxLayout(this);
setLayout(layout);
imageLabel=new QLabel(this);
imageLabel->setBackgroundRole(QPalette::Base);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
imageLabel->setScaledContents(true);
layout->addWidget(imageLabel);
QImage image(pfad);
imageLabel->setPixmap(QPixmap::fromImage(image));
Das Anzeigen funktioniert, nur möchte ich, dass das Widget immer die fixe größe beibehält und das Bild aber ein gesperrtes Seitenverhältnis hat.
Da sollte natürlich bei so manchen Bildern ein teil des Fensters grau bleiben.
Wie kann ich das nun einstellen, dass sich das Bild der größe des Widgets unterordnet aber nicht das Seitenverhältnis geändert wird?
mfg
acdc
Hast du schon
brobiert?
Code: Alles auswählen
imageLabel->setScaledContents(true);
ja, steht schon oben im code!archer hat geschrieben:Hast du schonbrobiert?Code: Alles auswählen
imageLabel->setScaledContents(true);
habs nun so probiert:
Da ich das Widget auch als freies Fenster und nicht in nur in einem Layout nutzen möchte, ist die setPicture Methode etwas länger. es werden zu große bilder verkleinert und das Widget angepasst usw.
Es funktioniert alles so wie gewünscht, nur eben nicht der oben genannte Punkt.Füge ich jedoch eine QMessagebox vor dem "resize(w,h)" ein so funktionierts.
es liegt hier scheinbar an der Verzögerung durch die Messagebox. Was kann ich hier tun?
mfg
acdc
Code: Alles auswählen
void PictureWidget::setPicture(QString Path)
{
path=Path;
int w,h;
QImage image(path);
QDesktopWidget desktop;
QRect rect=desktop.availableGeometry();
imageLabel->setPixmap(QPixmap::fromImage(image));
if(image.width()>(rect.width()/2))
{
if((image.height()+10)>(rect.height()-100))
{
image=image.scaled(rect.width()-100,rect.height()-100,Qt::KeepAspectRatio,Qt::FastTransformation);
}
image=image.scaled(width(),image.height(),Qt::KeepAspectRatio,Qt::FastTransformation);
w=width();
h=image.height();
}
else
{
image=image.scaled(image.width(),image.height(),Qt::KeepAspectRatio,Qt::FastTransformation);
w=image.width();
h=image.height();
}
resize(w,h);
}
Es funktioniert alles so wie gewünscht, nur eben nicht der oben genannte Punkt.Füge ich jedoch eine QMessagebox vor dem "resize(w,h)" ein so funktionierts.
Code: Alles auswählen
...
}
QMessageBox msgBox;
msgBox.setText("browser");
msgBox.exec();
resize(w,h);
}....
mfg
acdc
-
softwaremaker
- Beiträge: 149
- Registriert: 1. April 2009 19:25
QDesktopWidget
Warum nutzt du auf einmal QDesktopWidget ?
wie wärs mit:
wie wärs mit:
Code: Alles auswählen
ui->meinLabel->setPixmap(
meinBild.scaledToWidth( ui->meinLabel->width(), Qt::SmoothTransformation ) );