crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Цикл по датам
Гость_OlejOK_*
сообщение 5.2.2019, 13:43
Сообщение #1





Гости








    


Как можно сделать цикл от даты которую беру в dateEdit до даты которую беру в dateEdit_2 ?
Если увеличивать значение в самом dateEdit с помощью stepUp(), то это прокатывает только в пределах одного месяца. stepUp() на следующий месяц не переходит, упирается в последний день.
Подскажите пожалуйста, какой можно использовать тип данных чтобы записать в него значения даты и сделать цикл по дням, или как увеличивать значение самого dateEdit, но чтобы осуществлялся в том числе переход на следующий месяц и в последствии год.
Пока что накостылил вот так, но как уже написал выше, если месяца разные, то все ломается.
void MainWindow2::on_pushButton_clicked()
{
    const int rowCount = ui->tableView->model()->rowCount();
    int countI=0;
    int countK=0;
    ui->label_3->setStyleSheet("color: rgb(0,0,200)");
    ui->label_3->setText("Отчет с "+ui->dateEdit->text()+" по "+ui->dateEdit_2->text()+" сформирован:");
    ui->dateEdit_2->stepUp();
    while (ui->dateEdit->date()<ui->dateEdit_2->date()) {
        for (int i = 0; i < rowCount; i++) {
            QString str=ui->tableView->model()->data(ui->tableView->model()->index(i,0)).toString();
            QString str2=ui->dateEdit->text();
            QString str3=ui->tableView->model()->data(ui->tableView->model()->index(i,9)).toString();
            QString str4="инцидент";
            if (str==str2) {
                if (str3==str4) {
                    countI++;
                }
                else {
                    countK++;
                }
            }
        }
        ui->dateEdit->stepUp();
    }
    QString str1 = QString::number(countI);
    QString str2 = QString::number(countK);
    ui->lineEdit->setText(str1);
    ui->lineEdit_2->setText(str2);
    ui->dateEdit->setDate(QDate::currentDate());
    ui->dateEdit_2->setDate(QDate::currentDate());
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.2.2019, 14:17
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Из кода не понятно, что должно делаться. Для чего проверяется условие не равенства дат? Во внутреннем цикле дата никак не используется.

Не оставляй умалчиваемых имён виджетов, они ни о чём не говорят, давай им осмысленные имена
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_OlejOK_*
сообщение 5.2.2019, 14:52
Сообщение #3





Гости








    


Цитата(Litkevich Yuriy @ 5.2.2019, 14:17) *
Из кода не понятно, что должно делаться. Для чего проверяется условие не равенства дат? Во внутреннем цикле дата никак не используется.

Не оставляй умалчиваемых имён виджетов, они ни о чём не говорят, давай им осмысленные имена

Используется. Беру данные из ячеек tableView и помещаю в str и сравниваю с str2, в котором как раз дата из dateEdit
QString str=ui->tableView->model()->data(ui->tableView->model()->index(i,0)).toString();
QString str2=ui->dateEdit->text();
...
if (str==str2) {
     if (str3==str4) {
         countI++;
     }
     else {
         countK++;
     }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_OlejOK_*
сообщение 5.2.2019, 14:55
Сообщение #4





Гости








    


Цитата(Litkevich Yuriy @ 5.2.2019, 14:17) *
Из кода не понятно, что должно делаться. Для чего проверяется условие не равенства дат? Во внутреннем цикле дата никак не используется.

Не оставляй умалчиваемых имён виджетов, они ни о чём не говорят, давай им осмысленные имена

Основной вопрос у меня в том как сделать цикл от даты из одного dateEdit до даты в другом dateEdit
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 6.2.2019, 9:37
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Гость_OlejOK_ что понимается под "цикл от даты до даты" ? Шаг по дням/месяцам ?
Смотри функции
QDateTime addDays(qint64 ndays) const
QDateTime addMSecs(qint64 msecs) const
QDateTime addMonths(int nmonths) const
QDateTime addSecs(qint64 s) const
QDateTime addYears(int nyears) const


сравнивать даты лучше оператором QDateTime::operator= либо по значениям QDateTime::toSecsSinceEpoch()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_OlejOK_*
сообщение 6.2.2019, 12:49
Сообщение #6





Гости








    


Нашел решение
    QDate date;
    date.setDate(ui->dateEdit->date().year(),ui->dateEdit->date().month(),ui->dateEdit->date().day());
    QDate date2;
    date2.setDate(ui->dateEdit_2->date().year(),ui->dateEdit_2->date().month(),ui->dateEdit_2->date().day());
    while (date<date2) {
        ...
        date = date.addDays(+1);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.3.2024, 7:19