PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [QT] Probleme mit QStringList...



CodeReaver
21-08-2004, 08:06
Hi,

Ich hab ein großes problem mit QStringList, ich hab die klasse ThemeManager, die wird später dafür sorgen das man mein Programm umstylen kann.
Jetzt hab ich da die beiden QStringLists sMessages und sSpecial, sMessages verwende ich um z.B. die nachrichten imstatusfenster zu stylen( z.B. status->append( theme->statusMessage( "blala", 1 ) ).
sSpecial soll dann alles andere stylen, z.B. die Inputboxen. ( z.B. lineEdit3->setText( theme->special( "balaber...", 2 ) );
Es wird immer ein pointer auf theme(ThemeManager) an die klassen die etwas stylen müssen übergeben, z.B. bla = new DMp3Player(this,0,0,&theme);

Mit sMessages klappt auch alles super, nur sSpecial macht probleme.
Hier ist erstmal der code von ThemeManager:


#include <qstring.h>
#include <qdatetime.h>
#include <qstringlist.h>

class ThemeManager
{

public:
ThemeManager();
QString currentTheme;
QTime currentTime;

QString sStatusStart;
QString sStatusBkgColor;
QString sStatusMsgNormal;
QString sStatusMsgCritical;
QString sStatusMsgAnother;
QString sSpecialCreditsStart;
QString sSpecialCreditsEntry;
QString sSpecialCreditsEnd;
QString sTimestamp;
QStringList sSpecial;
QStringList sMessages;


public:
// For the /credits Command
QString creditsStart() const { return sSpecialCreditsStart; };
QString creditsEntry( QString name, QString email, QString work ) const { return sSpecialCreditsEntry.arg(name).arg(email).arg(work ); };
QString creditsEnd() const { return sSpecialCreditsEnd; };
// Normal Messages
QString statusMessage( QString Input, int Num = 0, bool NoTime = FALSE ) const;
QString statusStart() const { return sStatusStart.arg(currentTime.currentTime().toStrin g("hh:mm:ss")); };
QString statusNormal( QString Input ) const { return sStatusMsgNormal.arg(currentTime.currentTime().toS tring("hh:mm:ss")).arg( Input ); };
QString statusCritical( QString Input ) const { return sStatusMsgCritical.arg(currentTime.currentTime().t oString("hh:mm:ss")).arg( Input ); };
QString statusAnother( QString Input ) const { return sStatusMsgAnother.arg(currentTime.currentTime().to String("hh:mm:ss")).arg( Input ); };
// Special
QString special( QString Input, int Num = 0 ) const;
};




#include "thememanager.h"

#include <qstring.h>
#include <qdatetime.h>
#include <qstringlist.h>
#include <iostream.h> // is veraltet, weiss ich, kommt noch raus
ThemeManager::ThemeManager()
{

sStatusStart = "<b style=color:#596b05;>(%1) Opened Status Window</b>\n";
sStatusMsgNormal = "<b style=color:#596b05;>(%1) %2</b>";
sStatusMsgCritical = "<b style=color:#bc6118;>(%1) %2</b>";
sStatusMsgAnother = "<b style=color:#aebc18;>(%1) %2</b>";
sStatusBkgColor = "#f4f6ed";
sSpecialCreditsStart = "<table cellpadding=0 cellspacing=0><tbody>";
sSpecialCreditsEntry = "<tr><td><b style=color:#aebc18;>%1<b></td><td><b style=color:#aebc18;>%2<b></td><td><b style=color:#aebc18;>%3<b></td></tr>";
sSpecialCreditsEnd = "</tbody></table>";
sTimestamp = "(hh:mm:ss)"; // Timestamp
sMessages += "<b style=color:#596b05;>%1 %2</b>"; // Normal Message
sMessages += "<b style=color:#bc6118;>%1 %2</b>"; // Critical Message
sMessages += "<b style=color:#aebc18;>%1 %2</b>"; // Describing Message
sMessages += "<b style=color:#bc189b;>%1 %2</b>"; // Join/Part/Quit Message
sMessages += "<b style=color:#186dbc;>%1 %2</b>"; // Nickchange Message
sSpecial += "<b style=color:#596b05;>%1</b>";
sSpecial += "<b style=color:#596b05;>%1</b>";
sSpecial += "<b style=color:#596b05;>%1</b>";
cout<<sSpecial.count()<<endl;
cout<<sSpecial[2]<<endl; // KEIN SIGSEGV
}

QString ThemeManager::statusMessage( QString Input, int Num, bool NoTime ) const
{
if ( NoTime )
{
return sMessages[Num].arg("").arg( Input );
}
else
{
return sMessages[Num].arg(currentTime.currentTime().toString(sTimestamp )).arg( Input );
}
}

QString ThemeManager::special( QString Input, int Num ) const
{
// Hier kommt ein SIGSEV, warum?
// mach ich // vor das if geht alles problemlos, mal abgesehen von der tatsache das ich die
// funktion so nicht benutzen kann :)
if (sSpecial.size() > 1) {cout<<sSpecial[1]<<endl;}
return "...";
}


Wenn ich das // vor dem if wegmache, kommt ein SIGSEGV beim starten des programms, warum?
Was läuft da schief?

Wenn ihr mehr code oder informationen braucht, sagt bescheid.