Seite 1 von 1

QDate

Verfasst: 23. August 2011 00:45
von Stryder
Huhu,

ich hätte da mal eine Frage... kann ich mir das irgendwie einfacher machen?

Der Ausschnitt zeigt nur ersten des Monats der ein Do, Fr, Sa oder So ist... für ein Monat mit 31 Tagen
wenn das nicht einfacher geht muss ich das ja 28x machen.. für Monate mit 28, 29, 30 und 31 Tagen...
Eventuell stehe ich gerade auch auf dem Schlauch :D

Code: Alles auswählen

        if(date.dayOfWeek() == 4) {
            header << "Name" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "Sp"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa"
                   << "MI" << "MS";
            ui->tableWidget_planner->setColumnCount(1 + 4 + date.daysInMonth() + 2);
        }

        if(date.dayOfWeek() == 5) {
            header << "Name" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "MI" << "MS";
            ui->tableWidget_planner->setColumnCount(1 + 5 + date.daysInMonth() + 2);
        }

        if(date.dayOfWeek() == 6) {
            header << "Name" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "MI" << "MS";
            ui->tableWidget_planner->setColumnCount(1 + 5 + date.daysInMonth() + 2);
        }

        if(date.dayOfWeek() == 7) {
            header << "Name" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So"
                   << "WI" << "Mo" << "Di" << "MI" << "MS";
            ui->tableWidget_planner->setColumnCount(1 + 5 + date.daysInMonth() + 2);
        }

        ui->tableWidget_planner->setHorizontalHeaderLabels(header);

Re: QDate

Verfasst: 23. August 2011 07:36
von franzf
Speicher "Wi Mo Di Mi Do Fr Sa So" in einer eigenen QStringList. Zum Zusammenfügen brauchst du die dann nur oft genug in eine andere QStringList zu append-en. Für die erste und die letzte Zeile musst du nur mit deinem "dayOfWeek" rechnen - und dir ein QStringList::mid raus holen.

Re: QDate

Verfasst: 23. August 2011 09:11
von upsala
So ungefähr:

Code: Alles auswählen

QStringList days << "Mo" << "Di" << "Mi" << "Do" << "Fr" << "Sa" << "So";

QDate startDate=?;

for (int i=0; i<startDate.daysInMonth(); ++i) 
{
  const QDate currentDate=startDate.addDays(i);
  header << days.value(currentDate.dayOfWeek()-1);
}

Re: QDate

Verfasst: 23. August 2011 12:46
von Stryder
Dankeschön :)

Edit:
Konnte es nun eig. ganz gut lösen:
Und hat viel Copy & Paste Arbeit erspart..

Code: Alles auswählen

    QStringList header;
    int WICount = 0;
    header << "Name";
    for(int i = 1; i <= date.daysInMonth(); i++) {
        date.setDate(ui->caledateEdit_2->text().toInt(),
                     ui->caledateEdit->date().month(), i);
        if(date.dayOfWeek() == 1) {
            header << "Mo";
        }
        if(date.dayOfWeek() == 2) {
            header << "Di";
        }
        if(date.dayOfWeek() == 3) {
            header << "Mi";
        }
        if(date.dayOfWeek() == 4) {
            header << "Do";
        }
        if(date.dayOfWeek() == 5) {
            header << "Fr";
        }
        if(date.dayOfWeek() == 6) {
            header << "Sa";
        }
        if(date.dayOfWeek() == 7) {
            header << "So" << "WI";
            WICount++;
        }
    }
    header << "MI" << "MS";
    ui->tableWidget_planner->setColumnCount(1 + WICount + date.daysInMonth() + 2);