Seite 1 von 2

Eigene QtableItemVIew

Verfasst: 16. Oktober 2008 07:20
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


Verfasst: 16. Oktober 2008 07:39
von MiKla
Wo ist das Problem in Zeile "2" nachzusehen, was da nicht stimmt
1 #include "myPruefungenItemView.h"
2 i
????

Verfasst: 16. Oktober 2008 13:06
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

Verfasst: 16. Oktober 2008 13:25
von MiKla
ich sehe nirgendwo eine Deklaration von

Code: Alles auswählen

horizontalScrollBar

Verfasst: 16. Oktober 2008 13:42
von reuabreliz
QAbstractItemView erbt doch von QAbstractScrollArea und meine Klasse erbt von QAbstractItemView also sollte doch auch QAbstractSrollArea ansprechbar sein.

Verfasst: 16. Oktober 2008 13:45
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

Verfasst: 16. Oktober 2008 21:10
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

Verfasst: 16. Oktober 2008 22:13
von upsala
Hier fehlen 2 Dinge:

Eigeninitiative und Zeilennummern...

Verfasst: 16. Oktober 2008 22:22
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.

Verfasst: 16. Oktober 2008 22:31
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

Verfasst: 16. Oktober 2008 22:42
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

Verfasst: 17. Oktober 2008 07:17
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

Verfasst: 17. Oktober 2008 10:38
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?

Verfasst: 17. Oktober 2008 12:03
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

Verfasst: 17. Oktober 2008 15:01
von reuabreliz
Könntest du mir bitte sagen wie ich sie denn aufrufen soll ?