qt学了半个月了,终于搞懂了基本的东西。

1 写ui界面,终于不是黑白的命令行了。

2 qt的信号槽机制以及qstring等与char,int,double的转化。

3 qt程序的打包发布。

看一下源码

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 #include<QString>
  4 
  5 
  6 char *q;
  7 int k=0;
  8 
  9 
 10 
 11 double biaodas();
 12 double xiang();
 13 double yinz()//求一个因子的值
 14 {
 15     double res = 0;
 16     char tem = q[k];
 17     if (tem == '(')//因子可能是一个括号包起来的表达式,递归到求表达式
 18     {
 19         k++;
 20         res = biaodas();
 21         k++;
 22     }
 23     else//计算出多个十进制数字符连续组成的数的大小
 24     {
 25         while (isdigit(tem))//判断tem是不是十进制的字符
 26         {
 27             res = res * 10 + tem - '0';
 28             k++;
 29             tem = q[k];
 30         }
 31         if (tem == '.')//判断有没有小数
 32         {
 33             double k1 = 10;
 34             k++;
 35             tem=q[k];
 36             while (isdigit(tem))
 37             {
 38                 res += (tem-'0') / k1;
 39                 k1 *= 10;
 40                 k++;
 41                 tem = q[k];
 42             }
 43         }
 44     }
 45     return res;
 46 }
 47 double xiang()//求一个多项式的值
 48 {
 49     double res = yinz();
 50     int flag = 1;
 51     while (flag)
 52     {
 53         char tem = q[k];
 54         if (tem == '*' || tem == '/')//判断乘除把多项式的求解分解为求多个因子的值
 55         {
 56            k++;
 57             double va = yinz();
 58             if (tem == '*')
 59                 res *= va;
 60             else
 61                 res /= va;
 62         }
 63         else flag = 0;
 64     }
 65     return res;
 66 }
 67 double biaodas()//求表达式的值
 68 {
 69     double res = xiang();
 70     int flag = 1;
 71     while (flag)
 72     {
 73         char tem = q[k];
 74         if (tem == '+' || tem == '-')//判断乘除把表达式的求解分解为求多多项式的值
 75         {
 76             k++;
 77             double va = xiang();
 78             if (tem == '+')
 79                 res += va;
 80             else
 81                 res -= va;
 82         }
 83         else flag = 0;
 84     }
 85     return res;
 86 }
 87 
 88 
 89 
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
100 
101 
102 
103 MainWindow::MainWindow(QWidget *parent) :
104     QMainWindow(parent),
105     ui(new Ui::MainWindow)
106 {
107     ui->setupUi(this);
108 }
109 QString str;
110 int i=0;
111 
112 MainWindow::~MainWindow()
113 {
114     delete ui;
115 }
116 
117 void MainWindow::on_pushButton_clicked()
118 {
119     char *p=str.toLatin1().data();
120     if(i==0)
121     {
122         str+='1';
123         i++;
124     }
125     else
126     {
127         if(p[i-1]==')');
128         else
129         {
130             str+='1';
131             i++;
132         }
133     }
134     ui->textBrowser->setText(str);
135 }
136 
137 void MainWindow::on_pushButton_2_clicked()
138 {
139     char *p=str.toLatin1().data();
140     if(i==0)
141     {
142         str+='2';
143         i++;
144     }
145     else
146     {
147         if(p[i-1]==')');
148         else
149         {
150             str+='2';
151             i++;
152         }
153     }
154     ui->textBrowser->setText(str);
155 }
156 
157 void MainWindow::on_pushButton_3_clicked()
158 {
159     char *p=str.toLatin1().data();
160     if(i==0)
161     {
162         str+='3';
163         i++;
164     }
165     else
166     {
167         if(p[i-1]==')');
168         else
169         {
170             str+='3';
171             i++;
172         }
173     }
174     ui->textBrowser->setText(str);
175 }
176 
177 void MainWindow::on_pushButton_4_clicked()
178 {
179     char *p=str.toLatin1().data();
180     if(i==0)
181     {
182         str+='4';
183         i++;
184     }
185     else
186     {
187         if(p[i-1]==')');
188         else
189         {
190             str+='4';
191             i++;
192         }
193     }
194     ui->textBrowser->setText(str);
195 }
196 
197 void MainWindow::on_pushButton_5_clicked()
198 {
199     char *p=str.toLatin1().data();
200     if(i==0)
201     {
202         str+='5';
203         i++;
204     }
205     else
206     {
207         if(p[i-1]==')');
208         else
209         {
210             str+='5';
211             i++;
212         }
213     }
214     ui->textBrowser->setText(str);
215 }
216 
217 void MainWindow::on_pushButton_6_clicked()
218 {
219     char *p=str.toLatin1().data();
220     if(i==0)
221     {
222         str+='6';
223         i++;
224     }
225     else
226     {
227         if(p[i-1]==')');
228         else
229         {
230             str+='6';
231             i++;
232         }
233     }
234     ui->textBrowser->setText(str);
235 }
236 
237 void MainWindow::on_pushButton_7_clicked()
238 {
239     char *p=str.toLatin1().data();
240     if(i==0)
241     {
242         str+='7';
243         i++;
244     }
245     else
246     {
247         if(p[i-1]==')');
248         else
249         {
250             str+='7';
251             i++;
252         }
253     }
254     ui->textBrowser->setText(str);
255 }
256 
257 void MainWindow::on_pushButton_8_clicked()
258 {
259     char *p=str.toLatin1().data();
260     if(i==0)
261     {
262         str+='8';
263         i++;
264     }
265     else
266     {
267         if(p[i-1]==')');
268         else
269         {
270             str+='8';
271             i++;
272         }
273     }
274     ui->textBrowser->setText(str);
275 }
276 
277 void MainWindow::on_pushButton_9_clicked()
278 {
279     char *p=str.toLatin1().data();
280     if(i==0)
281     {
282         str+='9';
283         i++;
284     }
285     else
286     {
287         if(p[i-1]==')');
288         else
289         {
290             str+='9';
291             i++;
292         }
293     }
294     ui->textBrowser->setText(str);
295 }
296 
297 void MainWindow::on_pushButton_10_clicked()
298 {
299     char *p=str.toLatin1().data();
300     if(i==0)
301     {
302         str+='.';
303         i++;
304     }
305     else
306     {
307         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='('||p[i]==')');
308         else
309         {
310             str+='.';
311             i++;
312         }
313     }
314     ui->textBrowser->setText(str);
315 }
316 
317 void MainWindow::on_pushButton_11_clicked()
318 {
319     char *p=str.toLatin1().data();
320     if(i==0)
321     {
322         str+='0';
323         i++;
324     }
325     else
326     {
327         if(p[i]==')');
328         else
329         {
330             str+='0';
331             i++;
332         }
333     }
334     ui->textBrowser->setText(str);
335 }
336 
337 void MainWindow::on_pushButton_12_clicked()
338 {
339     char *p=str.toLatin1().data();
340     if(i==0);
341     else
342     {
343         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='(');
344         else
345         {
346             str+='+';
347             i++;
348         }
349     }
350     ui->textBrowser->setText(str);
351 }
352 
353 void MainWindow::on_pushButton_13_clicked()
354 {
355     char *p=str.toLatin1().data();
356     if(i==0);
357     else
358     {
359         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='(');
360         else
361         {
362             str+='-';
363             i++;
364         }
365     }
366     ui->textBrowser->setText(str);
367 }
368 
369 void MainWindow::on_pushButton_14_clicked()
370 {
371     char *p=str.toLatin1().data();
372     if(i==0);
373     else
374     {
375         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='(');
376         else
377         {
378             str+='*';
379             i++;
380         }
381     }
382     ui->textBrowser->setText(str);
383 }
384 
385 void MainWindow::on_pushButton_15_clicked()
386 {
387     char *p=str.toLatin1().data();
388     if(i==0);
389     else
390     {
391         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i]=='(');
392         else
393         {
394             str+='/';
395             i++;
396         }
397     }
398     ui->textBrowser->setText(str);
399 }
400 
401 void MainWindow::on_pushButton_16_clicked()
402 {
403     char *p=str.toLatin1().data();
404     if(i==0)
405     {
406         str+='(';
407         i++;
408     }
409     else
410     {
411         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/')
412         {
413             str+='(';
414             i++;
415         }
416     }
417     ui->textBrowser->setText(str);
418 }
419 
420 void MainWindow::on_pushButton_17_clicked()
421 {
422     char *p=str.toLatin1().data();
423     if(i==0)
424     {
425         str+=')';
426         i++;
427     }
428     else
429     {
430         if(p[i-1]=='+'||p[i-1]=='-'||p[i-1]=='*'||p[i-1]=='/'||p[i-1]=='.'||p[i-1]=='('||p[i-1]==')');
431         else
432         {
433             str+=')';
434             i++;
435         }
436     }
437     ui->textBrowser->setText(str);
438 }
439 
440 void MainWindow::on_pushButton_18_clicked()
441 {
442     str.chop(1);
443     i--;
444     ui->textBrowser->setText(str);
445 }
446 
447 void MainWindow::on_pushButton_19_clicked()
448 {
449     q=str.toLatin1().data();
450     k=0;
451     QString str2=QString("%1").arg(biaodas());
452     ui->textBrowser->setText(str2);
453     i=0;
454     str.clear();
455 }

其实关键算法还是之前的递归求多项式,只是把从那个黑白控制台输入的表达式换成了一个字符数组q,先用button把多项式输入进qstring类型的str,然后利用q=str.toLatin1().data()把str转化

为字符数组q,接着就是递归求表达式了。

程序写好之后还要进行打包,在qt的命令行中输入windeployqt xxxx.exe即可把程序的资源文件复制到程序目录下,大概就是这样了。

 

最后附上程序

链接:https://pan.baidu.com/s/1o9z37OA

密码:5dtb