<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Klasse von QString ableiten und Methoden weiter verwenden]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich hoffe mir kann jemand bei meinem Problem helfen.<br />
Ich verwende Qt5 und möchte eine Klasse Hexstring von QString ableiten.</p>
<p>Die Klasse Hexstring soll nur eine weitere Methode haben:</p>
<pre><code>unsigned char * Hexstring::toUCharArray() const
</code></pre>
<p>ansonsten möchte ich die Methoden von QString weiter verwenden, da diese ja auch für Hexstring passen.</p>
<p>Im Main-Programm möchte ich Klasse wie folgt verwenden:</p>
<pre><code>Hexstring hex = Hexstring::number(serial,16);
</code></pre>
<p>Jedoch bekomme ich bei der ersten Zeile schon eine Fehlermeldung...klar, da die Hexstring Klasse keine statische Methode number hat. Dann bin ich den Weg so gegangen:</p>
<pre><code>Hextring hex = QString::number(serial,16);
</code></pre>
<p>Jedoch habe ich dann wieder das Problem, dass der folgende Code nicht mehr funktioniert.</p>
<pre><code>if (hex.length()%2!=0){
   hex = QString(&quot;0&quot;).append((QString) hex);
}
unsigned char* hexarray = hex.toUCharArray();
</code></pre>
<p>Es gibt dafür keine passende Konvertierung.<br />
Wenn ich es so mache</p>
<pre><code>if (hex.length()%2!=0){
   hex = (Hexstring) QString(&quot;0&quot;).append((QString) hex);
}
unsigned char* hexarray = hex.toUCharArray();
</code></pre>
<p>dann bekomme ich die Fehlermeldung, dass keine Konvertierung von QString nach Hexstring möglich ist.<br />
Was muss ich ich der Klasse machen, damit das so funktioniert?</p>
<p>Eine letzte Frage habe ich noch:<br />
Wie komme ich von der Methode toUCharArray() an den jeweiligen String der in QString gespeichert ist?</p>
<pre><code>unsigned char * Hexstring::toUCharArray() const
{
   QString str = &quot;Hier benötige ich den String aus QString&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/333291/klasse-von-qstring-ableiten-und-methoden-weiter-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 16:07:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333291.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jun 2015 09:11:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Wed, 24 Jun 2015 09:11:14 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich hoffe mir kann jemand bei meinem Problem helfen.<br />
Ich verwende Qt5 und möchte eine Klasse Hexstring von QString ableiten.</p>
<p>Die Klasse Hexstring soll nur eine weitere Methode haben:</p>
<pre><code>unsigned char * Hexstring::toUCharArray() const
</code></pre>
<p>ansonsten möchte ich die Methoden von QString weiter verwenden, da diese ja auch für Hexstring passen.</p>
<p>Im Main-Programm möchte ich Klasse wie folgt verwenden:</p>
<pre><code>Hexstring hex = Hexstring::number(serial,16);
</code></pre>
<p>Jedoch bekomme ich bei der ersten Zeile schon eine Fehlermeldung...klar, da die Hexstring Klasse keine statische Methode number hat. Dann bin ich den Weg so gegangen:</p>
<pre><code>Hextring hex = QString::number(serial,16);
</code></pre>
<p>Jedoch habe ich dann wieder das Problem, dass der folgende Code nicht mehr funktioniert.</p>
<pre><code>if (hex.length()%2!=0){
   hex = QString(&quot;0&quot;).append((QString) hex);
}
unsigned char* hexarray = hex.toUCharArray();
</code></pre>
<p>Es gibt dafür keine passende Konvertierung.<br />
Wenn ich es so mache</p>
<pre><code>if (hex.length()%2!=0){
   hex = (Hexstring) QString(&quot;0&quot;).append((QString) hex);
}
unsigned char* hexarray = hex.toUCharArray();
</code></pre>
<p>dann bekomme ich die Fehlermeldung, dass keine Konvertierung von QString nach Hexstring möglich ist.<br />
Was muss ich ich der Klasse machen, damit das so funktioniert?</p>
<p>Eine letzte Frage habe ich noch:<br />
Wie komme ich von der Methode toUCharArray() an den jeweiligen String der in QString gespeichert ist?</p>
<pre><code>unsigned char * Hexstring::toUCharArray() const
{
   QString str = &quot;Hier benötige ich den String aus QString&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2457621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457621</guid><dc:creator><![CDATA[Mr.Pfiff]]></dc:creator><pubDate>Wed, 24 Jun 2015 09:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Wed, 24 Jun 2015 09:45:10 GMT]]></title><description><![CDATA[<p>Mr.Pfiff schrieb:</p>
<blockquote>
<pre><code>Hexstring hex = Hexstring::number(serial,16);
</code></pre>
<p>Jedoch bekomme ich bei der ersten Zeile schon eine Fehlermeldung...</p>
</blockquote>
<p>Schön, dass du sie nicht nennst, sonst hätte man dir sagen können, was du falsch machst.</p>
<p>Mr.Pfiff schrieb:</p>
<blockquote>
<p>Eine letzte Frage habe ich noch:<br />
Wie komme ich von der Methode toUCharArray() an den jeweiligen String der in QString gespeichert ist?</p>
<pre><code>unsigned char * Hexstring::toUCharArray() const
{
   QString str = &quot;Hier benötige ich den String aus QString&quot;;
}
</code></pre>
</blockquote>
<p>???<br />
*this, begin(), at(), [] ...</p>
<p>unsigned char * schreit nach dangling Pointer oder Memoryleak.</p>
<p>Warum keinen freie Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457628</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 24 Jun 2015 09:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Wed, 24 Jun 2015 10:11:00 GMT]]></title><description><![CDATA[<p>Mr.Pfiff schrieb:</p>
<blockquote>
<p>Hallo zusammen,<br />
ich hoffe mir kann jemand bei meinem Problem helfen.</p>
</blockquote>
<p>Klar.<br />
Lass den Quatsch und mach statt dessen ne freie Funktion <code>toUCharArray</code> .<br />
Ist doch völliger Unfug da nen riesen Aufwand reinzustecken, nur weil du <code>foo.toUCharArray()</code> statt <code>toUCharArray(foo)</code> schreiben willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457632</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 24 Jun 2015 10:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Thu, 25 Jun 2015 07:43:57 GMT]]></title><description><![CDATA[<p>Ihr habt ja schon recht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Eine freie Funktion wäre viel einfacher.<br />
Danke schonmal für euere super schnellen Antworten.<br />
Wollte die Sache mit der Vererbung mal anhand einer vorhandenen Klasse durchexerzieren.</p>
<p>Hier noch der Header</p>
<pre><code>#ifndef HEXSTRING
#define HEXSTRING

#include &lt;QString&gt;

class Hexstring:public QString{
public:
    Hexstring(const char *);
    Hexstring(QString &amp;&amp;);
    unsigned char *toUCharArray() const;
};

#endif // HEXSTRING
</code></pre>
<p>und die cpp-Datei</p>
<pre><code>#include &quot;hexstring.h&quot;

Hexstring::Hexstring(const char * other) : QString(other)
{
}

Hexstring::Hexstring(QString &amp;&amp; other) : QString(other)
{
}

unsigned char * Hexstring::toUCharArray() const{
    int i;
    bool ok;
    QString str = *this;//QString(this-&gt;data());
    if (str.length()%2!=0){
        str = QString(&quot;0&quot;).append(str);
    }
    unsigned char *hexarray_expiration = (unsigned char*) malloc(sizeof(char)*str.length()/2);
    for(i=0;i&lt;str.length();i=i+2){
        hexarray_expiration[i/2]=QString(str.at(i)).append(str.at(i+1)).toUShort(&amp;ok,16);
        if(!ok){
            qDebug(&quot;Konvertierung fehlgeschlagen!&quot;);
        }
    }
    return hexarray_expiration;
}
</code></pre>
<p>Falls ich jetzt noch böse Fehler drin hab, dann bitte ein freundlicher Hinweis! Sorry dass die Klassendefinition bei meiner Problemstellung gefehlt hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Danke auch noch für den Tipp mit &quot;*this&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457698</guid><dc:creator><![CDATA[Mr.Pfiff]]></dc:creator><pubDate>Thu, 25 Jun 2015 07:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Thu, 25 Jun 2015 08:58:40 GMT]]></title><description><![CDATA[<p>malloc?<br />
new[]!</p>
<p>(wenn schon diese unsinnige händische Speicherverwaltung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457712</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 25 Jun 2015 08:58:40 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Thu, 25 Jun 2015 09:35:30 GMT]]></title><description><![CDATA[<p>Mr.Pfiff schrieb:</p>
<blockquote>
<p>Wollte die Sache mit der Vererbung mal anhand einer vorhandenen Klasse durchexerzieren.</p>
</blockquote>
<p>Dann wähl aber bitte ein Beispiel wo die Vererbung auch Sinn macht, und nicht wie hier eines wo die Vererbung eben gerade total sinnfrei ist.<br />
Das ist doch total dämlich, dabei lernst du *nichts* ausser wie man es total falsch macht.</p>
<p>BTW kleiner Tip noch (bzw. 2): <code>sizeof(char)</code> ist garantierterweise immer 1. Und das Deklarieren von allen Variablen am Anfang der Funktion ist ganz schlimm 90er-Jahre Stil und <em>verschlechtert</em> immens die Lesbarkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457717</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 25 Jun 2015 09:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Thu, 25 Jun 2015 14:13:31 GMT]]></title><description><![CDATA[<p>Ja ok...<br />
wie mache ich soetwas dann ohne die &quot;unsinnige&quot; Speicherverwaltung?</p>
<p>So sinnfrei würde ich die Vererbung hier nicht sehen, denn ein Hexstring ist<br />
doch nichts anderes als ein &quot;erweiterter&quot; QString!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457744</guid><dc:creator><![CDATA[Mr.Pfiff]]></dc:creator><pubDate>Thu, 25 Jun 2015 14:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Thu, 25 Jun 2015 14:32:46 GMT]]></title><description><![CDATA[<p>Mr.Pfiff schrieb:</p>
<blockquote>
<p>Ja ok...<br />
wie mache ich soetwas dann ohne die &quot;unsinnige&quot; Speicherverwaltung?</p>
</blockquote>
<p>std::vector&lt;unsigned char&gt;<br />
oder<br />
std::basic_string &lt;unsigned char&gt;<br />
oder<br />
std::string mit &quot;normalem&quot; char (warum benutzt du unsigned?)</p>
<p>Das Ganze natürlich auch als Ergebnistyp der Funktion!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457746</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 25 Jun 2015 14:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Thu, 25 Jun 2015 19:00:05 GMT]]></title><description><![CDATA[<p>Mr.Pfiff schrieb:</p>
<blockquote>
<p>So sinnfrei würde ich die Vererbung hier nicht sehen, denn ein Hexstring ist<br />
doch nichts anderes als ein &quot;erweiterter&quot; QString!?</p>
</blockquote>
<p>Ja, aber das modelliert man (in C++) nicht mit Vererbung.<br />
Verwende public Vererbung nur, wenn die Basisklasse einen virtuellen oder protected Destruktor hat. Denn nur dann kann die polymorphisch genutzt werden.<br />
Verwerbe, damit andere deine Klasse nutzen können, nicht damit du, eine andere Klasse nutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457761</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 25 Jun 2015 19:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Fri, 26 Jun 2015 06:22:13 GMT]]></title><description><![CDATA[<p>Super schon wieder was gelernt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<blockquote>
<p>Verwende public Vererbung nur, wenn die Basisklasse einen virtuellen oder protected Destruktor hat. Denn nur dann kann die polymorphisch genutzt werden.</p>
</blockquote>
<p>Könnt ihr mir hier eine Beisielklasse nennen?</p>
<blockquote>
<p>std::vector&lt;unsigned char&gt;<br />
oder<br />
std::basic_string &lt;unsigned char&gt;<br />
oder<br />
std::string mit &quot;normalem&quot; char (warum benutzt du unsigned?)</p>
<p>Das Ganze natürlich auch als Ergebnistyp der Funktion!</p>
</blockquote>
<p>Seh ich ein. Brauche jedoch für eine vorhandene C-Funktion, die ich damit füttere, den unsigned char Pointer. Meine C-Funktion kann ja kein std::vector&lt;unsigned char&gt; verarbeiten!? Oder seh ich das falsch?</p>
<p>Für reines C++ ist dein Ansatz natürlich der <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457800</guid><dc:creator><![CDATA[Mr.Pfiff]]></dc:creator><pubDate>Fri, 26 Jun 2015 06:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Fri, 26 Jun 2015 09:09:19 GMT]]></title><description><![CDATA[<p><a href="http://en.cppreference.com/w/cpp/string/basic_string/c_str" rel="nofollow">http://en.cppreference.com/w/cpp/string/basic_string/c_str</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457827</guid><dc:creator><![CDATA[NaAHörMal]]></dc:creator><pubDate>Fri, 26 Jun 2015 09:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse von QString ableiten und Methoden weiter verwenden on Fri, 26 Jun 2015 13:52:51 GMT]]></title><description><![CDATA[<p>@Mr.Pfiff</p>
<pre><code class="language-cpp">std::vector&lt;unsigned char&gt; vec;
// Daten nach vec reinschaufeln
unsigned char* data = &amp;vec[0]; // C++03
unsigned char* data2 = vec.data(); // C++11
// Die Zeiger kannst du jetzt an deine C-Funktion übergeben
</code></pre>
<p>@manni66<br />
<code>basic_string&lt;unsigned char&gt;</code> ist ja wohl ein ziemliches no-go für Binärdaten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457877</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Jun 2015 13:52:51 GMT</pubDate></item></channel></rss>