C++ 및 QT로 개발중인 응용 프로그램에서 사용자가 가져온 이미지와 위젯이있는 GUI의 상태를 저장하려고합니다. 사용자가 종료하고 응용 프로그램이 다시 시작되면 사용자가 배치 한 동일한 위치에 정확히 저장된 이미지와 위젯으로 사용자가 중단 한 부분입니다.QT에서 QLabel에 저장된 가져온 이미지로 GUI 상태 저장
이미지는 QLabels에 저장됩니다. 내가 본 QSettings 예제 코드를 사용하려고했지만 전혀 작동하지 않습니다. 사용자가 위젯과 이미지를 직접 가져올 수있는 전체 GUI 상태를 저장하는 방법에 대한 아이디어. 건배 :) 여기
는 지금까지
#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()
{
}
먼저 당신이해야 할 것은 당신이 설정으로 전체 픽스맵을 저장하지 않으려면 권장하지 않습니다 (어딘가 레이블에 이미지 파일의 경로를 저장입니다). 이'Label :: setPixmap (fileName);'은'Label' 클래스의 정적 메소드처럼 보입니까? 어쨌든 레이블에 이미지를로드하는 방법을 추출하여 설정을로드 할 때 다시 사용할 수 있고 처음 두 번 클릭하여로드 할 때 다시 사용할 수 있습니다. – xander