ASCII Werte über eine Schleife zu QString umwandeln?



  • Hallo,
    ich möchte auf einer Tastatur (nicht die eines PCs) die Buchstaben A bis Z mit painter.drawText(...) darstellen. Dazu habe ich mir gedacht, diese über zwei Schleifen (x,y bzw. i,j) mit dem int-Wert des ASCII-Zeichensatzes zu automatisieren. Der Code sieht wie folgt aus:

        char cduascii = 64;
        for (int j = 1; j <= 6; j++)
        {
            int cduy = (j * 25) + 275;
            for (int i = 1; i <= 5; i++)
            {
                int cdux = (i * 25) + 90;
                cduascii += 1;
                const char* cduchar = (const char*)cduascii;
                cduqstr = QString::fromUtf8((const char*)cduchar);
    
                painter.setPen(MyColor::black);
                painter.setBrush(MyColor::black);
                painter.drawRect(cdux, cduy, 20, 20);
                if (cduascii <= 90)
                {
                    painter.setPen(MyColor::white);
                    painter.drawText(QRectF(cdux, cduy, 20, 20), cduqstr, QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
                }
            }
        }
    

    Die Deklaration (z.B. const char* cduchar) habe ich im Original nur in der Headerdatei stehen, hier nur zum Verständnis.
    Ich finde keine Lösung, die funktioniert. Ich habe schon beim Googlen Zeit investiert und es hilft alles nichts. Der Weg ist mir egal, Hauptsache der ASCII-Wert als int wird später über painter.drawText auf dem Widget angezeigt. Der Fehler bei allen Anstrengungen ist immer, dass nach dem Debuggen alles richtig in der GUI dargestellt wird bzw. nach scrollen auf den Bereich mit den Tasten kommt deine Fehlermeldung: Datei qstring.h wird angezeigt mit "Ausgelöste Ausnahme Zugriffsverletzung beim Lesen an Position ..." Die Zeile von qstring.h sieht so aus:

        static inline QString fromUtf8(const char *str, int size = -1)
        {
            return fromUtf8_helper(str, (str && size == -1) ? int(strlen(str)) : size);
        }
    

    Ich hoffe, mir kann hier jemand weiterhelfen.



  • Du willst doch einzelne Zeichen darstellen und keine Zeichenketten. Da reicht ein einzelnes char und kein char*. QString hat auch einen Konstruktor für QChar. Den kannst du nehmen.
    Hier:

    const char* cduchar = (const char*)cduascii;
    

    castest du deinen ASCII Wert in einen Zeiger. das kann nicht gut gehen.



  • Geht nicht einfach

    QString dummy = "?";
    for( unsigned int ch = 'A'; ch <= 'Z'; ++ch )
    {
       dummy[0] = ch;
       painter.drawText(....);
    }
    


  • Vielen Dank. Es funktioniert jetzt. Noch eine bescheidene Frage: warum muss man die [0] in dummy[0] schreiben?



  • @stefanpc81
    Weil der Dummy-String ein Zeichen lang ist. Du möchtest das erste Zeichen durch das aktuelle Zeichen ersetzen.


Anmelden zum Antworten