Frage zu Thumbnails
Frage zu Thumbnails
Hey @all,
ich würde gerne realisieren das ich wie bei der Miniaturansicht mehrere kleine thumbnails nebeneinander und untereinandere darstellen kann.
da man ja ein Bild über QLabel (QPixmap) darstellen kann soweit auch kein problem. Mein Problem fängt da, da ich nicht weiß worauf ich die bilder darstellen soll, damit scrollbars zur verfügung stellen.
Meine Idee war ein Widget zu erstellen und darauf ein QGridLayout, indem die Bilder/QLabel's eingebettet sind. Nur wollte ich fragen ob man sowas auf solche art macht, oder ob man das eleganter lösen sollte/kann.
Lg NoRulez
ich würde gerne realisieren das ich wie bei der Miniaturansicht mehrere kleine thumbnails nebeneinander und untereinandere darstellen kann.
da man ja ein Bild über QLabel (QPixmap) darstellen kann soweit auch kein problem. Mein Problem fängt da, da ich nicht weiß worauf ich die bilder darstellen soll, damit scrollbars zur verfügung stellen.
Meine Idee war ein Widget zu erstellen und darauf ein QGridLayout, indem die Bilder/QLabel's eingebettet sind. Nur wollte ich fragen ob man sowas auf solche art macht, oder ob man das eleganter lösen sollte/kann.
Lg NoRulez
-
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Hallo,
ich würde ein FlowLayout nehmen, dort kannst du dann deine QLabel's mit Pixmaps darstellen. Durch das FlowLayout werden automatisch die passende Anzahl der Widgets in der Breite dargestellt. Dazu gibt es in der Qt Bibliothek ein Beispiel und das ganze setzt du in eine QScrollArea, damit du automatisch eine ScrollBar hast.
Vielleicht geht es noch eleganter?
Viel Erfolg damit.
ich würde ein FlowLayout nehmen, dort kannst du dann deine QLabel's mit Pixmaps darstellen. Durch das FlowLayout werden automatisch die passende Anzahl der Widgets in der Breite dargestellt. Dazu gibt es in der Qt Bibliothek ein Beispiel und das ganze setzt du in eine QScrollArea, damit du automatisch eine ScrollBar hast.
Vielleicht geht es noch eleganter?
Viel Erfolg damit.
Also ich habe jetzt folgendes probiert:
und dann in einem andere SLOT:
Mir wird zwar die MessageBox mit dem richtigen Dateinamen angezeigt, aber ich glaube das die QLabels übereinander liegen. ich habe es auch mal mit QPushButton probiert, jedoch sehe ich da keine Scrollbars.
Die Bilder werden weiters in der Größe ca. 100x20 angezeigt das es nicht das komplette bild angezeigt wird. normalerweise wäre ein bild beispielsweise 150x100 groß.
Hoffe um Hilfe
Lg NoRulez
PS: Bei einem QGridLayout sehe ich überhaupt nichts und auch keine Scrollbar. als FlowLayout habe ich http://doc.trolltech.com/4.3/layouts-flowlayout.html genommen
Code: Alles auswählen
QScrollArea *scroll_area = new QScrollArea;
w_images = new QWidget(scroll_area);
flow = new FlowLayout(w_images);
// flow = new QGridLayout(w_images);
QHBoxLayout *vbox = new QHBoxLayout(centralWidget);
dir_tree = new QTreeWidget;
QSplitter *splitter = new QSplitter(Qt::Horizontal);
splitter->addWidget(dir_tree);
splitter->addWidget(scroll_area);
vbox->addWidget(splitter);
centralWidget->setLayout(vbox);
connect(dir_tree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(itemClicked(QTreeWidgetItem*, int)));
Code: Alles auswählen
QDir dir(filename);
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Size | QDir::Reversed);
int row = 0, col = 0;
QFileInfoList list = dir.entryInfoList();
for(int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
if(fileInfo.isDir()) {
}
else {
QLabel *label = new QLabel;
label->setPixmap(QPixmap(fileInfo.absoluteFilePath()));
//flow->addItem(label);
flow->addWidget(label);
QMessageBox::information(this, "Item Clicked", fileInfo.absoluteFilePath());
}
}
Die Bilder werden weiters in der Größe ca. 100x20 angezeigt das es nicht das komplette bild angezeigt wird. normalerweise wäre ein bild beispielsweise 150x100 groß.
Hoffe um Hilfe
Lg NoRulez
PS: Bei einem QGridLayout sehe ich überhaupt nichts und auch keine Scrollbar. als FlowLayout habe ich http://doc.trolltech.com/4.3/layouts-flowlayout.html genommen
-
- Beiträge: 31
- Registriert: 3. Februar 2008 01:33
Du solltest setWidget() bei deiner QScrollArea benutzen, da dieses Widget dann zum scrollen ist, die Area als parent zu benutzen geht, soweit ich weiß, nicht.
Dadurch könnten auch deine abgeschnittenen Bilder bzw. Labels herkommen, weil er versucht, das ganze in den zur Verfügung stehenden Platz zu zwengen, ohne zu scrollen.
Dadurch könnten auch deine abgeschnittenen Bilder bzw. Labels herkommen, weil er versucht, das ganze in den zur Verfügung stehenden Platz zu zwengen, ohne zu scrollen.
ok,
also ich habe jetzt folgendes hinzugefügt:
Also insgesamt wie folgt für den ersten code abschnitt:
Nur sehe ich jetzt gar nichts was mache ich bloss falsch?
Lg NoRulez
also ich habe jetzt folgendes hinzugefügt:
Code: Alles auswählen
scroll_area->setWidget(w_images);
Code: Alles auswählen
QScrollArea *scroll_area = new QScrollArea;
w_images = new QWidget(scroll_area);
scroll_area->setWidget(w_images); /// <------ INSERTED
flow = new FlowLayout(w_images);
// flow = new QGridLayout(w_images);
QHBoxLayout *vbox = new QHBoxLayout(centralWidget);
dir_tree = new QTreeWidget;
QSplitter *splitter = new QSplitter(Qt::Horizontal);
splitter->addWidget(dir_tree);
splitter->addWidget(scroll_area);
vbox->addWidget(splitter);
centralWidget->setLayout(vbox);
connect(dir_tree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(itemClicked(QTreeWidgetItem*, int)));
Lg NoRulez
ok, also nun funktioniert es, habe folgendes gefunden: http://www.qtcentre.org/forum/f-qt-prog ... -3778.html
Nun sieht es wie folgt aus, falls jemand dasselbe Problem hat:
wird ersetzt durch:
Vielen Dank an alle
Lg NoRulez
Nun sieht es wie folgt aus, falls jemand dasselbe Problem hat:
Code: Alles auswählen
QScrollArea *scroll_area = new QScrollArea;
w_images = new QWidget(scroll_area);
scroll_area->setWidget(w_images); /// <------ INSERTED
flow = new FlowLayout(w_images);
// flow = new QGridLayout(w_images);
QHBoxLayout *vbox = new QHBoxLayout(centralWidget);
dir_tree = new QTreeWidget;
QSplitter *splitter = new QSplitter(Qt::Horizontal);
splitter->addWidget(dir_tree);
splitter->addWidget(scroll_area);
vbox->addWidget(splitter);
centralWidget->setLayout(vbox);
connect(dir_tree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(itemClicked(QTreeWidgetItem*, int)));
Code: Alles auswählen
this->flow = new FlowLayout;
this->flow->setSizeConstraint(QLayout::SetMinimumSize);
scroll_area = new QScrollArea;
scroll_area->setLayout(this->flow);
QHBoxLayout *vbox = new QHBoxLayout(centralWidget);
dir_tree = new QTreeWidget;
QSplitter *splitter = new QSplitter(Qt::Horizontal);
splitter->addWidget(dir_tree);
splitter->addWidget(scroll_area);
vbox->addWidget(splitter);
centralWidget->setLayout(vbox);
connect(dir_tree, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(itemClicked(QTreeWidgetItem*, int)));
Lg NoRulez