歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Qt4之保存窗體狀態

Qt4之保存窗體狀態

日期:2017/3/1 11:09:16   编辑:Linux編程
實際的運用過程中,常需要應用程序能保存程序的狀態以及用戶的設置,如應用程序顯示的大小,位置,背景顏色或用戶設置的參數等信息,以便在下次運行程序時,能保持上次關閉的狀態。

在Qt的使用過程中,我們使用Qsetting來保存程序的狀態。使得當用戶再次打開時,窗體仍然可以呈現半閉時的狀態。

下面我舉一個簡單的例子加以說明:

貼上代碼:

setting.h:

  1. #ifndef SETTINGS_H
  2. #define SETTINGS_H
  3. #include <QDialog>
  4. class QPushButton;
  5. class QLabel;
  6. class QTextEdit;
  7. class Settings : public QDialog
  8. {
  9. Q_OBJECT
  10. public:
  11. Settings();
  12. QLabel *label;
  13. QPushButton *colorBtn;
  14. QTextEdit *edit;
  15. void readSettings();
  16. void writeSettings();
  17. protected:
  18. void closeEvent(QCloseEvent *);
  19. public slots:
  20. void slotColor();
  21. };
  22. #endif // SETTINGS_H
setting.cpp:
  1. #include "settings.h"
  2. #include <QtGui>
  3. Settings::Settings()
  4. {
  5. setWindowTitle("Settings");
  6. label = new QLabel;
  7. label->setText("Setting Test");
  8. colorBtn = new QPushButton;
  9. colorBtn->setText("Select Color");
  10. edit = new QTextEdit;
  11. QGridLayout *layout = new QGridLayout(this);
  12. layout->addWidget(label,0,0);
  13. layout->addWidget(colorBtn,0,1);
  14. layout->addWidget(edit,1,0,1,2);
  15. readSettings();
  16. connect(colorBtn, SIGNAL(clicked()), this, SLOT(slotColor()));
  17. }
  18. void
  19. Settings::slotColor()
  20. {
  21. QColor color = QColorDialog::getColor (Qt::blue);
  22. if(color.isValid())
  23. {
  24. QPalette p = label->palette();
  25. p.setColor(QPalette::Normal,QPalette::WindowText,color);
  26. label->setPalette(p);
  27. }
  28. }
  29. void
  30. Settings::readSettings()
  31. {
  32. QSettings setting("MyPro","settings");
  33. setting.beginGroup("Dialog");
  34. QPoint pos = setting.value("position").toPoint();
  35. QSize size = setting.value("size").toSize();
  36. setting.endGroup();
  37. setting.beginGroup("Content");
  38. QColor color = setting.value("color").value<QColor>();
  39. QString text = setting.value("text").toString();
  40. setting.endGroup();
  41. move(pos);
  42. resize(size);
  43. QPalette p = label->palette();
  44. p.setColor(QPalette::Normal,QPalette::WindowText,color);
  45. label->setPalette(p);
  46. edit->setPlainText(text);
  47. }
  48. void
  49. Settings::writeSettings()
  50. {
  51. QSettings setting("MyPro","settings");
  52. setting.beginGroup("Dialog");
  53. setting.setValue("position",pos());
  54. setting.setValue("size",size());
  55. setting.endGroup();
  56. setting.beginGroup("Content");
  57. setting.setValue("color",label->palette().color(QPalette::WindowText));
  58. setting.setValue("text",edit->toPlainText());
  59. setting.endGroup();
  60. }
  61. void
  62. Settings::closeEvent(QCloseEvent *e)
  63. {
  64. writeSettings();
  65. }
Copyright © Linux教程網 All Rights Reserved