2014-02-27 30 views
0

我想将QString的转换在QLineEdit的使用QList作,以便它可以执行计算并显示在QMessageBox提示结果翻番转换QString的。如果我能得到一些关于如何做到这一点的建议,那就太好了。使用的QList翻番

#include <QtGui> 
#include <QList> 

#include <iostream> 

int main (int argc, char* argv[]) 
{ 
    QApplication app(argc, argv); 
    QTextStream cout(stdout); 

    bool ok; 
    double answer; 

    do 
    { 
     QString mark = QInputDialog::getText(NULL ,"MarkCalc","Enter Mark:", QLineEdit::Normal,"", &ok); 

     if (ok && !mark.isEmpty())  
      QList <QString> list; 

     double am = (mark * 0.20)+(mark * 0.50)+(mark * 0.30); 
     double ym = am * 0.20; 
     double em = 75 * 0.40; 
     double fm = em + ym; 

     if (em <= 40 && fm >= 50) 
      cout <<"pass"; 
     else 
      cout << "fail"; 

     QString response = QString("Your Final Mark: %1 \n\n%5").arg(ym).arg(em); 
     answer = QMessageBox::question(0, "Final Marks", response,QMessageBox::Yes | QMessageBox::No); 
    } while (answer == QMessageBox::Yes); 

    return 0; 
} 
+0

5 QString的( “您的最终成绩:%1 \ n \ n%5”)。ARG(YM).arg(EM)当你只有2个参数? – drescherjm

+0

他们作为标记输入什么内容?这是用逗号分隔的单个值还是多个值?或者是其他东西? – drescherjm

+0

这将是由commas.I分隔3个值需要在QString的固定%5。我对QT很新,只用了一个星期。 – user1291092

回答

0

下面是一个例子取从OP代码和分裂的QString到QStringList中然后使用的foreach遍历列表列表中的转换的每个的QString为双然后打印双重使用COUT:

#include <QtGui> 
#include <QtCore> 
#include <QtWidgets> 


int main (int argc, char* argv[]) { 
    QApplication app(argc, argv); 
    QTextStream cout(stdout); 

    bool ok; 
    double answer; 

    do{ 

     QString mark = QInputDialog::getText(NULL ,"MarkCalc","Enter Mark:", QLineEdit::Normal,"", &ok); 

     if (ok && !mark.isEmpty()) { 

      QStringList list = mark.split(","); 

      foreach(QString str, list) { 
       double d = str.toDouble(); 
       cout << d << endl; 
      } 


//   double am = (mark * 0.20)+(mark * 0.50)+(mark * 0.30); 
//   double ym = am * 0.20; 
//   double em = 75 * 0.40; 
//   double fm = em + ym; 
//   if (em <= 40 && fm >= 50) 
//    cout <<"pass"; 
//   else 
//    cout << "fail"; 


//   QString response = QString("Your Final Mark: %1 \n\n%5").arg(ym).arg(em); 
//   answer = QMessageBox::question(0, "Final Marks", response,QMessageBox::Yes | QMessageBox::No); 
     } 
    } while (answer == QMessageBox::Yes); 


    return 0; 
} 

下面的行拆分的QString成使用用于分裂逗号一个QStringList中。

QStringList list = mark.split(","); 

之后,我使用foreach遍历QStringList中一个字符串每次打开一个字符串转换为一张双人床和输出每个双重双一行:你为什么要使用%

foreach(QString str, list) { 
    double d = str.toDouble(); 
    cout << d << endl; 
} 
+0

我在Qt5.2上测试了这个代码,使用Qt 5.2.1 for Windows 32位(MinGW 4.8,OpenGL,634 MB)下载http:// qt-project。组织/下载 – drescherjm

+0

我测试了我的Qt 4.7.0版本(32位)上的代码。我删除了qt小部件,它工作。因此,就计算部分而言,以我的方式,更好的方法是做什么。 am =作业标记,ym =年份标记,em =考试标记,fm =最终标记。 – user1291092

+0

你可以做的一件事是做一个QList 得分;在foreach之前。然后,而不是“cout << d << endl;”将d插入分数列表。然后在foreach循环之后使用score [0],得分[1] ...作为你的分数。您需要在此处进行一些检查以确保用户输入了3个数字。另请参阅QString :: toDouble()的文档。有一个可选的指向bool的指针,可用于验证传递的是一个数字。 – drescherjm