QT Widget als Bild speichern

Monchichu

Mitglied
Hey ich bin Anfänger auf dem Gebiet C++ und vorallem QT.
Ich habe jetzt schon ein kleines Malprogramm geschrieben und wollte mal gerne erfahren ob es eine möglichkeit gibt das ich das was ich auf einem Widget mit hilfe des QPainter gemalt habe als jpg oder ähnliches abspeichern kann.
Wenn ja wie?

MfG Monchichu
 
Hi,
mit QT kenn ich mich leider nicht aus. Ich mache alles, auch GUI's per Hand;)
Aber sollte eigentlich ähnlich sein. Nun es gibt bestimmt auch ein Main Frame oder eine Main View in deinem Programm. Dort sollte es möglich sein, über ein Device Context das zu malende Bild abzufragen und auch zu specihern. (Google: c++ Device Context)
 
Nun, dan kann ich dir nur empfehlen, das Handbuch zu QT zu lesen. Oder einfach mal ein wenig das Netz zu durchforsten. ICh kann wetten, du bist nicht der erste, der das Problem hat. (Da du aber QT nutz schon einer der wenigen:))

Viel Erfolg;)
 
Ich habe im Handbuch schon geguggt abba da steht nix brauchbares und sonst hatte bis jetzt auch keiner das Problem. Weil keiner so bekloppt ist.
 
Glaub mir, nicht nur du bist bekloppt:D Eine Idee hätt ich noch, ist aber nicht die eleganteste. Du kannst ein Screenshot der Bildshirmes erzeugen, und das was über die Position des Fensters hinausgeht abschneiden. Das mit dem Screen wüsst ich noch wie das geht, aber Abschneiden nicht mehr, so "bekloppt" war ich nun bisher doch nicht:D
 
Ich weiß nicht ob es daran liegt das ich Kopfschmerzen habe und nicht mehr klar denken kann abba kann mir vlt jemand helfen und ein bisschen erklären wie ich das render anzuwenden habe?
 
Hallo,

z.b. so:

C++:
#include <QWidget>
#include <QApplication>
#include <QMainWindow>
#include <QPaintDevice>
#include <QPainter>
#include <QPushButton>
#include <QGridLayout>
#include <QFileDialog>
#include <QMessageBox>
#include <QImageWriter>
#include <QImage>


class SimplePaintWidget : public QWidget {
    QWidget *container;

    Q_OBJECT

    public:
        SimplePaintWidget(QWidget *parent = 0) : QWidget(parent) {
            QPushButton *pb = new QPushButton("Save as Image");
            QGridLayout *gl = new QGridLayout();
            gl->addWidget(pb, 0, 0);
            gl->addWidget(this, 1, 0);
            container = new QWidget();
            container->setLayout(gl);

            QObject::connect(pb, SIGNAL(clicked()), this, SLOT(saveButtonPressedEvent()));
        }

        virtual void paintEvent(QPaintEvent*) {
            QPainter painter(this);
            painter.setPen(Qt::blue);
            painter.setFont(QFont("Arial", 30));
            painter.drawText(rect(), Qt::AlignCenter, "Qt");

        }

        QWidget *getSurroundingContainer() {
            return container;
        }

        public slots:
            void saveButtonPressedEvent() {
                QFileDialog fd;
                if (fd.exec()) {
                    QImage img(size(), QImage::Format_RGB32);
                    render(&img);

                    QImageWriter iw(fd.selectedFiles().first());
                    iw.write(img);

                    QMessageBox mb;
                    mb.setText("Image saved to " + fd.selectedFiles().first());

                    mb.exec();
                }
            }
};

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QMainWindow mw;
    mw.setCentralWidget((new SimplePaintWidget())->getSurroundingContainer());
    mw.show();

    return app.exec();
}

#include "paint_example.moc"

Du musst einfach render mit einem QImage aufrufen und dann einen QImageWriter benutzen um das QImage auf die Festplatte zu speichern.

Gruß,
RedWing
 
Zurück