界面:
功能:
输入单价和数量,计算总价;进制转换
控件:
- Qlabel
- QLineEdit
- QPushButton
文件依赖关系图(depend on):
- main.cpp:程序入口
- widget.h:窗体类头文件,定义了widget类
- widget.cpp:widget类的功能实现
- widget.ui:UI设计器生成的程序界面,存储了窗体上各组件的属性,设置,布局,信号——槽关联等
- ui_widget.h:由widget.ui编译而成
内部依赖关系图(dependency graphs):
箭头上的数字表示指向的对象在该文件中出现的次数,反应了文件之间的调用和依赖关系
文件调用图(Butterfly):
- 红色方框代表代码文件,蓝色方框代表头定义文件,灰色八边形框是Qt自带的类
函数调用图(cluster call graph):
UML图(UML Class Diagram):
- 上面是方法,下面是属性
- +是公有,-是私有
源码:
main.cpp
1 #include "widget.h" 2 #include <QApplication> 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv); 7 Widget w; 8 w.show(); 9 10 return a.exec(); 11 }
widget.h
1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 6 namespace Ui { 7 class Widget; 8 } 9 10 class Widget : public QWidget 11 { 12 Q_OBJECT 13 14 public: 15 explicit Widget(QWidget *parent = 0); 16 ~Widget(); 17 18 private slots: 19 void on_btnCal_clicked(); //计算 按键单击响应 20 21 void on_btnDec_clicked(); //十进制转换为其他进制 22 23 void on_btnBin_clicked(); //二进制转换为其他进制 24 25 void on_btnHex_clicked(); //十六进制转换为其他进制 26 27 private: 28 Ui::Widget *ui; 29 }; 30 31 #endif // WIDGET_H
widget.cpp
1 #include "widget.h" 2 #include "ui_widget.h" 3 #include <QString> 4 5 Widget::Widget(QWidget *parent) : 6 QWidget(parent), 7 ui(new Ui::Widget) 8 { 9 ui->setupUi(this); 10 } 11 12 Widget::~Widget() 13 { 14 delete ui; 15 } 16 17 void Widget::on_btnCal_clicked() 18 { //计算 按键单击响应 19 int num=ui->editNum->text().toInt(); //读取字符串为整数 20 float price=ui->editPrice->text().toFloat();//读取字符串为浮点数 21 22 float total=num*price;//相乘计算 23 QString str; 24 // str=str.setNum(total,'f',2); //浮点数2位小数 25 str=str.sprintf("%.2f",total); //格式化输出浮点数 26 ui->editTotal->setText(str);//在文本框里显示 27 } 28 29 void Widget::on_btnDec_clicked() 30 { //读取十进制数,转换为其他进制 31 int val=ui->editDec->text().toInt();//读取十进制数 32 QString str=QString::number(val,16);// 显示为16进制 的字符串 33 34 str=str.toUpper(); //转换为全大写字母 35 ui->editHex->setText(str);//显示16进制字符串 36 37 str=QString::number(val,2);// 显示2进制的字符串 38 ui->editBin->setText(str);//显示二进制字符串 39 } 40 41 void Widget::on_btnBin_clicked() 42 { //读取二进制数,转换为其他进制的数 43 bool ok; 44 45 int val=ui->editBin->text().toInt(&ok,2);//以二进制数读入 46 47 QString str=QString::number(val,10);//数字显示为10进制字符串 48 ui->editDec->setText(str);//显示10进制数字符串 49 50 str=QString::number(val,16);//显示为十六进制字符串 51 str=str.toUpper(); //全大写字母 52 ui->editHex->setText(str);//显示十六进制字符串 53 } 54 55 void Widget::on_btnHex_clicked() 56 {//读取16进制数,转换为其他进制的数 57 bool ok; 58 59 int val=ui->editHex->text().toInt(&ok,16);//以十六进制数读入 60 QString str=QString::number(val,10);// 显示为10进制字符串 61 ui->editDec->setText(str);//显示为10进制字符串 62 63 str=QString::number(val,2);// 显示二进制字符串 64 ui->editBin->setText(str);//显示二进制字符串 65 }
-
为什么#include <QString>不加.h?因为Qt的类已经被打包成标准库了,不在.h文件中
- 为什么要#include "widget.h"?下文中实例化了widget类,使用前定义,否则声明
ui_widget.h
1 #ifndef UI_WIDGET_H
2 #define UI_WIDGET_H
3
4 #include <QtCore/QVariant>
5 #include <QtWidgets/QAction>
6 #include <QtWidgets/QApplication>
7 #include <QtWidgets/QButtonGroup>
8 #include <QtWidgets/QGridLayout>
9 #include <QtWidgets/QHeaderView>
10 #include <QtWidgets/QLabel>
11 #include <QtWidgets/QLineEdit>
12 #include <QtWidgets/QPushButton>
13 #include <QtWidgets/QSpacerItem>
14 #include <QtWidgets/QVBoxLayout>
15 #include <QtWidgets/QWidget>
16
17 QT_BEGIN_NAMESPACE
18
19 class Ui_Widget
20 {
21 public:
22 QVBoxLayout *verticalLayout;
23 QGridLayout *gridLayout;
24 QLineEdit *editNum;
25 QLineEdit *editTotal;
26 QLabel *label_3;
27 QPushButton *btnCal;
28 QLabel *label;
29 QSpacerItem *horizontalSpacer;
30 QLineEdit *editPrice;
31 QLabel *label_2;
32 QSpacerItem *verticalSpacer;
33 QGridLayout *gridLayout_2;
34 QLabel *label_6;
35 QLineEdit *editDec;
36 QPushButton *btnDec;
37 QLabel *label_7;
38 QLineEdit *editBin;
39 QPushButton *btnBin;
40 QLabel *label_8;
41 QLineEdit *editHex;
42 QPushButton *btnHex;
43
44 void setupUi(QWidget *Widget)
45 {
46 if (Widget->objectName().isEmpty())
47 Widget->setObjectName(QStringLiteral("Widget"));
48 Widget->resize(330, 189);
49 QFont font;
50 font.setFamily(QString::fromUtf8("345256213344275223"));
51 font.setPointSize(10);
52 Widget->setFont(font);
53 verticalLayout = new QVBoxLayout(Widget);
54 verticalLayout->setSpacing(6);
55 verticalLayout->setContentsMargins(11, 11, 11, 11);
56 verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
57 gridLayout = new QGridLayout();
58 gridLayout->setSpacing(6);
59 gridLayout->setObjectName(QStringLiteral("gridLayout"));
60 editNum = new QLineEdit(Widget);
61 editNum->setObjectName(QStringLiteral("editNum"));
62
63 gridLayout->addWidget(editNum, 0, 1, 1, 1);
64
65 editTotal = new QLineEdit(Widget);
66 editTotal->setObjectName(QStringLiteral("editTotal"));
67
68 gridLayout->addWidget(editTotal, 1, 4, 1, 1);
69
70 label_3 = new QLabel(Widget);
71 label_3->setObjectName(QStringLiteral("label_3"));
72
73 gridLayout->addWidget(label_3, 1, 3, 1, 1);
74
75 btnCal = new QPushButton(Widget);
76 btnCal->setObjectName(QStringLiteral("btnCal"));
77
78 gridLayout->addWidget(btnCal, 1, 1, 1, 1);
79
80 label = new QLabel(Widget);
81 label->setObjectName(QStringLiteral("label"));
82
83 gridLayout->addWidget(label, 0, 0, 1, 1);
84
85 horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
86
87 gridLayout->addItem(horizontalSpacer, 1, 2, 1, 1);
88
89 editPrice = new QLineEdit(Widget);
90 editPrice->setObjectName(QStringLiteral("editPrice"));
91
92 gridLayout->addWidget(editPrice, 0, 4, 1, 1);
93
94 label_2 = new QLabel(Widget);
95 label_2->setObjectName(QStringLiteral("label_2"));
96
97 gridLayout->addWidget(label_2, 0, 3, 1, 1);
98
99
100 verticalLayout->addLayout(gridLayout);
101
102 verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
103
104 verticalLayout->addItem(verticalSpacer);
105
106 gridLayout_2 = new QGridLayout();
107 gridLayout_2->setSpacing(6);
108 gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
109 label_6 = new QLabel(Widget);
110 label_6->setObjectName(QStringLiteral("label_6"));
111
112 gridLayout_2->addWidget(label_6, 0, 0, 1, 1);
113
114 editDec = new QLineEdit(Widget);
115 editDec->setObjectName(QStringLiteral("editDec"));
116
117 gridLayout_2->addWidget(editDec, 0, 1, 1, 1);
118
119 btnDec = new QPushButton(Widget);
120 btnDec->setObjectName(QStringLiteral("btnDec"));
121
122 gridLayout_2->addWidget(btnDec, 0, 2, 1, 1);
123
124 label_7 = new QLabel(Widget);
125 label_7->setObjectName(QStringLiteral("label_7"));
126
127 gridLayout_2->addWidget(label_7, 1, 0, 1, 1);
128
129 editBin = new QLineEdit(Widget);
130 editBin->setObjectName(QStringLiteral("editBin"));
131
132 gridLayout_2->addWidget(editBin, 1, 1, 1, 1);
133
134 btnBin = new QPushButton(Widget);
135 btnBin->setObjectName(QStringLiteral("btnBin"));
136
137 gridLayout_2->addWidget(btnBin, 1, 2, 1, 1);
138
139 label_8 = new QLabel(Widget);
140 label_8->setObjectName(QStringLiteral("label_8"));
141
142 gridLayout_2->addWidget(label_8, 2, 0, 1, 1);
143
144 editHex = new QLineEdit(Widget);
145 editHex->setObjectName(QStringLiteral("editHex"));
146
147 gridLayout_2->addWidget(editHex, 2, 1, 1, 1);
148
149 btnHex = new QPushButton(Widget);
150 btnHex->setObjectName(QStringLiteral("btnHex"));
151
152 gridLayout_2->addWidget(btnHex, 2, 2, 1, 1);
153
154
155 verticalLayout->addLayout(gridLayout_2);
156
157
158 retranslateUi(Widget);
159
160 QMetaObject::connectSlotsByName(Widget);
161 } // setupUi
162
163 void retranslateUi(QWidget *Widget)
164 {
165 Widget->setWindowTitle(QApplication::translate("Widget", "345255227347254246344270262344270216350276223345205245350276223345207272", Q_NULLPTR));
166 editNum->setText(QApplication::translate("Widget", "12", Q_NULLPTR));
167 label_3->setText(QApplication::translate("Widget", "346200273 344273267", Q_NULLPTR));
168 btnCal->setText(QApplication::translate("Widget", "350256241347256227", Q_NULLPTR));
169 label->setText(QApplication::translate("Widget", "346225260 351207217", Q_NULLPTR));
170 editPrice->setText(QApplication::translate("Widget", "5.3", Q_NULLPTR));
171 label_2->setText(QApplication::translate("Widget", "345215225 344273267", Q_NULLPTR));
172 label_6->setText(QApplication::translate("Widget", "345215201 350277233 345210266", Q_NULLPTR));
173 editDec->setInputMask(QString());
174 editDec->setText(QApplication::translate("Widget", "12", Q_NULLPTR));
175 btnDec->setText(QApplication::translate("Widget", "350275254346215242344270272345205266344273226350277233345210266", Q_NULLPTR));
176 label_7->setText(QApplication::translate("Widget", "344272214 350277233 345210266", Q_NULLPTR));
177 editBin->setInputMask(QString());
178 btnBin->setText(QApplication::translate("Widget", "350275254346215242344270272345205266344273226350277233345210266", Q_NULLPTR));
179 label_8->setText(QApplication::translate("Widget", "345215201345205255350277233345210266", Q_NULLPTR));
180 editHex->setInputMask(QString());
181 btnHex->setText(QApplication::translate("Widget", "350275254346215242344270272345205266344273226350277233345210266", Q_NULLPTR));
182 } // retranslateUi
183
184 };
185
186 namespace Ui {
187 class Widget: public Ui_Widget {};
188 } // namespace Ui
189
190 QT_END_NAMESPACE
191
192 #endif // UI_WIDGET_H
注意:
- Widget类有两个,一个是命名空间UI中的,在widget.h中声明,ui_widget.h中定义。在widget.h中定义的widget可以通过指针ui(UI::Widget *ui)访问界面组件
- setupUI():
- 创建界面组件
- 调用retranslateUi(),设置各组件文字内容属性
- 设置信号槽关联