当前位置: 首页 > news >正文

华夏望子成龙网站开发背景Wordpress点金

华夏望子成龙网站开发背景,Wordpress点金,wordpress首页排版,优化方案物理电子版上篇文章#xff0c;我们用 Qt5 实现了在小工具箱中添加了《Base64图片编码预览功能》功能。为了继续丰富我们的工具箱#xff0c;今天我们就再增加两个平时经常用到的功能吧#xff0c;就是「 16进制颜色码转RGB文本 」和 「屏幕颜色提取」功能。下面我们就来看看如何来规划…上篇文章我们用 Qt5 实现了在小工具箱中添加了《Base64图片编码预览功能》功能。为了继续丰富我们的工具箱今天我们就再增加两个平时经常用到的功能吧就是「 16进制颜色码转RGB文本 」和 「屏幕颜色提取」功能。下面我们就来看看如何来规划开发这样的小功能并且添加到我们的工具箱中吧。 老规矩先上图 16进制转RGB RGB转16进制 屏幕颜色提取 功能概述颜色码转换和屏幕颜色提取 颜色码转换功能 输入支持输入RGB颜色代码或16进制颜色代码。输出转换为另一种格式的颜色代码。操作支持从RGB转换为16进制和反之转换。 屏幕颜色提取功能 操作捕获屏幕上鼠标位置的颜色信息。展示显示提取到的颜色包括16进制颜色代码和颜色预览。交互启动功能后可以在屏幕上移动鼠标以实时获取不同位置的颜色。终止点击特定键盘按键例如按下Tab键以停止捕获。 需求概述 颜色码转换功能 用户友好提供清晰的界面支持输入RGB或16进制颜色代码。格式转换允许用户在RGB和16进制颜色代码之间进行转换。展示结果将转换后的颜色代码显示给用户。 屏幕颜色提取功能 启动捕获点击按钮启动颜色捕获功能。显示颜色在界面上显示捕获到的颜色代码和颜色预览。实时更新随着鼠标移动实时显示不同位置的颜色。停止捕获通过特定操作例如按下Tab键停止捕获颜色。异常处理处理未找到屏幕或捕获颜色失败的情况。 这样的功能旨在提供一个便捷的界面允许用户在RGB和16进制颜色代码之间自由转换并且能够在屏幕上捕获颜色以获取准确的颜色信息。 核心代码实现 class ColorConverter : public QWidget { Q_OBJECT public:explicit ColorConverter(QWidget *parent nullptr) : QWidget(parent) {// 在构造函数中初始化定时器colorTimer new QTimer(this);colorTimer-setInterval(100); // 设置定时器间隔为100毫秒connect(colorTimer, QTimer::timeout, this, ColorConverter::extractScreenColor);auto *layout new QVBoxLayout(this);// 创建颜色值转换部分的输入框和按钮colorInput new QLineEdit(this);layout-addWidget(colorInput);convertButton new QPushButton(16进制转RGB, this);connect(convertButton, QPushButton::clicked, this, ColorConverter::convertToRgbColor);layout-addWidget(convertButton);convertButton new QPushButton(RGB转16进制, this);connect(convertButton, QPushButton::clicked, this, ColorConverter::convertToHexColor);layout-addWidget(convertButton);convertedColorOutput new QTextEdit(this);convertedColorOutput-setReadOnly(true);layout-addWidget(convertedColorOutput);// 创建屏幕颜色提取器部分的按钮和显示框extractColorButton new QPushButton(开始提取屏幕颜色, this);connect(extractColorButton, QPushButton::clicked, this, ColorConverter::startColorCapture);layout-addWidget(extractColorButton);// 创建用于存放颜色块和颜色输出的网格布局auto *colorBlockLayout new QGridLayout();// 创建颜色输出screenColorOutput new QLabel(this);screenColorOutput-setFixedSize(200, 90);screenColorOutput-setAlignment(Qt::AlignCenter);screenColorOutput-setStyleSheet(border: 1px solid #ddd);colorBlockLayout-addWidget(screenColorOutput, 0, 0); // 将颜色输出放在网格布局的左上角// 创建颜色块screenColorBlock new QLabel(this);screenColorBlock-setFixedSize(30, 30); // 设置颜色块大小screenColorBlock-setStyleSheet(border: 1px solid #ddd);colorBlockLayout-addWidget(screenColorBlock, 0, 0, Qt::AlignTop | Qt::AlignRight); // 将颜色块放在颜色输出的右上角layout-addLayout(colorBlockLayout);setLayout(layout);installEventFilter(this); // 安装事件过滤器以捕获鼠标事件}protected slots:void convertToHexColor() {// 从输入框获取颜色值QString colorText colorInput-text();// 按逗号分隔RGB文本QStringList rgbValues colorText.split(,);if (rgbValues.size() 3) {// 获取R、G和B的值int red rgbValues[0].toInt();int green rgbValues[1].toInt();int blue rgbValues[2].toInt();// 将RGB值转换为16进制字符串QString hexRed QString(%1).arg(red, 2, 16, QChar(0)).toUpper();QString hexGreen QString(%1).arg(green, 2, 16, QChar(0)).toUpper();QString hexBlue QString(%1).arg(blue, 2, 16, QChar(0)).toUpper();// 构建16进制颜色代码文本QString hexText QString(#%1%2%3).arg(hexRed).arg(hexGreen).arg(hexBlue);convertedColorOutput-setText(hexText);} else {// 处理无效颜色输入的情况convertedColorOutput-setText(Invalid color input);}}void convertToRgbColor() {// 从输入框获取颜色值QString colorText colorInput-text();QColor color(colorText);if (color.isValid()) {// 获取16进制颜色码的红、绿、蓝通道值int red color.red();int green color.green();int blue color.blue();// 构建RGB颜色代码文本QString outputText QString(RGB(%1, %2, %3)).arg(red).arg(green).arg(blue);convertedColorOutput-setText(outputText);} else {// 处理无效颜色输入的情况convertedColorOutput-setText(Invalid color input);}}// 开始捕获颜色的槽函数void startColorCapture() {extractColorButton-setText(请开始移动鼠标 按Tab键终止取色);colorTimer-start();}void extractScreenColor() {QPoint cursorPos QCursor::pos();QScreen *screen QGuiApplication::screenAt(cursorPos);if (screen) {QPixmap screenshot screen-grabWindow(0, cursorPos.x(), cursorPos.y(), 1, 1);if (!screenshot.isNull()) {QColor color screenshot.toImage().pixel(0, 0);QString colorText QString(Screen Color: #%1).arg(color.name().mid(1));screenColorOutput-setText(colorText);QString styleSheet QString(background-color: %1; border: 1px solid #ddd;).arg(color.name());screenColorBlock-setStyleSheet(styleSheet);} else {screenColorOutput-setText(Failed to grab screen color);}} else {screenColorOutput-setText(No screen found at the cursor position);}}// 停止捕获颜色的槽函数void stopColorCapture() {colorTimer-stop();extractColorButton-setText(开始提取屏幕颜色);} protected:// 捕获松开Tab按键事件bool eventFilter(QObject *watched, QEvent *event) override {if (event-type() QEvent::WindowDeactivate || event-type() QEvent::KeyRelease) {stopColorCapture();return true;}return QObject::eventFilter(watched, event);}private:QLineEdit *colorInput;QPushButton *convertButton;QTextEdit *convertedColorOutput;QPushButton *extractColorButton;QLabel *screenColorOutput;QLabel *screenColorBlock;QTimer *colorTimer; };核心代码讲解 让我们逐段解析 ColorConverter 类的代码。 class ColorConverter : public QWidget { Q_OBJECT public:explicit ColorConverter(QWidget *parent nullptr) : QWidget(parent) {// 在构造函数中初始化定时器colorTimer new QTimer(this);colorTimer-setInterval(100); // 设置定时器间隔为100毫秒connect(colorTimer, QTimer::timeout, this, ColorConverter::extractScreenColor);auto *layout new QVBoxLayout(this);// 创建颜色值转换部分的输入框和按钮colorInput new QLineEdit(this);layout-addWidget(colorInput);// ...略installEventFilter(this); // 安装事件过滤器以捕获鼠标事件}// ...略 };构造函数与定时器初始化构造函数中创建了一个 ColorConverter 对象并初始化了一个定时器 colorTimer。这个定时器用于每 100 毫秒触发一次屏幕颜色提取功能并与 extractScreenColor 函数连接。 界面布局初始化在构造函数中使用了垂直布局管理器 QVBoxLayout并添加了颜色输入框到布局中。 事件过滤器安装installEventFilter(this) 安装了一个事件过滤器来监视该对象所接收到的事件。在这个场景中它用于捕获鼠标事件以停止颜色提取。 转换函数 void convertToHexColor() {// 获取输入框中的颜色值转换为16进制// ... }void convertToRgbColor() {// 获取输入框中的颜色值转换为RGB格式// ... }QLineEdit 和 QTextEdit分别用于输入和显示颜色值convertToHexColor 和 convertToRgbColor 函数用于颜色转换。 屏幕颜色提取器 void startColorCapture() {// 开始捕获颜色的槽函数// ... }void extractScreenColor() {// 提取屏幕颜色的槽函数// ... }void stopColorCapture() {// 停止颜色捕获的槽函数// ... }QPushButton 和 QLabelextractColorButton 用于启动颜色捕获screenColorOutput 和 screenColorBlock 用于显示屏幕颜色信息。 事件过滤器 bool eventFilter(QObject *watched, QEvent *event) override {// 事件过滤器捕获键盘事件以终止颜色捕获// ... }QObject 和 QEventeventFilter 捕获键盘事件当用户按下 Tab 键松开时终止颜色捕获。 总结 主要利用了 Qt 中的 QWidget、QObject、QTimer、QLineEdit、QPushButton、QTextEdit、QLabel 等部件以及事件过滤器功能来实现颜色转换和屏幕颜色提取的功能。按钮的点击触发不同的槽函数展示了转换后的颜色信息或从屏幕获取的颜色信息。同时通过事件过滤器监听键盘事件以实现终止屏幕颜色提取的功能。 讲解完毕下面是完整代码复制到本地跑一跑吧~ #include QApplication #include QWidget #include QPushButton #include QVBoxLayout #include QMessageBox #include QDebug #include QListWidget #include QClipboard #include QMimeData #include QTextEdit #include QJsonDocument #include QJsonObject #include QDateTime #include QLabel #include QComboBox #include QLineEdit #include QXmlStreamReader #include QFile #include QFileDialog #include QScreen #include QCursor #include QPoint #include QGuiApplication #include QPixmap #include QHBoxLayout #include QThread #include QMouseEvent #include QTimer#define myApp (dynamic_castQApplication *(QCoreApplication::instance()))class ColorConverter : public QWidget { Q_OBJECT public:explicit ColorConverter(QWidget *parent nullptr) : QWidget(parent) {// 在构造函数中初始化定时器colorTimer new QTimer(this);colorTimer-setInterval(100); // 设置定时器间隔为100毫秒connect(colorTimer, QTimer::timeout, this, ColorConverter::extractScreenColor);auto *layout new QVBoxLayout(this);// 创建颜色值转换部分的输入框和按钮colorInput new QLineEdit(this);layout-addWidget(colorInput);convertButton new QPushButton(16进制转RGB, this);connect(convertButton, QPushButton::clicked, this, ColorConverter::convertToRgbColor);layout-addWidget(convertButton);convertButton new QPushButton(RGB转16进制, this);connect(convertButton, QPushButton::clicked, this, ColorConverter::convertToHexColor);layout-addWidget(convertButton);convertedColorOutput new QTextEdit(this);convertedColorOutput-setReadOnly(true);layout-addWidget(convertedColorOutput);// 创建屏幕颜色提取器部分的按钮和显示框extractColorButton new QPushButton(开始提取屏幕颜色, this);connect(extractColorButton, QPushButton::clicked, this, ColorConverter::startColorCapture);layout-addWidget(extractColorButton);// 创建用于存放颜色块和颜色输出的网格布局auto *colorBlockLayout new QGridLayout();// 创建颜色输出screenColorOutput new QLabel(this);screenColorOutput-setFixedSize(200, 90);screenColorOutput-setAlignment(Qt::AlignCenter);screenColorOutput-setStyleSheet(border: 1px solid #ddd);colorBlockLayout-addWidget(screenColorOutput, 0, 0); // 将颜色输出放在网格布局的左上角// 创建颜色块screenColorBlock new QLabel(this);screenColorBlock-setFixedSize(30, 30); // 设置颜色块大小screenColorBlock-setStyleSheet(border: 1px solid #ddd);colorBlockLayout-addWidget(screenColorBlock, 0, 0, Qt::AlignTop | Qt::AlignRight); // 将颜色块放在颜色输出的右上角layout-addLayout(colorBlockLayout);setLayout(layout);installEventFilter(this); // 安装事件过滤器以捕获鼠标事件}protected slots:void convertToHexColor() {// 从输入框获取颜色值QString colorText colorInput-text();// 按逗号分隔RGB文本QStringList rgbValues colorText.split(,);if (rgbValues.size() 3) {// 获取R、G和B的值int red rgbValues[0].toInt();int green rgbValues[1].toInt();int blue rgbValues[2].toInt();// 将RGB值转换为16进制字符串QString hexRed QString(%1).arg(red, 2, 16, QChar(0)).toUpper();QString hexGreen QString(%1).arg(green, 2, 16, QChar(0)).toUpper();QString hexBlue QString(%1).arg(blue, 2, 16, QChar(0)).toUpper();// 构建16进制颜色代码文本QString hexText QString(#%1%2%3).arg(hexRed).arg(hexGreen).arg(hexBlue);convertedColorOutput-setText(hexText);} else {// 处理无效颜色输入的情况convertedColorOutput-setText(Invalid color input);}}void convertToRgbColor() {// 从输入框获取颜色值QString colorText colorInput-text();QColor color(colorText);if (color.isValid()) {// 获取16进制颜色码的红、绿、蓝通道值int red color.red();int green color.green();int blue color.blue();// 构建RGB颜色代码文本QString outputText QString(RGB(%1, %2, %3)).arg(red).arg(green).arg(blue);convertedColorOutput-setText(outputText);} else {// 处理无效颜色输入的情况convertedColorOutput-setText(Invalid color input);}}// 开始捕获颜色的槽函数void startColorCapture() {extractColorButton-setText(请开始移动鼠标 按Tab键终止取色);colorTimer-start();}void extractScreenColor() {QPoint cursorPos QCursor::pos();QScreen *screen QGuiApplication::screenAt(cursorPos);if (screen) {QPixmap screenshot screen-grabWindow(0, cursorPos.x(), cursorPos.y(), 1, 1);if (!screenshot.isNull()) {QColor color screenshot.toImage().pixel(0, 0);QString colorText QString(Screen Color: #%1).arg(color.name().mid(1));screenColorOutput-setText(colorText);QString styleSheet QString(background-color: %1; border: 1px solid #ddd;).arg(color.name());screenColorBlock-setStyleSheet(styleSheet);} else {screenColorOutput-setText(Failed to grab screen color);}} else {screenColorOutput-setText(No screen found at the cursor position);}}// 停止捕获颜色的槽函数void stopColorCapture() {colorTimer-stop();extractColorButton-setText(开始提取屏幕颜色);} protected:// 捕获松开Tab按键事件bool eventFilter(QObject *watched, QEvent *event) override {if (event-type() QEvent::WindowDeactivate || event-type() QEvent::KeyRelease) {stopColorCapture();return true;}return QObject::eventFilter(watched, event);}private:QLineEdit *colorInput;QPushButton *convertButton;QTextEdit *convertedColorOutput;QPushButton *extractColorButton;QLabel *screenColorOutput;QLabel *screenColorBlock;QTimer *colorTimer; };class Base64ImageConverter : public QWidget { Q_OBJECT public:explicit Base64ImageConverter(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);selectImageButton new QPushButton(选择图片, this);connect(selectImageButton, QPushButton::clicked, this, Base64ImageConverter::selectImage);layout-addWidget(selectImageButton);imagePathTextEdit new QTextEdit(this);imagePathTextEdit-setReadOnly(true);layout-addWidget(imagePathTextEdit);convertToBase64Button new QPushButton(转换为Base64编码, this);connect(convertToBase64Button, QPushButton::clicked, this, Base64ImageConverter::convertToBase64);layout-addWidget(convertToBase64Button);base64OutputTextEdit new QTextEdit(this);base64OutputTextEdit-setAcceptRichText(false);layout-addWidget(base64OutputTextEdit);convertToImagePreviewButton new QPushButton(Base64编码转图片预览, this);connect(convertToImagePreviewButton, QPushButton::clicked, this, Base64ImageConverter::convertToImagePreview);layout-addWidget(convertToImagePreviewButton);imagePreviewLabel new QLabel(this);imagePreviewLabel-setFixedHeight(200); // 设置图片高度为 200layout-addWidget(imagePreviewLabel);setLayout(layout);}private slots:void selectImage() {// 创建文件对话框用于选择图片文件QString imagePath QFileDialog::getOpenFileName(this, tr(选择图片), , tr(Images (*.png *.jpg *.bmp)));// 如果用户选择了图片文件则显示文件路径if (!imagePath.isEmpty()) {imagePathTextEdit-setText(imagePath);selectedImagePath imagePath;}}void convertToBase64() {if (selectedImagePath.isEmpty()) {QMessageBox::warning(this, 警告, 请先选择图片);return;}// 读取选定图片文件的内容QFile file(selectedImagePath);if (file.open(QIODevice::ReadOnly)) {QByteArray imageData file.readAll();QString base64Data imageData.toBase64();base64OutputTextEdit-setText(base64Data);} else {QMessageBox::critical(this, 错误, 无法读取图片文件);}}void convertToImagePreview() {QString base64Data base64OutputTextEdit-toPlainText().toUtf8();if (base64Data.isEmpty()) {QMessageBox::warning(this, 警告, 请先转换为Base64编码);return;}// 从Base64数据创建QImage并显示在标签中QByteArray byteArray QByteArray::fromBase64(base64Data.toUtf8());QImage image;image.loadFromData(byteArray);if (!image.isNull()) {// 水平居中对齐imagePreviewLabel-setAlignment(Qt::AlignHCenter);// 缩放图片到 200x200QPixmap pixmap QPixmap::fromImage(image.scaled(200, 200, Qt::KeepAspectRatio));imagePreviewLabel-setPixmap(pixmap);} else {QMessageBox::critical(this, 错误, 无法加载图片);}}private:QPushButton *selectImageButton;QTextEdit *imagePathTextEdit;QPushButton *convertToBase64Button;QTextEdit *base64OutputTextEdit;QPushButton *convertToImagePreviewButton;QLabel *imagePreviewLabel;QString selectedImagePath; };class Base64Converter : public QWidget { Q_OBJECT public:explicit Base64Converter(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);inputTextEdit new QTextEdit(this);layout-addWidget(inputTextEdit);encryptButton new QPushButton(加密, this);connect(encryptButton, QPushButton::clicked, this, Base64Converter::encryptText);layout-addWidget(encryptButton);decryptButton new QPushButton(解密, this);connect(decryptButton, QPushButton::clicked, this, Base64Converter::decryptText);layout-addWidget(decryptButton);outputTextEdit new QTextEdit(this);outputTextEdit-setReadOnly(true);layout-addWidget(outputTextEdit);setLayout(layout);}private slots:void encryptText() {QString inputText inputTextEdit-toPlainText().toUtf8();QByteArray byteArray inputText.toUtf8().toBase64();outputTextEdit-setText(byteArray);}void decryptText() {QString inputText inputTextEdit-toPlainText();QByteArray byteArray QByteArray::fromBase64(inputText.toUtf8());outputTextEdit-setText(byteArray);}private:QTextEdit *inputTextEdit;QTextEdit *outputTextEdit;QPushButton *encryptButton;QPushButton *decryptButton; };class XmlFormatter : public QWidget { Q_OBJECT public:explicit XmlFormatter(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);inputTextEdit new QTextEdit(this);layout-addWidget(inputTextEdit);formatButton new QPushButton(格式化 XML, this);connect(formatButton, QPushButton::clicked, this, XmlFormatter::formatXml);layout-addWidget(formatButton);outputTextEdit new QTextEdit(this);outputTextEdit-setReadOnly(true);layout-addWidget(outputTextEdit);setLayout(layout);}private slots:void formatXml() {// 获取输入的XML文本QString inputText inputTextEdit-toPlainText();if (!inputText.isEmpty()) {// 使用 QXmlStreamReader 读取输入的 XML 文本QXmlStreamReader reader(inputText);QString formattedXml;int indentLevel 0;while (!reader.atEnd() !reader.hasError()) {if (reader.isStartElement()) {formattedXml getIndent(indentLevel) reader.name().toString() \n;indentLevel;} else if (reader.isEndElement()) {--indentLevel;formattedXml getIndent(indentLevel) / reader.name().toString() \n;} else if (reader.isCharacters() !reader.isWhitespace()) {formattedXml getIndent(indentLevel) reader.text().toString() \n;}reader.readNext();}if (reader.hasError()) {outputTextEdit-setText(XML 解析错误 reader.errorString());} else {outputTextEdit-setText(formattedXml);}} else {// 如果输入为空则清空输出区域outputTextEdit-clear();}}static QString getIndent(int level) {return QString(level * 4, ); // 4空格作为缩进}private:QTextEdit *inputTextEdit;QPushButton *formatButton;QTextEdit *outputTextEdit; };class NumberBaseConverter : public QWidget { Q_OBJECT public:explicit NumberBaseConverter(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);// 横向排列的输入框和选择框auto *horizontalLayout new QHBoxLayout();// 创建输入框并添加到水平布局inputLineEdit new QLineEdit(this);horizontalLayout-addWidget(inputLineEdit);// 连接输入框的文本变化信号到槽函数connect(inputLineEdit, QLineEdit::textChanged, this, NumberBaseConverter::convertNumber);// 创建下拉选择框并添加到水平布局baseComboBox new QComboBox(this);baseComboBox-addItem(二进制);baseComboBox-addItem(八进制);baseComboBox-addItem(十进制);baseComboBox-addItem(十六进制);horizontalLayout-addWidget(baseComboBox);// 将水平布局添加到垂直布局layout-addLayout(horizontalLayout);// 创建四个只读的输出框并添加到垂直布局binaryOutput new QLineEdit(this);binaryOutput-setReadOnly(true);layout-addWidget(binaryOutput);octalOutput new QLineEdit(this);octalOutput-setReadOnly(true);layout-addWidget(octalOutput);decimalOutput new QLineEdit(this);decimalOutput-setReadOnly(true);layout-addWidget(decimalOutput);hexOutput new QLineEdit(this);hexOutput-setReadOnly(true);layout-addWidget(hexOutput);// 连接下拉选择框的选择变化信号到槽函数并进行初始转换connect(baseComboBox, QOverloadint::of(QComboBox::currentIndexChanged), this,NumberBaseConverter::convertNumber);convertNumber(); // 初始转换setLayout(layout); // 设置整体布局}private slots:void convertNumber() {QString inputText inputLineEdit-text();bool ok;int base baseComboBox-currentIndex();if (!inputText.isEmpty()) {// 根据所选进制进行转换if (base 0) {int number inputText.toInt(ok, 2); // 二进制转十进制if (ok) {binaryOutput-setText(inputText);octalOutput-setText(QString::number(number, 8));decimalOutput-setText(QString::number(number));hexOutput-setText(QString::number(number, 16).toUpper());}} else if (base 1) {// 八进制转换int number inputText.toInt(ok, 8);if (ok) {binaryOutput-setText(QString::number(number, 2));octalOutput-setText(inputText);decimalOutput-setText(QString::number(number));hexOutput-setText(QString::number(number, 16).toUpper());}} else if (base 2) {// 十进制转换int number inputText.toInt(ok, 10);if (ok) {binaryOutput-setText(QString::number(number, 2));octalOutput-setText(QString::number(number, 8));decimalOutput-setText(inputText);hexOutput-setText(QString::number(number, 16).toUpper());}} else if (base 3) {// 十六进制转换int number inputText.toInt(ok, 16);if (ok) {binaryOutput-setText(QString::number(number, 2));octalOutput-setText(QString::number(number, 8));decimalOutput-setText(QString::number(number));hexOutput-setText(inputText.toUpper());}}} else {// 如果输入为空则清空输出binaryOutput-clear();octalOutput-clear();decimalOutput-clear();hexOutput-clear();}}private:QLineEdit *inputLineEdit;QComboBox *baseComboBox;QLineEdit *binaryOutput;QLineEdit *octalOutput;QLineEdit *decimalOutput;QLineEdit *hexOutput; };class PlaceholderTextEdit : public QWidget { Q_OBJECT public:explicit PlaceholderTextEdit(const QString placeholderText, QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);placeholderLabel new QLabel(placeholderText, this);layout-addWidget(placeholderLabel);textEdit new QTextEdit(this);layout-addWidget(textEdit);connect(textEdit, QTextEdit::textChanged, this, PlaceholderTextEdit::checkPlaceholder);checkPlaceholder(); // 初始检查setLayout(layout);}QString getText() const {return textEdit-toPlainText();}private slots:void checkPlaceholder() {placeholderLabel-setVisible(textEdit-toPlainText().isEmpty());}private:QLabel *placeholderLabel;QTextEdit *textEdit; };class DateTimeTimestampConverter : public QWidget { Q_OBJECT public:explicit DateTimeTimestampConverter(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);inputTextEdit new PlaceholderTextEdit(在此输入日期时间或时间戳, this);layout-addWidget(inputTextEdit);convertToTimestampButton new QPushButton(日期时间转时间戳, this);connect(convertToTimestampButton, QPushButton::clicked, this, DateTimeTimestampConverter::convertToTimestamp);layout-addWidget(convertToTimestampButton);convertToDateTimeButton new QPushButton(时间戳转日期时间, this);connect(convertToDateTimeButton, QPushButton::clicked, this, DateTimeTimestampConverter::convertToDateTime);layout-addWidget(convertToDateTimeButton);outputTextEdit new QTextEdit(this);outputTextEdit-setReadOnly(true);layout-addWidget(outputTextEdit);setLayout(layout);}private slots:void convertToTimestamp() {QString inputText inputTextEdit-getText();QDateTime dateTime QDateTime::fromString(inputText, yyyy-MM-dd HH:mm:ss);if (dateTime.isValid()) {qint64 timestamp dateTime.toSecsSinceEpoch();outputTextEdit-setText(QString::number(timestamp));} else {outputTextEdit-setText(无效的日期时间格式);}}void convertToDateTime() {QString inputText inputTextEdit-getText();bool ok;qint64 timestamp inputText.toLongLong(ok);if (ok) {QDateTime dateTime;dateTime.setSecsSinceEpoch(timestamp);outputTextEdit-setText(时间戳 inputText 对应的日期时间是 dateTime.toString(yyyy-MM-dd HH:mm:ss));} else {outputTextEdit-setText(无效的时间戳格式);}}private:QPushButton *convertToTimestampButton;QPushButton *convertToDateTimeButton;QTextEdit *outputTextEdit;PlaceholderTextEdit *inputTextEdit; };class JsonFormatter : public QWidget { Q_OBJECT public:explicit JsonFormatter(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);inputTextEdit new QTextEdit(this);layout-addWidget(inputTextEdit);formatButton new QPushButton(格式化, this);connect(formatButton, QPushButton::clicked, this, JsonFormatter::formatJson);layout-addWidget(formatButton);outputTextEdit new QTextEdit(this);outputTextEdit-setReadOnly(true);layout-addWidget(outputTextEdit);setLayout(layout);}private slots:void formatJson() {QString inputText inputTextEdit-toPlainText();QJsonParseError error{};QJsonDocument jsonDoc QJsonDocument::fromJson(inputText.toUtf8(), error);if (error.error ! QJsonParseError::NoError) {outputTextEdit-setText(JSON 解析错误 error.errorString());return;}QJsonObject jsonObj jsonDoc.object();QJsonDocument formattedJson(jsonObj);outputTextEdit-setText(formattedJson.toJson());}private:QTextEdit *inputTextEdit;QPushButton *formatButton;QTextEdit *outputTextEdit; };class ClipboardManager : public QWidget { Q_OBJECT public:explicit ClipboardManager(QWidget *parent nullptr) : QWidget(parent) {auto *layout new QVBoxLayout(this);listWidget new QListWidget(this);updateList(); // 初始更新列表auto *clearButton new QPushButton(清空记录, this);connect(clearButton, QPushButton::clicked, this, ClipboardManager::clearClipboard);layout-addWidget(listWidget);layout-addWidget(clearButton);setLayout(layout);connect(myApp-clipboard(), QClipboard::dataChanged, this, ClipboardManager::updateList);}private slots:void updateList() {const QClipboard *clipboard myApp-clipboard();const QMimeData *mimeData clipboard-mimeData();if (mimeData-hasText()) {const QString clipboardText mimeData-text();if (!clipboardText.isEmpty()) {listWidget-addItem(clipboardText);}}}void clearClipboard() {myApp-clipboard()-clear();listWidget-clear();}private:QListWidget *listWidget; };class MyMainWindow : public QWidget { Q_OBJECT public:explicit MyMainWindow(QWidget *parent nullptr) : QWidget(parent) {setWindowTitle(天河工具箱);auto *layout new QVBoxLayout(this);auto *clipboardButton new QPushButton(显示管理粘贴板记录功能);clipboardButton-setObjectName(clipboardButton);connect(clipboardButton, QPushButton::clicked, this, MyMainWindow::toggleClipboardManager);clipboardManager new ClipboardManager(this);clipboardManager-hide();layout-addWidget(clipboardManager);layout-addWidget(clipboardButton);auto *jsonFormatButton new QPushButton(显示格式化 JSON 功能);jsonFormatButton-setObjectName(jsonFormatButton);connect(jsonFormatButton, QPushButton::clicked, this, MyMainWindow::toggleJsonFormatter);jsonFormatter new JsonFormatter(this);jsonFormatter-hide();layout-addWidget(jsonFormatter);layout-addWidget(jsonFormatButton);auto *timestampConverterButton new QPushButton(显示时间戳转换功能);timestampConverterButton-setObjectName(timestampConverterButton);connect(timestampConverterButton, QPushButton::clicked, this, MyMainWindow::toggleDateTimeTimestampConverter);timestampConverter new DateTimeTimestampConverter(this);timestampConverter-hide();layout-addWidget(timestampConverter);layout-addWidget(timestampConverterButton);auto *numberBaseConverterButton new QPushButton(显示进制转换功能);numberBaseConverterButton-setObjectName(numberBaseConverterButton);connect(numberBaseConverterButton, QPushButton::clicked, this, MyMainWindow::toggleNumberBaseConverter);numberBaseConverter new NumberBaseConverter(this);numberBaseConverter-hide();layout-addWidget(numberBaseConverter);layout-addWidget(numberBaseConverterButton);auto *xmlFormatterButton new QPushButton(显示XML格式化功能);xmlFormatterButton-setObjectName(xmlFormatterButton);connect(xmlFormatterButton, QPushButton::clicked, this, MyMainWindow::toggleXmlFormatter);xmlFormatter new XmlFormatter(this);xmlFormatter-hide();layout-addWidget(xmlFormatter);layout-addWidget(xmlFormatterButton);auto *base64ConverterButton new QPushButton(显示Base64加解密功能);base64ConverterButton-setObjectName(base64ConverterButton);connect(base64ConverterButton, QPushButton::clicked, this, MyMainWindow::toggleBase64Converter);base64Converter new Base64Converter(this);base64Converter-hide();layout-addWidget(base64Converter);layout-addWidget(base64ConverterButton);auto *base64ImageConverterButton new QPushButton(显示Base64图片预览功能);base64ImageConverterButton-setObjectName(base64ImageConverterButton);connect(base64ImageConverterButton, QPushButton::clicked, this, MyMainWindow::toggleBase64ImageConverter);base64ImageConverter new Base64ImageConverter(this);base64ImageConverter-hide();layout-addWidget(base64ImageConverter);layout-addWidget(base64ImageConverterButton);auto *colorConverterButton new QPushButton(显示色值提取转换功能);colorConverterButton-setObjectName(colorConverterButton);connect(colorConverterButton, QPushButton::clicked, this, MyMainWindow::toggleColorConverter);colorConverter new ColorConverter(this);colorConverter-hide();layout-addWidget(colorConverter);layout-addWidget(colorConverterButton);setLayout(layout);}private slots:void toggleClipboardManager() {auto *curButton findChildQPushButton *(clipboardButton);if (clipboardManager-isHidden()) {if (curButton) {curButton-setText(隐藏管理粘贴板记录);}clipboardManager-show();} else {if (curButton) {curButton-setText(显示管理粘贴板记录);}clipboardManager-hide();}}void toggleJsonFormatter() {auto *curButton findChildQPushButton *(jsonFormatButton);if (jsonFormatter-isHidden()) {if (curButton) {curButton-setText(隐藏格式化 JSON);}jsonFormatter-show();} else {if (curButton) {curButton-setText(显示格式化 JSON);}jsonFormatter-hide();}}void toggleDateTimeTimestampConverter() {auto *curButton findChildQPushButton *(timestampConverterButton);if (timestampConverter-isHidden()) {if (curButton) {curButton-setText(隐藏时间戳转换);}timestampConverter-show();} else {if (curButton) {curButton-setText(显示时间戳转换);}timestampConverter-hide();}}void toggleNumberBaseConverter() {auto *curButton findChildQPushButton *(numberBaseConverterButton);if (numberBaseConverter-isHidden()) {if (curButton) {curButton-setText(隐藏进制转换器);}numberBaseConverter-show();} else {if (curButton) {curButton-setText(显示进制转换器);}numberBaseConverter-hide();}}void toggleXmlFormatter() {auto *curButton findChildQPushButton *(xmlFormatterButton);if (xmlFormatter-isHidden()) {if (curButton) {curButton-setText(隐藏XML格式化);}xmlFormatter-show();} else {if (curButton) {curButton-setText(显示XML格式化);}xmlFormatter-hide();}}void toggleBase64Converter() {auto *curButton findChildQPushButton *(base64ConverterButton);if (base64Converter-isHidden()) {if (curButton) {curButton-setText(隐藏Base64加解密功能);}base64Converter-show();} else {if (curButton) {curButton-setText(显示Base64加解密功能);}base64Converter-hide();}}void toggleBase64ImageConverter() {auto *curButton findChildQPushButton *(base64ImageConverterButton);if (base64ImageConverter-isHidden()) {if (curButton) {curButton-setText(隐藏Base64图片预览功能);}base64ImageConverter-show();} else {if (curButton) {curButton-setText(显示Base64图片预览功能);}base64ImageConverter-hide();}}void toggleColorConverter() {auto *curButton findChildQPushButton *(colorConverterButton);if (colorConverter-isHidden()) {if (curButton) {curButton-setText(隐藏色值提取转换功能);}colorConverter-show();} else {if (curButton) {curButton-setText(显示色值提取转换功能);}colorConverter-hide();}}private:ClipboardManager *clipboardManager;JsonFormatter *jsonFormatter;DateTimeTimestampConverter *timestampConverter;NumberBaseConverter *numberBaseConverter;XmlFormatter *xmlFormatter;Base64Converter *base64Converter;Base64ImageConverter *base64ImageConverter;ColorConverter *colorConverter; };int main(int argc, char *argv[]) {QApplication a(argc, argv);MyMainWindow mainWindow;mainWindow.show();return QApplication::exec(); }#include main.moc 想要了解这个小工具是如何发展到现在这个地步的话就看看往期文章吧~记得要多跑一跑代码。如果大家有什么想要的功能或者想问的问题的话就在评论区留言吧。Thanks♪(ω) 往期文章一览 C学习之路一什么是C如何循序渐进的学习C【纯干货】 C学习之路二C如何实现一个超简单的学生信息管理系统C示例和小项目实例 C学习之路三解析讲解超简单学生信息管理系统代码知识点 - 《根据实例学知识》 C学习之路四C 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解 C学习之路五C 实现简单的文件管理系统命令行应用 - 示例代码拆分讲解 C学习之路六C 实现简单的工具箱系统命令行应用 - 示例代码拆分讲解 C学习之路七C 实现简单的Qt界面消息弹框、按钮点击事件监听- 示例代码拆分讲解 C学习之路八C 用Qt5实现一个工具箱增加一个粘贴板记录管理功能- 示例代码拆分讲解 C学习之路九C 用Qt5实现一个工具箱增加一个JSON数据格式化功能- 示例代码拆分讲解 C学习之路十C 用Qt5实现一个工具箱增加一个时间戳转换功能- 示例代码拆分讲解 C学习之路十一C 用Qt5实现一个工具箱增加一个进制转换器功能- 示例代码拆分讲解 C学习之路十二C 用Qt5实现一个工具箱增加一个XML文本格式化功能- 示例代码拆分讲解 C学习之路十三C 用Qt5实现一个工具箱增加一个Base64加解密功能- 示例代码拆分讲解 C学习之路十四C 用Qt5实现一个工具箱增加一个Base64图片编码预览功能- 示例代码拆分讲解 好了~ 本文就到这里了感谢您的阅读每天还有更多的实例学习文章等着你 。别忘了点赞、收藏~ Thanks♪(ω) 。
http://www.zqtcl.cn/news/837191/

相关文章:

  • 如何查看域名以前是做什么网站的网站索引下降如何解决
  • 潜江 网站建设扬中话
  • 网站建设项目方案ppt广州建站模板平台
  • 房产部门成立网站免费seo推广软件
  • python做网站好处百度指数分析报告
  • 网站建设挣钱班级介绍网页制作模板
  • 工作室 网站建设app公司
  • 自己做的网站怎么在百度搜索到网页制作论文3000字
  • 如何网站托管中国跨境电商平台有多少
  • 手机p2p网站做平面设计兼职的网站有哪些
  • 贵金属网站建设唐山网站制作工具
  • 网站入门成都网站制作沈阳
  • 接做网站单子的网站做网站要会那些ps
  • 做盗市相关网站wordpress速度优化简书
  • 贵阳手机网站建设公司国内永久免费云服务器
  • 温州做网站定制哪家网络推广公司好
  • 招聘网站怎么做线下活动网站后台管理系统怎么开发
  • 西湖区外贸网站建设商梦建站
  • 网站首页设计注意斗蟋蟀网站建设
  • 石家庄网站建设远策科技网站建设公司人员配备
  • 手机怎么建网站链接专门做鞋子的网站吗
  • 网站建设设计作品怎么写网站建设 网站内容 采集
  • 自己做网站nas如何做网站大图片
  • 网站优化定做嘉兴模板建站代理
  • 南宁做网站比较好的公司有哪些花乡科技园区网站建设
  • 网站注册平台怎么注册申请空间 建立网站吗
  • 汕头住房与城乡建设网站做网站视频 上传到哪儿
  • 东莞网站关键词优化福建个人网站备案
  • 国外获奖flash网站泉州网站制作专业
  • 万网域名注册后如何做网站教学上海app开发和制作公司