[z.T. gelöst] Qt::DisplayRole verursacht Segmentation fault

Alles rund um die Programmierung mit Qt
Antworten
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

[z.T. gelöst] Qt::DisplayRole verursacht Segmentation fault

Beitrag von RD1978 »

Hallo,

ich habe eine Klasse von QSqlQueryModel abgeleitet in der ich einige Roles überschreiben möchte. In der 3. Spalte sollen Preise mit 2 Nachkommastellen angezeigt werden. Ich hab mir gedacht, daß ich dafür die Qt::DisplayRole verwenden kann.

Hier ein kleiner Ausschnitt:

Code: Alles auswählen

QVariant CBArticleModel::data( const QModelIndex &index, int role ) const
{
	switch( index.column() )
	{
		case 2:
		{
			if( role == Qt::DisplayRole )
			{
				return QString( "%1" ).arg( index.data().toDouble(), 0, 'f', 2 );
			}
		}
		break;
	}
}
Sobald ich innerhalb des Anweisungsblocks von Qt::DisplayRole auf index.data() zugreife, stürzt das Programm ab. Komischerweise kann ich aber bei anderen Roles (z.b. Qt::BackgroundRole) auf index.data() zugreifen und bekomme wie erwartet den Wert und das Programm stürzt auch nicht ab.

Der Debugger sagt dazu:

Code: Alles auswählen

Program received signal SIGSEGV, Segmentation fault.

0x004049ef in CBArticleModel::data(QModelIndex const&, int) const (this=0x53e6718, index=@0x22a924, role=0) at src/models/cbarticlemodel.cpp:144
Zeile 144: switch( index.column() )

Hat jemand eine Idee, was ich da machen kann?

---------
Qt 4.4.1
g++ 3.4.5
Windows XP
Zuletzt geändert von RD1978 am 8. August 2008 16:57, insgesamt 1-mal geändert.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Sobald ich innerhalb des Anweisungsblocks von Qt::DisplayRole auf index.data() zugreife, stürzt das Programm ab.
Wie kommst du denn darauf? Hinterher schreibst du doch, dass Zeile 144 "switch( index.column() )" sei...

was ergibt

Code: Alles auswählen

qDebug() << index.isValid() << index.column() << index.row() << role;
für eine Ausgabe?
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hab jetzt alles innerhalb der data-Methode auskommentiert und folgendes versucht:

1. Versuch funktioniert:

Code: Alles auswählen

qDebug() << index.isValid() << index.column() << index.row() << role;
Alle Indexes sind isValid() == true

2. Versuch stürzt ab:

Code: Alles auswählen

qDebug() << index.data();
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

So ich hab´s jetzt so gemacht:

Code: Alles auswählen

QVariant CBArticleModel::data( const QModelIndex &index, int role ) const
{
   switch( index.column() )
   {
      case 2:
      {
         if( role == Qt::DisplayRole )
         {
            return QString( "%1" ).arg( QSqlQueryModel::data( index, role ).toDouble(), 0, 'f', 2 );
         }
      }
      break;
   }
}
Ich hab zwar keine Erklärung dafür, aber so funktioniert es.

Gruß RD1978
Antworten