Eigene QtableItemVIew

Alles rund um die Programmierung mit Qt
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Eigene QtableItemVIew

Beitrag von reuabreliz »

myPruefungenItemView.cpp

Code: Alles auswählen

#include "myPruefungenItemView.h"
i

MyPruefungenItemView::MyPruefungenItemView( QWidget *parent) : QAbstractItemView( parent )
{
	QGridLayout *layout = new QGridLayout( this->viewport() );
	label = new QLabel();

	layout->addWidget(label, 0, 0);
	
	label->setAlignment( Qt::AlignCenter);
	label->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
	label->setText( tr( "No Data" ) );
}
/*
void MyPruefungenItemView::updateText()
{
	switch( selectionModel()->selection().indexes().count() )
	{
		case 0:
			label->setText( tr( "No data" ) );
			break;
		case 1:
			label->setText( model->data( currentIndex() ).toString() );
			break;
		default:
			label->setText( tr( "Too many items selected" ) );
			break;
	}
}*/

QRect MyPruefungenItemView::visualRect( const QModelIndex &index ) const
{
	if( selectionModel()->selection().indexes().count() != 1 )
		return QRect();

	if( currentIndex() != index )
		return QRect();

	return rect();
}

int MyPruefungenItemView::horizontalOffset() const
{
	return horizontalScrollBar()->value();
}

int MyPruefungenItemView::verticalOffset() const
{
	return verticalScrollBar()->value();
}

QModelIndex MyPruefungenItemView::moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers )
{
	return currentIndex();
}

void MyPruefungenItemView::setSelection( const QRect &rect, QItemSelectionModel::SelectionFlags flags )
{
	//do nothing
}

void MyPruefungenItemView::scrollTo( const QModelIndex &index, ScrollHint hint )
{
	//cannot scroll
}

void MyPruefungenItemView::dataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight )
{
	updateText();
}

void MyPruefungenItemView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected )
{
	updateText();
}
myPruefungenItemView.h

Code: Alles auswählen


#include <QAbstractItemView>
#include <QGridLayout>
#include <QLabel>
#include <QModelIndex>

class QModelIndex;
class QDirModel;
class QItemSelectionModel;


class MyPruefungenItemView : public QAbstractItemView
{
	Q_OBJECT

	private:
		QLabel *label;
		
		void updateText();

	public:
		MyPruefungenItemView( QWidget *parent = 0);

		QModelIndex indexAt( const QPoint &point) const;
		void scrollTo( const QModelIndex &index, ScrollHint hint=EnsureVisible );
		QRect visualRect( const QModelIndex &index ) const;

	protected:
		int horizontalOffset() const;

		QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers );
		void setSelection( const QRect &rect, QItemSelectionModel::SelectionFlags flags );
		int verticalOffset() const;
		QRegion visualRegionForSelection( const QItemSelection &selection ) const;
	
	protected slots:
		void dataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight );
		void selectionChanged( const QItemSelection &selected, const QItemSelection &deselected );

};
Fehlermeldung:


src/myPruefungenItemView.cpp:2: Fehler: »i« bezeichnet keinen Typ

src/myPruefungenItemView.cpp: In member function »virtual int

MyPruefungenItemView::horizontalOffset() const«:

src/myPruefungenItemView.cpp:45: Fehler: invalid use of incomplete type »struct QScrollBar«

/usr/include/qt4/QtGui/qabstractscrollarea.h:55: Fehler: forward declaration of »struct QScrollBar«

src/myPruefungenItemView.cpp: In member function »virtual int
MyPruefungenItemView::verticalOffset() const«:

src/myPruefungenItemView.cpp:50: Fehler: invalid use of incomplete type »struct QScrollBar«

/usr/include/qt4/QtGui/qabstractscrollarea.h:55: Fehler: forward declaration of »struct QScrollBar«

src/myPruefungenItemView.cpp: At global scope:

src/myPruefungenItemView.cpp:53: Warnung: unbenutzter Parameter »cursorAction«

src/myPruefungenItemView.cpp:53: Warnung: unbenutzter Parameter »modifiers«

src/myPruefungenItemView.cpp:58: Warnung: unbenutzter Parameter »rect«

src/myPruefungenItemView.cpp:58: Warnung: unbenutzter Parameter »flags«

src/myPruefungenItemView.cpp:63: Warnung: unbenutzter Parameter »index«

src/myPruefungenItemView.cpp:63: Warnung: unbenutzter Parameter »hint«

src/myPruefungenItemView.cpp:68: Warnung: unbenutzter Parameter »topLeft«

src/myPruefungenItemView.cpp:68: Warnung: unbenutzter Parameter »bottomRight«

src/myPruefungenItemView.cpp:73: Warnung: unbenutzter Parameter »selected«

src/myPruefungenItemView.cpp:73: Warnung: unbenutzter Parameter »deselected«

make: *** [build/myPruefungenItemView.o] Fehler 1

MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

Wo ist das Problem in Zeile "2" nachzusehen, was da nicht stimmt
1 #include "myPruefungenItemView.h"
2 i
????
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

Das "i" war nur ein Fehler beim Kopieren. Den hatte ich davor nicht. Jaja in der Eile.
Das ist die Fehlermeldung ohne i

src/myPruefungenItemView.cpp: In member function »virtual int MyPruefungenItemView::horizontalOffset() const«:
src/myPruefungenItemView.cpp:45: Fehler: invalid use of incomplete type »struct QScrollBar«
/usr/include/qt4/QtGui/qabstractscrollarea.h:55: Fehler: forward declaration of »struct QScrollBar«
src/myPruefungenItemView.cpp: In member function »virtual int MyPruefungenItemView::verticalOffset() const«:
src/myPruefungenItemView.cpp:50: Fehler: invalid use of incomplete type »struct QScrollBar«
/usr/include/qt4/QtGui/qabstractscrollarea.h:55: Fehler: forward declaration of »struct QScrollBar«
src/myPruefungenItemView.cpp: At global scope:
src/myPruefungenItemView.cpp:53: Warnung: unbenutzter Parameter »cursorAction«
src/myPruefungenItemView.cpp:53: Warnung: unbenutzter Parameter »modifiers«
src/myPruefungenItemView.cpp:58: Warnung: unbenutzter Parameter »rect«
src/myPruefungenItemView.cpp:58: Warnung: unbenutzter Parameter »flags«
src/myPruefungenItemView.cpp:63: Warnung: unbenutzter Parameter »index«
src/myPruefungenItemView.cpp:63: Warnung: unbenutzter Parameter »hint«
src/myPruefungenItemView.cpp:68: Warnung: unbenutzter Parameter »topLeft«
src/myPruefungenItemView.cpp:68: Warnung: unbenutzter Parameter »bottomRight«
src/myPruefungenItemView.cpp:73: Warnung: unbenutzter Parameter »selected«
src/myPruefungenItemView.cpp:73: Warnung: unbenutzter Parameter »deselected«
make: *** [build/myPruefungenItemView.o] Fehler 1
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

ich sehe nirgendwo eine Deklaration von

Code: Alles auswählen

horizontalScrollBar
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

QAbstractItemView erbt doch von QAbstractScrollArea und meine Klasse erbt von QAbstractItemView also sollte doch auch QAbstractSrollArea ansprechbar sein.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

Deutlicher kann der Compiler gar nicht "sagen", wo das Problem ist:

invalid use of incomplete type »struct QScrollBar«

Also ein

Code: Alles auswählen

#include <QScrollbar>
einfügen, und der Drops ist gelutscht.

Gruß Michael
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

Ich verstehs nicht. Solche Fehlermeldungen wo ich doch den Quelltext zur Hälfte von meiem Buch abgeschrieben habe.


myPruefungenItemView.cpp

Code: Alles auswählen

#include "myPruefungenItemView.h"


MyPruefungenItemView::MyPruefungenItemView( QWidget *parent) : QAbstractItemView( parent )
{
	QGridLayout *layout = new QGridLayout( this->viewport() );
	label = new QLabel();

	layout->addWidget(label, 0, 0);
	
	label->setAlignment( Qt::AlignCenter);
	label->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
	label->setText( tr( "No Data" ) );
}

void MyPruefungenItemView::updateText()
{
	switch( selectionModel()->selection().indexes().count() )
	{
		case 0:
			label->setText( tr( "No data" ) );
			break;
		case 1:
24:			label->setText( model->data( currentIndex() ).toString() );
			break;
		default:
			label->setText( tr( "Too many items selected" ) );
			break;
	}
}

QRect MyPruefungenItemView::visualRect( const QModelIndex &index ) const
{
	if( selectionModel()->selection().indexes().count() != 1 )
		return QRect();

	if( currentIndex() != index )
		return QRect();

	return rect();
}

int MyPruefungenItemView::horizontalOffset() const
{
	return horizontalScrollBar()->value();
}

int MyPruefungenItemView::verticalOffset() const
{
	return verticalScrollBar()->value();
}

QModelIndex MyPruefungenItemView::moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers )
{
	return currentIndex();
}

void MyPruefungenItemView::setSelection( const QRect &rect, QItemSelectionModel::SelectionFlags flags )
{
	//do nothing
}

void MyPruefungenItemView::scrollTo( const QModelIndex &index, ScrollHint hint )
{
	//cannot scroll
}

void MyPruefungenItemView::dataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight )
{
	updateText();
}

void MyPruefungenItemView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected )
{
	updateText();
}
myPruefungenItemView.h

Code: Alles auswählen

#include <QAbstractItemView>
#include <QGridLayout>
#include <QLabel>
#include <QModelIndex>
#include <QScrollBar>


class MyPruefungenItemView : public QAbstractItemView
{
	Q_OBJECT

	private:
		QLabel *label;
		
		void updateText();

	public:
		MyPruefungenItemView( QWidget *parent = 0);

		QModelIndex indexAt( const QPoint &point) const;
		void scrollTo( const QModelIndex &index, ScrollHint hint=EnsureVisible );
		QRect visualRect( const QModelIndex &index ) const;

	protected:
		int horizontalOffset() const;

		QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers );
		void setSelection( const QRect &rect, QItemSelectionModel::SelectionFlags flags );
		int verticalOffset() const;
		QRegion visualRegionForSelection( const QItemSelection &selection ) const;
	
	protected slots:
		void dataChanged( const QModelIndex &topLeft, const QModelIndex &bottomRight );
		void selectionChanged( const QItemSelection &selected, const QItemSelection &deselected );

};
Fehlermeldung:
src/myPruefungenItemView.cpp: In member function »void MyPruefungenItemView::updateText()«:
src/myPruefungenItemView.cpp:24: Fehler: invalid use of member (did you forget the »&« ?)
src/myPruefungenItemView.cpp:24: Fehler: Basisoperand von »->« ist kein Zeiger
src/myPruefungenItemView.cpp: At global scope:
src/myPruefungenItemView.cpp:53: Warnung: unbenutzter Parameter »cursorAction«
src/myPruefungenItemView.cpp:53: Warnung: unbenutzter Parameter »modifiers«
src/myPruefungenItemView.cpp:58: Warnung: unbenutzter Parameter »rect«
src/myPruefungenItemView.cpp:58: Warnung: unbenutzter Parameter »flags«
src/myPruefungenItemView.cpp:63: Warnung: unbenutzter Parameter »index«
src/myPruefungenItemView.cpp:63: Warnung: unbenutzter Parameter »hint«
src/myPruefungenItemView.cpp:68: Warnung: unbenutzter Parameter »topLeft«
src/myPruefungenItemView.cpp:68: Warnung: unbenutzter Parameter »bottomRight«
src/myPruefungenItemView.cpp:73: Warnung: unbenutzter Parameter »selected«
src/myPruefungenItemView.cpp:73: Warnung: unbenutzter Parameter »deselected«
make: *** [build/myPruefungenItemView.o] Fehler 1
Zuletzt geändert von reuabreliz am 16. Oktober 2008 22:16, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hier fehlen 2 Dinge:

Eigeninitiative und Zeilennummern...
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

Habe dir 24: vor die Zeile geschrieben. Und Eigeninitiative naja. Ich finde einfach keine Tutorials wo das ganze gut beschrieben ist für einen Anfänger in QT. Und jetzt 200 Seiten Lesen um eine Tabelle zu erzeugen habe ich auch nicht vor. Deshalb will ich einfach dass diese Tabelle funktioniert, dann kann ich mir den Quellcode anschaun und das ganze besser verstehen und mir aneignen. Weil so lerne ich viel schneller, denn programmieren kann ich ja, aber eben die Funktionsweise von diesem MOdel - View habe ich noch nicht ganz durchblickt. Aber wie gesagt ich will keine 200 Seiten lesen um diese Tabelle zu erstellen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du Scherzkeks: Wieso mir? Das ist dein Code und nicht meiner und wenn dir C++-Kenntnisse fehlen ist das nicht mein Problem. EOT
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

C++ Kenntnisse fehlen mir nicht nur verstehe ich das Model - View Konzept nicht ganz und ich glaube wenn ich den Code einmal hinbekomme kann ich dann gut davon lernen. Ich schreibe nämlich nur ungerne Quellcode der schon existiert neu. Und nimms nicht persönlich :D
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

reuabreliz hat geschrieben:C++ Kenntnisse fehlen mir nicht nur verstehe ich das Model - View Konzept nicht ganz und ich glaube wenn ich den Code einmal hinbekomme kann ich dann gut davon lernen. Ich schreibe nämlich nur ungerne Quellcode der schon existiert neu. Und nimms nicht persönlich :D
Das ist aber ganz eindeutig ein C++ Problem. Und wenn Du Dir die Zeile 24 einmal ganz genau anschaust, solltest Du die Ursache der Fehlermeldung auch finden:

label->setText( model->data( currentIndex() ).toString() );

Gruß Michael
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

Ja es sieht ganz so aus als bräuchte ich einen Zeiger auf ein Model in meiner View Klasse. :)
Das heißt ich sollte vielleicht noch eine Methode setModel() machen oder?
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

reuabreliz hat geschrieben:Ja es sieht ganz so aus als bräuchte ich einen Zeiger auf ein Model in meiner View Klasse. :)
Das heißt ich sollte vielleicht noch eine Methode setModel() machen oder?
QAbstractItemView hat bereits eine Methode, um einen Zeiger auf das Model zu bekommen - Du rufst sie nur nicht korrekt auf und deswegen mault auch der Compiler. Und auch eine setModel Methode brauchst Du nicht zu machen - die hat QAbstractItemView nämlich auch schon.

http://doc.trolltech.com/4.4/classes.html

Gruß Michael
reuabreliz
Beiträge: 86
Registriert: 4. Oktober 2008 17:06

Beitrag von reuabreliz »

Könntest du mir bitte sagen wie ich sie denn aufrufen soll ?
Antworten