QSettings保存程序设置
今天看了一些QSettings的简单用法,可以用来保存程序的设置,使得程序每次启动都可以显示上次关闭时的状态。我这里实现了一个简单的文本编辑窗口,可以设置文本的字体,字体的颜色和背景色。每次关闭程序都保存程序的几何大小,位置和文本以及文本所设置的格式,方便启动程序后继续编辑。
文本编辑窗口
- class TextEditor:public QTextEdit
- {
- Q_OBJECT
- public:
- TextEditor(QWidget *parent = NULL);
- ~TextEditor();
- void SaveSettings();
- protected:
- void ReadSettings();
- void contextMenuEvent ( QContextMenuEvent * event );
- private slots:
- void SettingBackColorSlot();
- void SettingTextColorSlot();
- void SettingTextFontSlot();
- };
- TextEditor::TextEditor( QWidget *parent /*= NULL*/ ):QTextEdit(parent)
- {
- ReadSettings();
- }
- TextEditor::~TextEditor()
- {
- }
- void TextEditor::contextMenuEvent( QContextMenuEvent * event )
- {
- QMenu *pMenu = createStandardContextMenu();
- pMenu->addSeparator();
- QTextCursor cursor = this->textCursor();
- QString seletedText = cursor.selectedText();
- if (!seletedText.isEmpty()) //选中文本才可以设置文本样式
- {
- QMenu *pSubMenu = new QMenu(tr("设置"),pMenu);
- pMenu->addMenu(pSubMenu);
- QAction *pFontAct = new QAction(tr("字体"),pSubMenu);
- QAction *pTextColorAct = new QAction(tr("字体颜色"),pSubMenu);
- QAction *pBackColorAct = new QAction(tr("背景色"),pSubMenu);
- pSubMenu->addAction(pFontAct);
- pSubMenu->addAction(pTextColorAct);
- pSubMenu->addAction(pBackColorAct);
- connect(pFontAct,SIGNAL(triggered ()),this,SLOT(SettingTextFontSlot()));
- connect(pTextColorAct,SIGNAL(triggered ()),this,SLOT(SettingTextColorSlot()));
- connect(pBackColorAct,SIGNAL(triggered ()),this,SLOT(SettingBackColorSlot()));
- }
- pMenu->exec(event->globalPos());
- delete pMenu;
- }
- //设置文本背景色
- void TextEditor::SettingBackColorSlot()
- {
- QColor color = QColorDialog::getColor(Qt::white, this, "Select Color", QColorDialog::DontUseNativeDialog);
- if(color.isValid())
- {
- this->setTextBackgroundColor(color);
- }
- }
- //设置文本颜色
- void TextEditor::SettingTextColorSlot()
- {
- QColor color = QColorDialog::getColor(Qt::black, this, "Select Color", QColorDialog::DontUseNativeDialog);
- if(color.isValid())
- {
- this->setTextColor(color);
- }
- }
- //设置文本字体
- void TextEditor::SettingTextFontSlot()
- {
- bool ok;
- QFont font = QFontDialog::getFont(&ok, this);
- if (ok)
- {
- QTextCursor cur = this->textCursor();
- QString sltStr = cur.selectedText();
- this->cut();
- QTextCharFormat fmtText;
- fmtText.setFont(font);
- cur.insertText(sltStr,fmtText);
- }
- }
- //退出前保存文本信息
- void TextEditor::SaveSettings()
- {
- QSettings TextSettings("Mysoft","TextData");
- QString html = this->toHtml();
- TextSettings.setValue("text",html);
- }
- //启动时读取信息
- void TextEditor::ReadSettings()
- {
- QSettings TextSettings("Mysoft","TextData");
- QString html = TextSettings.value("text").toString();
- this->setHtml(html);
- }
程序主窗口
- class TextEdit : public QMainWindow
- {
- Q_OBJECT
- public:
- TextEdit(QWidget *parent = 0, Qt::WFlags flags = 0);
- ~TextEdit();
- protected:
- void closeEvent ( QCloseEvent * event ) ;
- void ReadSettings();
- private:
- TextEditor *m_pCentralWidget;
- };
- TextEdit::TextEdit(QWidget *parent, Qt::WFlags flags)
- : QMainWindow(parent, flags)
- {
- m_pCentralWidget = new TextEditor(this);
- this->setCentralWidget(m_pCentralWidget);
- ReadSettings();
- }
- TextEdit::~TextEdit()
- {
- }
- void TextEdit::closeEvent( QCloseEvent * event )
- {
- QSettings dialogSettings("Mysoft","dialogData"); //保存窗口位置和大小
- dialogSettings.setValue("Rect",this->rect());
- QPoint pos = this->pos();
- dialogSettings.setValue("positionX",this->pos().x());
- dialogSettings.setValue("positionY",this->pos().y());
- m_pCentralWidget->SaveSettings();
- }
- void TextEdit::ReadSettings()
- {
- QSettings dialogSettings("Mysoft","dialogData"); //读取窗口位置和大小
- dialogSettings.setValue("Rect",this->rect());
- dialogSettings.setValue("position",this->pos());
- QRect rect = dialogSettings.value("Rect").value<QRect>();
- this->setGeometry(rect);
- int posX = dialogSettings.value("positionX").toInt();
- int posY = dialogSettings.value("positionY").toInt();
- this->move(QPoint(posX,posY));
- }
http://blog.csdn.net/hai200501019/article/details/11179967
QSettings保存程序设置的更多相关文章
- C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置
参考页面: http://www.yuanjiaocheng.net/webapi/test-webapi.html http://www.yuanjiaocheng.net/webapi/web-a ...
- C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置
用于永久化对象,什么程序都行,依赖NewtonSoft.用于json序列化和反序列化. using Newtonsoft.Json; using System; using System.Collec ...
- Android下使用Properties文件保存程序设置
原文:http://jerrysun.blog.51cto.com/745955/804789 废话不说,直接上代码. 读取.properties文件中的配置: String strValue ...
- 【转】Android下使用Properties文件保存程序设置
原文:http://jerrysun.blog.51cto.com/745955/804789 废话不说,直接上代码. 读取.properties文件中的配置: String strValue ...
- 程序启动读取和关闭时保存应用程序设置(QSettings)
保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...
- PDF 补丁丁 0.6.0.3363 版发布(修复无法保存应用程序设置的问题)
本测试版修复了上一测试版无法保存应用程序设置的问题,以及导出导入信息文件的若干小问题.
- win7无法保存打印机设置(错误0x000006d9)解决方法
解决win7打印机共享出现‘无法保存打印机设置’操作无法完成(错误0x000006d9),接下来与大家分享下解决方法, 找到windows firewall服务,启用即可 ============== ...
- linux系统学习笔记:无死角理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID
一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用 ...
- 【.net 深呼吸】自己动手来写应用程序设置类
在开始装逼之前,老周先说明一件事.有人说老周写的东西太简单了,能不能写点复杂点.这问题就来了,要写什么东西才叫“复杂”?最重要的是,写得太复杂了,一方面很多朋友看不懂,另一方面,连老周自己也不知道怎么 ...
随机推荐
- mybatis级联查询
1.定义四个实体.User Role Privilege Resource,他们之间的对于关系为 2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源 3 ...
- ASP.NET页面传值的几种方式
页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值. 存储对象传值.ajax.类.model.表单等!下面欧柏泰克和大家一起来看看asp.net页面传值方式一般有哪些?常用的较简单 ...
- SSIS 连接 PostgreSQL
因为工作需要,得把psql的表放到SQL Server, 找到一个PGNP(http://www.pgoledb.com/) 的适配器,不过一看要300$就没有去尝试了. 官方倒是有ODBC的驱动. ...
- Jquery调用webService的四种方法 转载-记录
我总结几个关键点 1. 服务必须声明为ScriptService(否则会出现下面的问题) 2.服务的方法不需要任何更改,保持原状 3.客户端用jquery的.ajax方法来调用 3.1 type必须是 ...
- 为什么cp很多小文件非常慢——对cp和rm命令的一些思考
linux中的文件复制命令——CP linux中文件剪切的命令——MV 1.问题背景 今天在某个目的动作过程中想把一个文件夹下的文件复制到另外的一个文件夹下 cp -fr ./dir1/ /d ...
- 菜鸟初识UML
首当其冲的就是:什么是UML呢? 首先,UML 是一种可视化的面向对象的建模语言.它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造 ...
- 《JavaScript权威指南》拾遗(下)
一.类和原型 1.在JavaScript中,类的实现是基于原型继承机制的,如果两个实例都是从同一个原型对象中继承了属性,则它们是同一个类的实例. 2.原型对象是类的唯一 ...
- Hbase split的过程以及解发条件
一.Split触发条件 1. 有任一一个Hfile的大小超过默认值10G时,都会进行split 2. 达到这个值不在拆分,默认为int_max,不进行拆分 3.compact ...
- 转:JavaScript定时机制、以及浏览器渲染机制 浅谈
昨晚,朋友拿了一道题问我: a.onclick = function(){ setTimeout(function() { //do something ... },0); }; //~~~ 我只知道 ...
- [置顶] android网络通讯之HttpClient4不指定参数名发送Post
在HttpClient4之前都是通过List<NameValuePair>键值对的形式来向服务器传递参数 ,在4.0版本中在加入了不指定参数名发送数据的形式,利用StringEntity来 ...