Mit meiner Anwendung, die ich mit C++ und QT entwickeln, versuche ich den Zustand der GUI mit Bildern und Widgets vom Benutzer importiert, so dass, wenn die Benutzer beendet und die Anwendung startet erneut, es ist genau dort, wo der Benutzer aufgehört hat mit den Bildern und Widgets, die genau an der Stelle gespeichert sind, an der der Benutzer sie platziert hat.Speichern der GUI mit importierten Bildern in QLabel gespeichert in QT
Die Bilder werden in den QLabels gespeichert. Ich habe versucht, den QSettings-Beispielcode zu verwenden, den ich gesehen habe, aber er funktioniert überhaupt nicht. Ideen zum Speichern des gesamten GUI-Status, wobei der Benutzer Widgets und Bilder direkt importieren kann. Cheers :)
hier ist meine Quellcode von dem, was ich
bisher entwickelt haben#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// Load state of GUI
read_settings();
ui->setupUi(this);
// Set up the window size
this->setWindowTitle(QString::fromUtf8("Raspberry PI GUI v1.0"));
this->resize(800, 400);
//-------------------------------------------
// Setting up buttons on the main screen
//-------------------------------------------
// Add label
button = new QPushButton("Add Graphic", this);
button->setGeometry(QRect(QPoint(10, 20), QSize(200, 50)));
button->show();
// Add LED
button = new QPushButton("Add LCD", this);
button->setGeometry(QRect(QPoint(10, 80), QSize(200, 50)));
button->show();
QObject::connect(button, &QPushButton::clicked, this, &MainWindow::input_led);
// Add Next Window
button = new QPushButton("New Window", this);
button->setGeometry(QRect(QPoint(10, 140), QSize(200, 50)));
button->show();
//QObject::connect(button, SIGNAL(pressed()), this, SLOT(input_newwindow()));
QObject::connect(button, &QPushButton::clicked, this, &MainWindow::input_newwindow);
// Add plot
button = new QPushButton("Add Plot", this);
button->setGeometry(QRect(QPoint(10, 200), QSize(200, 50)));
button->show();
QObject::connect(button, &QPushButton::clicked, this, &MainWindow::input_plot);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::close_event(QCloseEvent *event)
{
write_settings();
event->accept();
}
void MainWindow::write_settings()
{
QSettings settings("reaffer Soft", "reafferApp");
settings.beginGroup("MainWindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();
}
void MainWindow::read_settings()
{
QSettings settings("reaffer Soft", "reafferApp");
settings.beginGroup("MainWindow");
resize(settings.value("size", QSize(800, 400)).toSize());
move(settings.value("pos", QPoint(200, 200)).toPoint());
settings.endGroup();
}
void MainWindow::input_label()
{
Label *label = new Label(this);
label->setText("New Graphic");
label->show();
}
void MainWindow::input_led()
{
LED *led = new LED(this);
led->show();
}
void MainWindow::input_newwindow()
{
this->hide();
QMainWindow *newwindow = new QMainWindow();
newwindow->resize(800, 400);
newwindow->show();
// Need to set up and get working correctly
// Back button
QPushButton *back_button = new QPushButton(newwindow);
back_button->setText("Back");
back_button->setGeometry(QRect(QPoint(10, 80), QSize(200, 50)));
back_button->show();
QObject::connect(back_button, &QPushButton::pressed, newwindow, &QMainWindow::hide);
// Need to go back to previous screen
this->show();
// Forward button
QPushButton *forward_button = new QPushButton(newwindow);
forward_button->setText("Next");
forward_button->setGeometry(QRect(QPoint(50, 140), QSize(200, 50)));
forward_button->show();
// Create a new screen
QObject::connect(forward_button, &QPushButton::pressed, this, &QMainWindow::show);
this->hide();
}
void MainWindow::input_plot()
{
QMainWindow *windowplot = new QMainWindow();
windowplot->resize(800, 400);
windowplot->show();
}
void MainWindow::ButtonClicked()
{
}
Erste, was Sie tun sollten, den Pfad zu Ihrem Image-Datei in Ihrem Label irgendwo sparen, wenn Sie zu empfehlen nicht die ganze pixmap auf die Einstellungen speichern möchten (nicht). Was ist das 'Label :: setPixmap (fileName);', sieht aus wie eine statische Methode in Ihrer 'Label' Klasse? extrahieren Sie trotzdem die Methode, um das Bild in Ihr Label zu laden, damit Sie es wiederverwenden können, wenn Sie die Einstellungen laden und wenn Sie es doppelklicken, um es zum ersten Mal zu laden. – xander