[problem umgangen] Bug bei selctedIndexes?

Alles rund um die Programmierung mit Qt
Antworten
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

[problem umgangen] Bug bei selctedIndexes?

Beitrag von Volker »

Probiert doch mal jemand bitte folgendes:

Header Datei Test.h

Code: Alles auswählen

#ifndef TEST_H_
#define TEST_H_

#include <Qt/QMainWindow.h>

class QWidget;
class QTreeView;
class QDirModel;

class Test : public QMainWindow
{
	Q_OBJECT
public:
	Test (QWidget * parent = 0, Qt::WFlags flags = 0);

protected:
	
	QWidget			*_centerWidget;
	QTreeView*	_directoryTree;
	QDirModel*	_model;

protected slots:
	void fileListContextMenu(const QPoint & pos);
};
#endif
Cpp Datei: Test.cpp

Code: Alles auswählen

#include <qt/qdirmodel.h>
#include <qt/qtreeview.h>
#include <Qt/qlayout.h>

#include "Test.h"

Test::FTPClient(QWidget * parent /* = 0 */, Qt::WFlags flags /* = 0 */) : QMainWindow(parent, flags)
{
	resize(QSize(640, 404).expandedTo(minimumSizeHint()));

	_centerWidget = new QWidget(this);
	_centerWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
	_centerWidget->setLayout(new QHBoxLayout());
	setCentralWidget(_centerWidget);
	
	_model = new QDirModel;	
	_model->setFilter(QDir::AllDirs);
	_model->setSorting(QDir::Name);
	_directoryTree = new QTreeView(_centerWidget);
	_directoryTree->setModel(_model);
	_directoryTree->setContextMenuPolicy(Qt::CustomContextMenu); 
	connect(_directoryTree, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(fileListContextMenu(const QPoint&)));
	_centerWidget->layout()->addWidget(_directoryTree);
	
}

void Test::fileListContextMenu(const QPoint & pos)
{
	QModelIndexList indexes = _directoryTree->selectionModel()->selectedIndexes();	
}
Also bei mir bekomme ich einen Assertion Failure beim Verlassen der fileListContextMenu Methode. Scheinbar wird die QModelIndexList nicht korrekt freigegeben.

Wäre hilfreich wenn jemand den Fehler bestätigen könnte und natürlich noch hilfreicher wenn mir jemand sagen kann, woran es liegt und wie ich ihn umgehen/lösen kann.
Zuletzt geändert von Volker am 17. August 2006 13:26, insgesamt 2-mal geändert.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Nachdem ich den Fehler mit Qt 4.0, Qt 4.0.1, Qt 4.1.0 sowohl unter Visual Studio 2003 als auch Visual Studio 2005 jeweils mit dem inoffizielen Patch für die OS Version reproduzieren konnte, hab ich das ganze selbst mal mit der Version Qt 4.1.1 unter Linux und mit dem MinGW Compiler unter Windows ausprobiert und siehe da: keine Assertion Errors oder ähnliches.

Ich werd das ganze nun noch unter Qt 4.1.1 mit VS 2005 und dem inoffiziellen Patch testen (kann man da den für die Qt 4.1.0 Version übernehmen :?: ) . Sollte das Problem dort erneut auftreten, gibt es IMHO eigentlich nur zwei Möglichkeiten:

Entweder der Microsoft Compiler hat einen schweren Fehler und das schon seit zwei Generationen (eher unwahrscheinlich), oder der inoffizielle Patch für die Visual Studio Unterstützung für die OpenSource Edition von QT enthält einen Fehler, der zu diesem Problem führt.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Also auch mit dem neuen Qt 4.1.1 inkl. passendem unofficial Patch funktioniert das ganze nicht. Unter MinGW kein Problem. Unter Visual Studio mit Unofficial Patch reproduzierbarer Absturz.

Wäre interessant ob jemand der die kommerzielle QT Version besitzt den Fehler reproduzieren kann.

Was mich natürlich auch mal interessieren würde, ist ob ich eigentlich der einzige bin, der das Problem hat. Oder verwendet hier niemand den unofficial Patch?
Pedde
Beiträge: 13
Registriert: 6. Juli 2005 08:01

Beitrag von Pedde »

Hallo,

ich habe jetzt den gleichen Fehler, wie du den beschrieben hast.

Hast du das Problem mittlerweile beheben können?

Gruß Pedde

P.S.: Beim Erstellen eines Beispielprogrammes für den Support ist es mir nicht gelungen diesen Fehler zu reproduzieren; Also falls jemand ein Beispiel hat, welches man dem Support senden kann -> contact me!
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Ich hab das ganze schon mal runtergebrochen bis auf das obige Beispiel. Dabei lässt sich der Fehler absolut super reproduzieren. Allerdings kommt jetzt das große ABER:

Nur mit dem inoffiziellen Patch für die OpenSource Version tritt der Fehler unter Visual Studio auf. Übersetzt man das gleiche Programm mit MinGW oder unter Linux mit GCC gibt's keine Probleme. Aus dem Grund konnte mir auch der Support damals nicht weiterhelfen, sie meinten nur, dass sie den Fehler nicht reproduzieren könnten und für den OpenSource Patch geben sie natürlich kein Support.
Wie's mit der kommerziellen QT Version unter Windows steht weiss ich nicht, da ich leider keine Besitze.

Ich hab das Problem jetzt so umgangen, dass ich sowohl die Version für Visual Studio als auch die Original OpenSource Version mit MinGW installiert habe und nun mittels

Code: Alles auswählen

#ifdef _MSC_VER
// keine QModelIndexListen erlaubt
// umgehung für einzelnes Element per ->currentIndex()
#else
// eigentlicher Code mit Mehrfachauswahl
#endif
das Problem umgehe. Für's Debuggen und normale Programmieren verwende ich nun Visual Studio und das fertige Programm wird dann mittels MinGW und QMake .pro Datei übersetzt. Ist zwar umständlich aber ich konnte leider keine andere Lösung finden.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Du kannst ja auch zum debuggen den gdb benutzen.
Mit dem MS Compiler habe ich auch so meine liebe Not. Qt Apps die unter Linux prima laufen lassen sich zwar mit dem MS Compiler übersetzten, aber laufen nicht. Das ganze mit dem gcc unter Windows kein Problem. Es muss also nicht an dem Patch liegen. Um das zu testen, kannste du dir ja mal die Qt Testversion laden. Dann weiste, ob es ein Problem mit dem Patch oder dem Compiler ist.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Ich programmiere halt schon seit ich mit C++ angefangen hab mit Visual Studio, da wechsle ich ungern wegen so nem Bug die IDE, bzw nutze andere Debug Tools. Glücklicherweise ist das bisher der einzige gravierende Bug der mir über den Weg gelaufen ist, der mit VS auftritt (bei anderen hab ich's noch nicht ausprobiert ob sie mit anderen Compilern nicht auftreten)

Das mit der Testversion is ne Idee,... werd ich mal machen wenn ich die Zeit dafür finde. Allerdings würd's mich wundern wenn da das Problem auftritt, denn dann müssten die bei Trolltech es ja reproduzieren können.

Wenn's jemand anderes, der das Problem mit dem OpenSource Patch reproduzieren kann mal mit der Testversion ausprobiert bitte melden! :!:
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

noch schlimmer ist es wenn man wie ich auf Visual STudio angewießen ist, weil man Code von anderen Programmierern einbetten muss, der leider dermasen auf diesen Compiler zugeschnitten ist, das da ein umstieg unmöglich ist.

Hat da einer ne Idee zum fixen? (Ich kann nicht meine ganzen QModelindexlist ersetzen, da ich zT auf sie angwiesen bin (durchgeben durch mehrere Funktionen etc))
Glaube an eine Lösung, nur dann kannst du auch eine finden.
Pedde
Beiträge: 13
Registriert: 6. Juli 2005 08:01

Beitrag von Pedde »

Ich habe jetzt eine Lösung:

Ich habe mir das Beispiel
chart angeschaut und bin dabei wie in der Funktion PieView::paintEvent vorgegangen und das funktioniert ohne Probleme...

Da wird eben nur die ganze Tabelle durchgegangen und für jedes Element geschaut, ob es selektiert ist...

Gruß

Pedde
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Hab ich mir auch mal überlegt, hab aber drauf gehofft, dass in den nachfolgenden Releases das Problem mal verschwindet,... leider bisher ohne Erfolg
Antworten