Qt4之保存窗体状态


实际的运用过程中,常需要应用程序能保存程序的状态以及用户的设置,如应用程序显示的大小,位置,背景颜色或用户设置的参数等信息,以便在下次运行程序时,能保持上次关闭的状态。

在Qt的使用过程中,我们使用Qsetting来保存程序的状态。使得当用户再次打开时,窗体仍然可以呈现半闭时的状态。

下面我举一个简单的例子加以说明:

贴上代码:

setting.h:

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

相关内容