今天看了一些QSettings的简单用法,可以用来保存程序的设置,使得程序每次启动都可以显示上次关闭时的状态。我这里实现了一个简单的文本编辑窗口,可以设置文本的字体,字体的颜色和背景色。每次关闭程序都保存程序的几何大小,位置和文本以及文本所设置的格式,方便启动程序后继续编辑。

文本编辑窗口

TextEditor继承了QTextEdit,主要实现文本编辑和文本格式设置。保存文本信息时直接用的html字符串形式保存,可以同时保存文本的格式。
  1. class TextEditor:public QTextEdit
  2. {
  3. Q_OBJECT
  4. public:
  5. TextEditor(QWidget *parent = NULL);
  6. ~TextEditor();
  7. void SaveSettings();
  8. protected:
  9. void ReadSettings();
  10. void contextMenuEvent ( QContextMenuEvent * event );
  11. private slots:
  12. void SettingBackColorSlot();
  13. void SettingTextColorSlot();
  14. void SettingTextFontSlot();
  15. };
  1. TextEditor::TextEditor( QWidget *parent /*= NULL*/ ):QTextEdit(parent)
  2. {
  3. ReadSettings();
  4. }
  5. TextEditor::~TextEditor()
  6. {
  7. }
  8. void TextEditor::contextMenuEvent( QContextMenuEvent * event )
  9. {
  10. QMenu *pMenu = createStandardContextMenu();
  11. pMenu->addSeparator();
  12. QTextCursor cursor = this->textCursor();
  13. QString seletedText = cursor.selectedText();
  14. if (!seletedText.isEmpty())     //选中文本才可以设置文本样式
  15. {
  16. QMenu *pSubMenu = new QMenu(tr("设置"),pMenu);
  17. pMenu->addMenu(pSubMenu);
  18. QAction *pFontAct = new QAction(tr("字体"),pSubMenu);
  19. QAction *pTextColorAct = new QAction(tr("字体颜色"),pSubMenu);
  20. QAction *pBackColorAct = new QAction(tr("背景色"),pSubMenu);
  21. pSubMenu->addAction(pFontAct);
  22. pSubMenu->addAction(pTextColorAct);
  23. pSubMenu->addAction(pBackColorAct);
  24. connect(pFontAct,SIGNAL(triggered ()),this,SLOT(SettingTextFontSlot()));
  25. connect(pTextColorAct,SIGNAL(triggered ()),this,SLOT(SettingTextColorSlot()));
  26. connect(pBackColorAct,SIGNAL(triggered ()),this,SLOT(SettingBackColorSlot()));
  27. }
  28. pMenu->exec(event->globalPos());
  29. delete pMenu;
  30. }
  1. //设置文本背景色
  2. void TextEditor::SettingBackColorSlot()
  3. {
  4. QColor color = QColorDialog::getColor(Qt::white, this, "Select Color", QColorDialog::DontUseNativeDialog);
  5. if(color.isValid())
  6. {
  7. this->setTextBackgroundColor(color);
  8. }
  9. }
  10. //设置文本颜色
  11. void TextEditor::SettingTextColorSlot()
  12. {
  13. QColor color = QColorDialog::getColor(Qt::black, this, "Select Color", QColorDialog::DontUseNativeDialog);
  14. if(color.isValid())
  15. {
  16. this->setTextColor(color);
  17. }
  18. }
  19. //设置文本字体
  20. void TextEditor::SettingTextFontSlot()
  21. {
  22. bool ok;
  23. QFont font = QFontDialog::getFont(&ok, this);
  24. if (ok)
  25. {
  26. QTextCursor cur = this->textCursor();
  27. QString sltStr = cur.selectedText();
  28. this->cut();
  29. QTextCharFormat fmtText;
  30. fmtText.setFont(font);
  31. cur.insertText(sltStr,fmtText);
  32. }
  33. }
  34. //退出前保存文本信息
  35. void TextEditor::SaveSettings()
  36. {
  37. QSettings TextSettings("Mysoft","TextData");
  38. QString html = this->toHtml();
  39. TextSettings.setValue("text",html);
  40. }
  41. //启动时读取信息
  42. void TextEditor::ReadSettings()
  43. {
  44. QSettings TextSettings("Mysoft","TextData");
  45. QString html = TextSettings.value("text").toString();
  46. this->setHtml(html);
  47. }
 
 

程序主窗口

  1. class TextEdit : public QMainWindow
  2. {
  3. Q_OBJECT
  4. public:
  5. TextEdit(QWidget *parent = 0, Qt::WFlags flags = 0);
  6. ~TextEdit();
  7. protected:
  8. void closeEvent ( QCloseEvent * event ) ;
  9. void ReadSettings();
  10. private:
  11. TextEditor   *m_pCentralWidget;
  12. };
  1. TextEdit::TextEdit(QWidget *parent, Qt::WFlags flags)
  2. : QMainWindow(parent, flags)
  3. {
  4. m_pCentralWidget = new TextEditor(this);
  5. this->setCentralWidget(m_pCentralWidget);
  6. ReadSettings();
  7. }
  8. TextEdit::~TextEdit()
  9. {
  10. }
  11. void TextEdit::closeEvent( QCloseEvent * event )
  12. {
  13. QSettings dialogSettings("Mysoft","dialogData");   //保存窗口位置和大小
  14. dialogSettings.setValue("Rect",this->rect());
  15. QPoint pos = this->pos();
  16. dialogSettings.setValue("positionX",this->pos().x());
  17. dialogSettings.setValue("positionY",this->pos().y());
  18. m_pCentralWidget->SaveSettings();
  19. }
  20. void TextEdit::ReadSettings()
  21. {
  22. QSettings dialogSettings("Mysoft","dialogData");  //读取窗口位置和大小
  23. dialogSettings.setValue("Rect",this->rect());
  24. dialogSettings.setValue("position",this->pos());
  25. QRect rect = dialogSettings.value("Rect").value<QRect>();
  26. this->setGeometry(rect);
  27. int posX = dialogSettings.value("positionX").toInt();
  28. int posY = dialogSettings.value("positionY").toInt();
  29. this->move(QPoint(posX,posY));
  30. }

http://blog.csdn.net/hai200501019/article/details/11179967

QSettings保存程序设置的更多相关文章

  1. C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置

    参考页面: http://www.yuanjiaocheng.net/webapi/test-webapi.html http://www.yuanjiaocheng.net/webapi/web-a ...

  2. C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置

    用于永久化对象,什么程序都行,依赖NewtonSoft.用于json序列化和反序列化. using Newtonsoft.Json; using System; using System.Collec ...

  3. Android下使用Properties文件保存程序设置

    原文:http://jerrysun.blog.51cto.com/745955/804789 废话不说,直接上代码.    读取.properties文件中的配置: String strValue ...

  4. 【转】Android下使用Properties文件保存程序设置

    原文:http://jerrysun.blog.51cto.com/745955/804789 废话不说,直接上代码.    读取.properties文件中的配置:  String strValue ...

  5. 程序启动读取和关闭时保存应用程序设置(QSettings)

    保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...

  6. PDF 补丁丁 0.6.0.3363 版发布(修复无法保存应用程序设置的问题)

    本测试版修复了上一测试版无法保存应用程序设置的问题,以及导出导入信息文件的若干小问题.

  7. win7无法保存打印机设置(错误0x000006d9)解决方法

    解决win7打印机共享出现‘无法保存打印机设置’操作无法完成(错误0x000006d9),接下来与大家分享下解决方法, 找到windows firewall服务,启用即可 ============== ...

  8. linux系统学习笔记:无死角理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

    一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用 ...

  9. 【.net 深呼吸】自己动手来写应用程序设置类

    在开始装逼之前,老周先说明一件事.有人说老周写的东西太简单了,能不能写点复杂点.这问题就来了,要写什么东西才叫“复杂”?最重要的是,写得太复杂了,一方面很多朋友看不懂,另一方面,连老周自己也不知道怎么 ...

随机推荐

  1. 基础算法-查找:线性索引查找(I)

    前面介绍的几种查找的算法都是基于数据有序的基础上进行的.但是在实际的应用中,很多数据集可能有惊人的数据量,面对这些海量的数据,要保证记录全部按照当中的某个关键字有序,其时间代价是非常昂贵的,所以这种数 ...

  2. linux shell awk 流程控制语句(if,for,while,do)详细介绍

    在linux awk的 while.do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出.break中断当前正在执行的循环并跳到循环 ...

  3. 【转】论文、会议、期刊评价|Indicate paper, conference, Journal

    转自“浙江大学计算机学院软硬件协同设计实验室”:http://multicore.zju.edu.cn/fatlab/Indicate-paper.htm 1           体系结构领域,排名为 ...

  4. BaseAdapter导致notifyDataSetChanged()无效的四个原因及处理方法

    前一段时间在做一个项目的时候遇到了一个关于BaseAdapter的notifyDataSetChanged()方法无效问题,当时在网上搜了一个解决方法,今天又遇到了一个类似的问题,我在这里做个记录,防 ...

  5. Gsoap 使用心得 2

                                         Gsoap 返回图片byte的困惑 前些日子刚使用gsoap将二进制文件上传(服务期端使用c# wcf 编写),上传功能实现没 ...

  6. AutoCAD 2013官方简体中文破解版(32 / 64位),带激活码和注册机

    AutoCAD 2014下载地址:http://ideapad.zol.com.cn/61/160_603697.html 安装及破解方法:(注册机下载在下方) 1.安装Autodesk AutoCA ...

  7. 条码知识之九:EAN-128条码(上)

     EAN-128码,现称GS1-128码,是专用于GS1系统中的条码,可以标注商品的附加信息,在商品信息的标识.产品的跟踪与追溯中有广泛的用途. EAN-128码来自于CODE-128码,在字符集.条 ...

  8. Qt Installer Framework的学习

    Qt Installer Framework是Qt默认包的发布框架.它很方便,使用静态编译Qt制作而成.并且使用了压缩率很高的7z对组件进行压缩.之所以有这些好处,我才觉得值得花一点儿精力研究一下这个 ...

  9. Windows Phone 8初学者开发—第5部分:布局和事件基础

    原文 Windows Phone 8初学者开发—第5部分:布局和事件基础 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Developme ...

  10. mysql merge table

    SELECT COUNT(*) FROM `comment` SHOW CREATE TABLE `comment` CREATE TABLE `comment1` ( `id` INT(8) NOT ...