QT实现一个系统参数管理窗口

news/2024/9/17 19:02:38/ 标签: qt, 开发语言

为了实现一个管理系统参数的设计,我们可以创建一个配置参数类来封装配置的读取和写入操作,并使用一个 QWidget 作为用户界面来管理这些参数。以下是如何设计一个这样的系统,包括配置参数类和管理界面。

1. 配置参数类

我们创建一个 ConfigManager 类来处理配置的读取和写入。这将使得参数管理与用户界面分离,方便维护和扩展。

#include <QSettings>
#include <QString>class ConfigManager {
public:ConfigManager(const QString &organization, const QString &application): settings(organization, application) {}QString getServerAddress() const {return settings.value("serverAddress", "").toString();}void setServerAddress(const QString &address) {settings.setValue("serverAddress", address);}QString getPort() const {return settings.value("port", "").toString();}void setPort(const QString &port) {settings.setValue("port", port);}bool isLoggingEnabled() const {return settings.value("enableLogging", false).toBool();}void setLoggingEnabled(bool enabled) {settings.setValue("enableLogging", enabled);}private:QSettings settings;
};

2. 管理界面 QWidget

接下来,我们创建一个 ConfigWidget 类来提供用户界面,使用 ConfigManager 类来管理和存储配置参数。

#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QMessageBox>#include "ConfigManager.h"class ConfigWidget : public QWidget {Q_OBJECTpublic:ConfigWidget(ConfigManager *configManager, QWidget *parent = nullptr): QWidget(parent), configManager(configManager) {// 创建控件QLabel *label1 = new QLabel("Server Address:", this);QLabel *label2 = new QLabel("Port:", this);QLabel *label3 = new QLabel("Enable Logging:", this);serverAddressEdit = new QLineEdit(this);portEdit = new QLineEdit(this);enableLoggingCheckBox = new QCheckBox(this);QPushButton *saveButton = new QPushButton("Save", this);QPushButton *cancelButton = new QPushButton("Cancel", this);// 设置布局QFormLayout *formLayout = new QFormLayout;formLayout->addRow(label1, serverAddressEdit);formLayout->addRow(label2, portEdit);formLayout->addRow(label3, enableLoggingCheckBox);QHBoxLayout *buttonLayout = new QHBoxLayout;buttonLayout->addWidget(saveButton);buttonLayout->addWidget(cancelButton);QVBoxLayout *mainLayout = new QVBoxLayout(this);mainLayout->addLayout(formLayout);mainLayout->addLayout(buttonLayout);setLayout(mainLayout);// 连接信号和槽connect(saveButton, &QPushButton::clicked, this, &ConfigWidget::handleSaveButton);connect(cancelButton, &QPushButton::clicked, this, &ConfigWidget::handleCancelButton);// 读取设置readSettings();}private slots:void handleSaveButton() {// 保存设置configManager->setServerAddress(serverAddressEdit->text());configManager->setPort(portEdit->text());configManager->setLoggingEnabled(enableLoggingCheckBox->isChecked());QMessageBox::information(this, "Configuration Saved", "Settings have been saved.");}void handleCancelButton() {// 关闭窗口close();}private:void readSettings() {// 读取设置serverAddressEdit->setText(configManager->getServerAddress());portEdit->setText(configManager->getPort());enableLoggingCheckBox->setChecked(configManager->isLoggingEnabled());}ConfigManager *configManager;QLineEdit *serverAddressEdit;QLineEdit *portEdit;QCheckBox *enableLoggingCheckBox;
};

3. 主程序

最后,我们创建主程序来初始化 ConfigManager 并显示 ConfigWidget

#include <QApplication>
#include "ConfigWidget.h"
#include "ConfigManager.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);ConfigManager configManager("MyCompany", "MyApp");ConfigWidget configWidget(&configManager);configWidget.setWindowTitle("System Configuration");configWidget.resize(300, 200);configWidget.show();return app.exec();
}

代码说明

  1. ConfigManager:

    • 封装了读取和写入配置参数的逻辑。使用 QSettings 来管理配置的持久化。
    • 提供了方法来获取和设置服务器地址、端口和日志记录状态。
  2. ConfigWidget:

    • 提供了一个用户界面来显示和修改配置参数。
    • 使用 ConfigManager 类来读取和保存设置。
    • 在窗口加载时从 ConfigManager 读取设置,并在用户点击保存按钮时将设置写回 ConfigManager
  3. 主程序:

    • 初始化 QApplication 实例和 ConfigManager 实例。
    • 创建 ConfigWidget 实例,并将 ConfigManager 传递给它。
    • 显示配置窗口。

http://www.ppmy.cn/news/1507158.html

相关文章

数据库篇--八股文学习第十八天| MySQL和Redis的区别是什么;Redis有什么优缺点?为什么用Redis查询会比较快

1、MySQL和Redis的区别是什么 答&#xff1a; Redis基于键值对&#xff0c;支持多种数据结构&#xff1b;而MySQL是一种关系型数据库&#xff0c;使用表来组织数据。Redis将数据存在内存中&#xff0c;通过持久化机制将数据写入磁盘&#xff0c;MySQL通常将数据存储在磁盘上。…

Ubuntu安装 IDEA

一、在官网下载 IDEA 下载IDEA For LinuxDownload the latest version of IntelliJ IDEA for Windows, macOS or Linux.https://www.jetbrains.com/idea/download/?sectionlinux下载好的安装包解压到/opt/中&#xff0c;目录名更改为 idea 二、对/opt/idea 目录下所有文件授予…

Java开发工具IDEA

IDEA概述 Intellij IDEA IDEA全称Intellij IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境 把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具。 IDEA下载和安…

Unity自带的UGUI ScrollView刷新不及时问题

self:RefreshCommentsList()self.scrollView self.CommentsView:GetComponent(ScrollRect) self.scrollView.verticalNormalizedPosition 0如上所示&#xff0c;当我想刷新Unity中的一个ScrollView的列表后&#xff0c;将这个列表瞬间移至底部。但是上述这三行代码会出现一个…

关于网络数据的一些思考

为了给游戏用户带来更好的体验&#xff0c;但又想兼顾稳定性&#xff0c;因此有了kcp这样的技术&#xff0c;可如果是面临海外产品这是远远不够的 不同国家&#xff0c;不同地区&#xff0c;不同企业&#xff0c;不同用户所使用的设备千奇百怪。甚至与安装师傅的配置也有关系。…

支持二次开发的在线客服系统-高性能客服程序源码

首先&#xff0c;咱们这个客服系统是用 Go 语言开发的&#xff0c;Go 语言是 Google 大佬们搞出来的&#xff0c;它特别适合写并发程序&#xff0c;性能杠杠的。 如果你想改前端页面&#xff1a; 咱们的前端页面是用 HTML、CSS、JavaScript 这些传统技术做的&#xff0c;不是…

第一章 NoSQL之Redis配置与优化

关系数据库与非关系型数据库 关系型数据库 一个结构化的数据库&#xff0c;创建在关系模型基础上一般面向于记录包括Oracle、MySQL、SQLServer、Microsoft Access、DB2等 非关系型数据库 除了主流的关系型数据库外的数据库&#xff0c;都认为是非关系型包括Redis、MongoDB、…

【QML】Qt.rgba()的正确使用方法

1. 问题 设置颜色 color: Qt.rgba(65,105,225,255) &#xff0c;应该是蓝色&#xff0c;却显示白色。 2. 正确方法 //正确代码 color: Qt.rgba(65/255, 105/255, 225/255, 255/255)

如何在 K8s 中实现指定数据库实例下线?

上期文章介绍了 InstanceSet&#xff0c;同时也介绍了 InstanceSet 针对数据库高可用等需求衍生出的一系列特性。本期我们将介绍 指定实例下线 这一特性&#xff0c;一起来了解这一特性诞生的背景和使用方式吧&#xff5e; 指定实例下线解决了什么问题&#xff1f; 早期版本中…

Cisco ACL 中的通配符掩码详解

注&#xff1a;机翻&#xff0c;未校。 Wildcard Masks in ACLs Explained This tutorial explains what the ACL wildcard masks are and how they are used. Learn the differences and similarities between wildcard masks and subnet masks. 本教程介绍了什么是 ACL 通配…

HTML学习笔记——用HTML记录学习过程4——非主体结构元素

非主体结构元素主要是为了表达逻辑结构或者附加信息的元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>非主体结构元素</title> </head> <body> <header><h1>head…

http的发展历史,各版本的差异点,以及和https的区别

### HTTP的发展历史及各版本的差异点 HTTP/0.9 - **发布时间**&#xff1a;1991年 - **特点**&#xff1a; - 最初的HTTP协议版本&#xff0c;非常简单。 - 只支持GET方法&#xff0c;不支持请求头和响应头。 - 响应仅为纯文本&#xff0c;无法传输图片、音频等多媒体资…

集合的框架(之一)

集合的含义&#xff1a; 集合是一个可变的容器&#xff0c;可以随时向集合中添加元素&#xff0c;也可以随时从集合中删除元素。另外&#xff0c;集合还提供了若干个用来操作集合中数据的方法。集合里的数据&#xff0c;我们称之为元素(elements)&#xff1b;集合只能用来存储…

Word中加载Mathtype后粘贴复制快捷键(Ctrl+C/V)不能使用

操作环境 windows 11操作系统 word版本2021 mathtype版本7.4 这个问题只出现在word中&#xff0c;在excel和ppt中都不存在这个问题&#xff0c;而且之前在另一台电脑中使用word2016版本并没有这种问题的&#xff0c;然后网上搜了一下有不少人有这种问题&#xff0c;word直接取…

C# 设计模式之享元模式

总目录 前言 假设你有一个机器猫&#xff0c;你要的什么他就给你变什么&#xff0c;其实啊&#xff0c;机器猫肚子里面有个神奇的工厂&#xff0c;你要什么他就给你造什么&#xff0c;然后给你&#xff1b;有一天你和机器猫说&#xff0c;你比较喜欢小米su7&#xff0c;于是机…

C#类继承自泛型集合

继承自泛型字典的例子 这段代码定义了一个多层嵌套的字典结构&#xff0c;旨在组织和存储复杂的层级数据 using System; using System.Threading.Tasks; class Contract : Dictionary<string, Dictionary<string, Dictionary<string, string>>> {private r…

四、数字图像处理Matlab实验 第二章 数字图像基础

文章目录 一、使用不同空间分辨率显示图片 P351.1 实验内容1.2 文件目录1.3 Matlab代码1.4 实验结果 二、使用不同灰度分辨率显示图片 P352.1 实验内容2.2 文件目录结构2.3 Matlab代码2.4 实验结果 三、使用三种插值法实现图像缩放 P383.1 实验内容3.2 文件目录结构3.3 Matlab代…

嵌入式人工智能(47-Pycharm通过SSH远程连接调试树莓派4B服务器)

用过Pycharm的同学都知道&#xff0c;这个IDE非常强大&#xff0c;强大到写个Helloworld都不值当运行它&#xff0c;等我打开的功夫&#xff0c;sublime都运行结束了。但是往往写大项目&#xff0c;尤其是web前后端的程序用Pycharm非常爽了&#xff0c;多标签页&#xff0c;前后…

优购电商小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;留言板管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&#xf…

【密码学】网络攻击类型:拒绝服务DoS攻击和中间人MITM攻击

网络攻击是指针对计算机信息系统、基础设施、计算机网络或个人计算机设备的任何类型的进攻动作。这些攻击可能旨在破坏、揭露、修改、使软件或硬件失效、进行间谍活动、窃取数据或获得未经授权的访问权限。 网络攻击类型非常多&#xff0c;本文先介绍两个常见的攻击。我试着从攻…