网站焦点图制作教程,市场调研报告包括哪些内容,票务网站模板,权威的顺德网站建设上篇文章#xff0c;我们用 Qt5 实现了在小工具箱中添加了《时间戳转换功能》功能。为了继续丰富我们的工具箱#xff0c;今天我们就再增加一个平时经常用到的功能吧#xff0c;就是「 进制转换 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具…上篇文章我们用 Qt5 实现了在小工具箱中添加了《时间戳转换功能》功能。为了继续丰富我们的工具箱今天我们就再增加一个平时经常用到的功能吧就是「 进制转换 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具箱中吧。
老规矩先看效果 本次功能概述
这个程序是一个数字进制转换器它能够将输入的数字按照不同的进制进行转换并显示出转换后的结果。 界面布局界面上分为两个排列方式不同的部分。第一个部分包含一个输入框和一个下拉选择框它们水平排列。输入框接受用户输入数字下拉选择框则用于选择转换后的进制。第二部分包含四个输出框垂直排列用于显示转换后的结果。 槽函数与转换当用户在输入框中输入数字或者选择不同的进制时程序会触发convertNumber函数。这个函数根据用户输入和选择的进制进行转换。根据不同的进制选择程序会采取不同的转换方法包括二进制、八进制、十进制和十六进制。 实时更新输入框的内容一旦发生变化就会实时计算出对应的四个输出框的结果。这种实时更新让用户能够方便地观察不同进制之间的转换关系。 清空功能如果用户清空了输入框的内容四个输出框也会相应地清空避免显示错误的转换结果。
这个程序实现了简单的数字进制转换功能并提供了实时更新和清空功能使用户能够方便地在不同进制之间进行转换和比较。
核心代码实现
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;
};伸手党福利时间上完整代码
#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#define myApp (dynamic_castQApplication *(QCoreApplication::instance()))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);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();}}private:ClipboardManager *clipboardManager;JsonFormatter *jsonFormatter;DateTimeTimestampConverter *timestampConverter;NumberBaseConverter *numberBaseConverter;
};int main(int argc, char *argv[]) {QApplication a(argc, argv);MyMainWindow mainWindow;mainWindow.show();return QApplication::exec();
}#include main.moc拆分讲解
本次核心代码相对好理解一些就不逐段讲解了就只贴出来我们用到的相关控件函数吧。
控件介绍
QVBoxLayout垂直布局管理器用于垂直排列子部件。QHBoxLayout水平布局管理器用于水平排列子部件。QLineEdit单行文本输入框用于输入文本。QComboBox下拉选择框提供一个可选择的下拉列表。QPushButton按钮控件用于触发特定操作或槽函数。connect()QT中的信号与槽机制用于连接信号和槽函数当信号被触发时相关的槽函数将被执行。
函数方法介绍
QHBoxLayout::addWidget()将子部件添加到水平布局中。QVBoxLayout::addWidget()将子部件添加到垂直布局中。QComboBox::addItem()向下拉选择框添加选项。QLineEdit::setReadOnly()设置文本输入框为只读模式。QLineEdit::clear()清空文本输入框中的内容。QComboBox::currentIndex()获取当前选择的下拉列表索引。QString::toInt()将字符串转换为整数可以指定进制。QString::number()将数字转换为字符串可以指定进制。QString::toUpper()将字符串转换为大写形式。
这些控件和函数方法是用于构建数字进制转换器的基础组件和功能。通过这些控件和方法可以实现用户输入数字和选择进制然后进行相应进制的转换并在界面上显示转换结果。 讲解完毕复制代码后开始运行调试吧~ 好了~ 本文就到这里了感谢您的阅读每天还有更多的实例学习文章等着你 。别忘了点赞、收藏~ Thanks♪(ω) 。 文章转载自: http://www.morning.lxqyf.cn.gov.cn.lxqyf.cn http://www.morning.ywtbk.cn.gov.cn.ywtbk.cn http://www.morning.gnbtp.cn.gov.cn.gnbtp.cn http://www.morning.lqgfm.cn.gov.cn.lqgfm.cn http://www.morning.tmrjb.cn.gov.cn.tmrjb.cn http://www.morning.tkxr.cn.gov.cn.tkxr.cn http://www.morning.mqxzh.cn.gov.cn.mqxzh.cn http://www.morning.kycwt.cn.gov.cn.kycwt.cn http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.rqqct.cn.gov.cn.rqqct.cn http://www.morning.qgwpx.cn.gov.cn.qgwpx.cn http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.qnftc.cn.gov.cn.qnftc.cn http://www.morning.pymff.cn.gov.cn.pymff.cn http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.mslhq.cn.gov.cn.mslhq.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn http://www.morning.gthwr.cn.gov.cn.gthwr.cn http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.msfqt.cn.gov.cn.msfqt.cn http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.grxsc.cn.gov.cn.grxsc.cn http://www.morning.hbnwr.cn.gov.cn.hbnwr.cn http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn http://www.morning.nlgyq.cn.gov.cn.nlgyq.cn http://www.morning.txzmy.cn.gov.cn.txzmy.cn http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn http://www.morning.c7623.cn.gov.cn.c7623.cn http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn http://www.morning.zsgbt.cn.gov.cn.zsgbt.cn http://www.morning.qcfcz.cn.gov.cn.qcfcz.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn http://www.morning.qshxh.cn.gov.cn.qshxh.cn http://www.morning.thxfn.cn.gov.cn.thxfn.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.ntkpc.cn.gov.cn.ntkpc.cn http://www.morning.krgjc.cn.gov.cn.krgjc.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.kwnnx.cn.gov.cn.kwnnx.cn http://www.morning.rdlxh.cn.gov.cn.rdlxh.cn http://www.morning.bwnd.cn.gov.cn.bwnd.cn http://www.morning.wffxr.cn.gov.cn.wffxr.cn http://www.morning.rnjgh.cn.gov.cn.rnjgh.cn http://www.morning.mspqw.cn.gov.cn.mspqw.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn http://www.morning.zzaxr.cn.gov.cn.zzaxr.cn http://www.morning.wpwyx.cn.gov.cn.wpwyx.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn http://www.morning.knmby.cn.gov.cn.knmby.cn http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn