QDateTime rechnen
-
Hallo
Ich versuche mit 2 QDateTime zu rechnen. Leider bekomme ich immer Fehlermeldung.
QDateTime time_start= QDateTime::currentDateTime(); QDateTime time_stop=QDateTime::fromString("Mo 12.12.2011 20:59:03","ddd dd.MM.yyyy hh:mm:ss") QDateTime time_dif=time_stop-time_start; QString text_dif; text_dif.setNum(time_dif, 'f', 3); ui->label->setText(text_dif);
Fehler:no match for 'operator-' in 'time_alt - time'
Fehler:no matching function for call to 'QString::setNum(QDateTime&, char, int)'Gruss Sascha
-
Eine QDateTime-Instanz repräsentiert einen Zeitpunkt. Das passt nicht zu "Differenz zweier Zeitpunkte als QDateTime darstellen", oder?
Du suchst (je nach gewünschter Genauigkeit) QDateTime::daysTo(), secsTo() oder msecsTo().
-
Hallo
Ist das richtig so?QDateTime last(QDateTime::fromString("Di 13.12.2011 22:00:00","ddd dd.MM.yyyy hh:mm:ss")); QDateTime now = QDateTime::currentDateTime(); ui->label->setText(text); ui->label_2->setText(text_alt); ui->label_3->setText(QString("%1").arg(double(last.secsTo(now))/3600,0,'f',2));
-
isensa schrieb:
Hallo
Ist das richtig so?Keine Ahnung, kommt drauf an was du erreichen willst!
Anzahl Sekunden / 60 = Anzahl Minuten.
Anzahl Minuten / 60 = Anzahl Stunden.
Wenn du also die Anzahl der vergangenen Stunden anzeigen willst, ist das richtig.
Mit den Sekunden kannst du aber auch wunderbar eine formatierte Ausgabe ala "22 Stunden, 4 Minuten, 33 Sekunden" o.Ä. machen. Eine freie Funktion würde sich dazu doch anbietenDann musst du nicht immer "in place" umrechnen.
-
hallo
Die Berechnung ist für den Moment ok. Mit Funktionen muss ich mich erst noch rein denken. Bei VB Net geht das einfacher als bei Qt (c++).Gruss
Sascha
-
Hallo
In einem Textfile habe ich verschiedene Werte eingetragen. Die möchte ich Auslesen und Berechnen. Mein Problem ist die Werte zu Trennen und in ein Array zu speichen oder wird das anderst gelöst?QString fileName="time.txt"; Datei öffnen QFile file(fileName); file.open(QIODevice::ReadOnly | QIODevice::Text); // Als Text-Datei nur zum Lesen öffnen ui->textEdit->setText(file.readAll()); // Datei komplett auslesen und in das TextEdit setzen // array speichern ..... file.close(); // Datei wieder schließen
time.txt
Di 13.12.2011 07:30
Di 13.12.2011 09:00
Di 13.12.2011 09:15
Di 13.12.2011 12:00
Di 13.12.2011 13:00
Di 13.12.2011 17:00
-
Hallo
Irgendwie drehe ich mich im Kreis.
Ich bekomme immer 0 im Array.
QFile file("time.txt");
QDataStream inputStream(&file);
QStringList array;
QString temp;if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;while(!inputStream.atEnd()) {
inputStream >> temp;
array << temp.split(";");
}ui->textEdit->setText((QString)array.count());
Und wenn ich das Array direkt Anspreche, bekomme ich keinen Inhalt.
ui->textEdit->setText((QString)array[0]);
-
array << temp.split(";");
time.txt
Di 13.12.2011 07:30
Di 13.12.2011 09:00
Di 13.12.2011 09:15
Di 13.12.2011 12:00
Di 13.12.2011 13:00
Di 13.12.2011 17:00Das passt für mich nicht zusammen
Dann würde ich readLine nehmen und das Zeile für Zeile splitten.[Edit]
ui->textEdit->setText((QString)array[0]);
Was soll das sein?
Wie wäre es mit:
foreach(const QString &text, array) ui->textEdit->setText(text);
-
Hallo
Werde ich ausprobieren. Nur eins verstehe ich noch nicht. Wie kann ich die einzelnen Zeiten
(z.b. zeile3 - zeile2) rechnen? Array[2]-array[1] oder geht das anderst? mir gehts nur um die Werte auszulesen.
-
Ich weiß zwar nicht genau was Du mit QDateTime berechnen willst aber als start kann ich Dir das bieten:
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include "ui_mainwindow.h" #include <QtCore/QDateTime> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); protected: void changeEvent(QEvent *e); private slots: void on_pushButton_clicked(); private: void readFile(const QString &filename); Ui::MainWindow ui; QList<QDateTime> m_dateTime; }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include <QtCore/QDebug> #include <QtGui/QFileDialog> #include <QtCore/QFile> #include <QtCore/QTextStream> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); } void MainWindow::changeEvent(QEvent *e) { QMainWindow::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui.retranslateUi(this); break; default: break; } } void MainWindow::on_pushButton_clicked() { QString filename = QFileDialog::getOpenFileName(this, trUtf8("Time Datei öffnen"), QString(), trUtf8("Text Datei (*.txt)")); if(filename.isEmpty()) return; ui.lineEdit->setText(filename); readFile(filename); } void MainWindow::readFile(const QString &filename) { QFile file(filename); if(!file.open(QIODevice::ReadOnly|QIODevice::Text)) return; QTextStream in(&file); while(!in.atEnd()){ QString line = in.readLine(); line = line.simplified(); ui.textEdit->append(line); QDateTime dt = QDateTime::fromString(line, "ddd dd.MM.yyyy HH:mm"); m_dateTime.append(dt); } qDebug() << m_dateTime; }
Jetzt hast Du in m_dateTime die Liste mit den QDateTime's.
Vielleich hilft es ir weiter.
-
Hallo
Merci für den Code.Wie bekomme ich nur ein Datum aus der Liste?
qDebug() << m_dateTime.count(); // gibt 6 aus. soviel Einträge habe ich qDebug() << m_dateTime.at(1).toString(); gibt ""
aber so bekomme ich keinen Wert.
-
Schau mal hier. Also so wie Du es einliest:
entweder so:
foreach(const QDateTime &dt, m_dateTime) qDebug() << dt.toString("ddd dd.MM.yyyy HH:mm");
oder so:
for (int i=0; i<m_dateTime.size(); ++i) qDebug() << m_dateTime.at(i).toString("ddd dd.MM.yyyy HH:mm");
-
Bei mir geht das irgendwie nicht. Im textedit wird zwar angezeigt aber einzeln aufrufen für die Berechnung bekomme ich nicht hin. Ich habe noch ein zusätzliches textEdit_3 versucht die Daten anzuzeigen. Auch das bleibt leer.
Beim qDebug wird jeweils "" angezeigt.void MainWindow::readFile(const QString &filename) { QFile file(filename); if(!file.open(QIODevice::ReadOnly|QIODevice::Text)) return; QTextStream in(&file); while(!in.atEnd()){ QString line = in.readLine(); line = line.simplified(); ui.textEdit->append(line); QDateTime dt = QDateTime::fromString(line, "ddd dd.MM.yyyy HH:mm"); m_dateTime.append(dt); s_dateTime.append(dt.toString()); } qDebug() << m_dateTime; qDebug() << m_dateTime.count(); qDebug() << m_dateTime.at(2).toString("ddd dd.MM.yyyy HH:mm"); for (int i=0; i<m_dateTime.size(); ++i) ui.textEdit_3->setText(m_dateTime.at(i).toString("ddd dd.MM.yyyy HH:mm")); }
-
Also ich habe das hier getestet, sollte also gehen. Zeig mal die Ausgabe von "qDebug() << m_dateTime; ". Was soll "s_dateTime.append(dt.toString());" sein? Füge mal "qDebug() << dt;" in die While Schleife und zeige die Ausgabe. Nicht das Du leere QDateTime's in der Liste hast!
Ich habe es getestet mit einer Datei:
Di 13.12.2011 07:30 Di 13.12.2011 09:00 Di 13.12.2011 09:15 Di 13.12.2011 12:00 Di 13.12.2011 13:00 Di 13.12.2011 17:00
Die zusätzlichen Leerzeichen habe ich mit Absicht rein gemacht um zu testen ob es auch Whitespace unabhängig funktioniert!!!
-
jetzt geht. Nur kann ich das nicht nachvollziehen wo der Fehler gewesen ist.
Ich vermute Dateiformat. Aber das hatte ich auch schon paar mal kontrolliert.
Besten Dank