文章目录

一、UI设计

新建项目,主要选项如下图:一个QWidget,带ui文件,并初步Ui设计

拖动组件:QLable,QPushButton,QlineEdit。

Qt(六)数值与字符串转换_#include


详情ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>511</width>
<height>203</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>数量:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEditNum">
<property name="text">
<string>12</string>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>17</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_2">
<property name="text">
<string>单价:</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLineEdit" name="lineEditPrice">
<property name="text">
<string>5.0</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>计算</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_3">
<property name="text">
<string>总价:</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLineEdit" name="lineEditTotal"/>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>9</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<widget class="QLineEdit" name="lineEditTen">
<property name="text">
<string>15</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>转换成其他进制</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>转换成其他进制</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>二进制:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEditHex"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>十六进制:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>转换成其他进制</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEditSec"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>十进制:</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

二、代码开发

代码使用“转到槽“生成代码
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
Q_OBJECT

public:
Widget(QWidget *parent = nullptr);
~Widget();

private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();

private:
Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}

Widget::~Widget()
{
delete ui;
}


void Widget::on_pushButton_clicked()
{
QString str = ui->lineEditNum->text();
int num = str.toInt();

str = ui->lineEditPrice->text();
float price = str.toFloat();
float total = num * price;

str = str.setNum(total,'f', 2);
ui->lineEditTotal->setText(str);
}

void Widget::on_pushButton_2_clicked()
{
QString str = ui->lineEditTen->text();
int value = str.toInt();
str = str.setNum(value,2);
ui->lineEditSec->setText(str);

str = str.setNum(value,16);
ui->lineEditHex->setText(str.toUpper());
}

void Widget::on_pushButton_3_clicked()
{
QString str = ui->lineEditSec->text();
bool ok;
int value = str.toInt(&ok, 2); // 以二进制方式读入
ui->lineEditTen->setText(QString::number(value));
ui->lineEditHex->setText(QString::number(value,16).toUpper());
}

void Widget::on_pushButton_4_clicked()
{
QString str = ui->lineEditHex->text();
bool ok;
int value = str.toInt(&ok, 16); // 以十六进制方式读入
ui->lineEditTen->setText(QString::number(value));
ui->lineEditSec->setText(QString::number(value, 2));
}

三、演示效果

这里没有做容错处理,在输入字符时特别是:二进制只能是:01,十六进制只能是:0-9A-F。

Qt(六)数值与字符串转换_十六进制_02