Folgendes habe ich vor: Ein Bild wird bei Programmstart automatisch geladen und soll dann per Knopfdruck invertiert werden.
Nur kriege ich nicht hin, dass das invertierte Bild dann auch angezeigt wird. Da ich per connect ja keine Parameter übergeben kann habe ich dann die Klasse newpic() geschrieben die erstmal einfach nur das invertierte Bild anzeigen soll.
Rufe ich sie nicht über das connect auf funktioniert alles, nur wenn ich den Slot mit dem Button verbinden will nicht.
Wo liegt da mein Denkfehler?
Code: Alles auswählen
#include <QApplication>
#include <QFont>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QWidget>
#include <QPixmap>
#include <QString>
#include <QLabel>
#include <QImage>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = 0);
};
class MyLabel : public QLabel
{
public slots:
void newpic();
};
void MyLabel::newpic()
{
QImage *Pic3 = new QImage;
Pic3->load("/home/example.jpg");
Pic3->invertPixels();
setPixmap(QPixmap::fromImage(*Pic3));
update();
}
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
QPushButton *quit = new QPushButton(tr("Quit"));
quit->setFont(QFont("Times", 18, QFont::Bold));
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
QImage *Pic = new QImage;
Pic->load("/home/example.jpg");
MyLabel *lbl = new MyLabel;
lbl->setPixmap(QPixmap::fromImage(*Pic));
QPushButton *bttload = new QPushButton(tr("Load Image"));
QPushButton *bttinvert = new QPushButton(tr("Invert Image"));
connect(bttinvert, SIGNAL(clicked()), lbl, SLOT(newpic()));
QVBoxLayout *buttons = new QVBoxLayout;
buttons->addWidget(bttload);
buttons->addWidget(bttinvert);
QHBoxLayout *picture = new QHBoxLayout;
picture->addLayout(buttons);
picture->addWidget(lbl);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(quit);
layout->addLayout(picture);
setLayout(layout);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}