Hallo Leute!
Ich möchte eine kleine eigene Klasse für ein Programm schreiben, die
QTab erweitert. Sie sollte ein QTable-Objekt (die Spalten-Konfig ist
unwichtig!) und 5 Knöpfe, um den Tabelleninhalt zu manipulieren.
Mein Problem ist nun, dass QT offensichtlich SLOTs in der Klasse tabview
(Quelle unten) nicht erlaubt (ohne das QT_OBJECT Makro).
Während der Laufzeit gibt es aus:
QObject::connect: No such slot QWidget::neueZeile()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')
Ich habe schon gelesen, dass SLOTs nur mir QT_OBJECT innerhalb
der Klasse implementiert werden können.
Aber aus welcher Klasse muss ich tabview ableiten?
Wenn ich mit QT_OBJECT (wie unten) kompiliere, gibt mir gcc aus
(asfsportmanager.cpp enthält die Hauptklasse meines Programms):
I'm a little confused, because QWidget is inherited 'public', or not?
Da bin ich jetzt ein bisschen aufgeschmissen, weil sich tabview eigentlich
aus 'public QWidget' ableitet, oder?
Danke für jede Hilfe!
Christian
Attached:
// --------------- asfsportmanager.h
// ... 8< ...
// alles Wichtige ist bereits #included
//
class ASFSportManager : public KMainWindow
{
Q_OBJECT
public:
ASFSportManager(QWidget* parent=0, const char *name=0);
~ASFSportManager();
public slots:
void beenden();
private: // Private methods
QVBoxLayout *layout;
QTabWidget *tab;
tabview *s;
tabview *k;
KStatusBar *stat;
KMenuBar *menue;
QPopupMenu *hilfe, *sp_mgr, *verw, *assist;
KIconLoader *il;
};
// ... >8 ...
// --------------- asfsportmanager.cpp
// ... 8< ...
s = new tabview(tab, "schueler");
k = new tabview(tab, "kurse");
tab = new QTabWidget(this, "karteireiter");
tab->setGeometry(5, 15, 600, 500);
tab->addTab(s, "&Schüler");
tab->addTab(k, "&Kurse");
// ... >8 ....
// --------------- tabview.h
#ifndef TABVIEW_H
#define TABVIEW_H
#include
So-da-le! Am Samstag, 19. Oktober 2002 21:20 schrieb Christian Weickhmann:
Hallo Leute! [...] blablabla bla
Danke für jede Hilfe! Christian
OK, hier also das Problem, dass keines mehr ist: Eine Klasse, die ich aus QTab erstellt habe, will partout nicht SLOTs akzeptieren (Trotz Q_OBJECT Makros). Ich war aber der Meinung, dass ich QTab bräuchte, weil ich die Klasse in ein QTabWidget einhängen wollte... Naja. Dem war nicht so: QWidget reicht als vererbende Klasse vollkommen aus. Zusammen mit dem Q_OBJECT Makro funzt es einwandfrei. BTW: Kann ich QTable irgendwie dazu bringen, beim Sortieren einer Spalte die ganze Zeile nach der Spalte zu sortieren? Tschüss, Christian
Attached:
// --------------- asfsportmanager.h // ... 8< ... // alles Wichtige ist bereits #included // class ASFSportManager : public KMainWindow { Q_OBJECT public: ASFSportManager(QWidget* parent=0, const char *name=0); ~ASFSportManager(); public slots: void beenden(); private: // Private methods QVBoxLayout *layout; QTabWidget *tab; tabview *s; tabview *k; KStatusBar *stat; KMenuBar *menue; QPopupMenu *hilfe, *sp_mgr, *verw, *assist; KIconLoader *il; }; // ... >8 ...
// --------------- asfsportmanager.cpp // ... 8< ... s = new tabview(tab, "schueler"); k = new tabview(tab, "kurse"); tab = new QTabWidget(this, "karteireiter"); tab->setGeometry(5, 15, 600, 500); tab->addTab(s, "&Schüler"); tab->addTab(k, "&Kurse"); // ... >8 ....
// --------------- tabview.h
#ifndef TABVIEW_H #define TABVIEW_H
#include
#include #include #include #include #include #include #include #include class tabview : public QTab, QWidget { Q_OBJECT // without this it compiles, but doesn't succeed connect() // with this line it doesn't even compile
public: tabview(QWidget *parent=0, const char *name=0); ~tabview(); void loadConnections();
private slots: void neueZeile(); void filtere(bool); void loescheZeile(); void zeigeDetails();
private: QTable *table; QHBoxLayout *main; QVBoxLayout *knoepfe; KPushButton *neu, *loeschen, *suchen, *details; KPushButton *filter; KIconLoader *il; }; #endif
// ------------ tabview.cpp
#include "tabview.h"
tabview::tabview(QWidget *parent, const char *name) { il = new KIconLoader();
table = new QTable(this);
neu = new KPushButton(QIconSet(QPixmap(il->loadIcon("wizard.png", KIcon::NoGroup))), (const QString)"", this); loeschen = new KPushButton(QIconSet(QPixmap(il->loadIcon("editdelete.png", KIcon::NoGroup))), (const QString)"", this); filter = new KPushButton(QIconSet(QPixmap(il->loadIcon("filter.png", KIcon::NoGroup))), (const QString)"", this); filter->setToggleButton(true); suchen = new KPushButton(QIconSet(QPixmap(il->loadIcon("find.png", KIcon::NoGroup))), (const QString)"", this); details = new KPushButton(QIconSet(QPixmap(il->loadIcon("folder_blue.png", KIcon::NoGroup))), (const QString)"", this);
main = new QHBoxLayout(this, QBoxLayout::LeftToRight); knoepfe = new QVBoxLayout(this, QBoxLayout::Down);
knoepfe->add(neu); knoepfe->add(loeschen); knoepfe->add(filter); knoepfe->add(suchen); knoepfe->add(details); knoepfe->addStretch(); main->addWidget(table); main->addLayout(knoepfe);
loadConnections(); }
tabview::~tabview(){ }
void tabview::neueZeile() { cerr << "New row\n"; } void tabview::loescheZeile(){ } void tabview::filtere(bool f){ } void tabview::zeigeDetails(){ } void tabview::loadConnections(){ connect(neu, SIGNAL(clicked()), SLOT(neueZeile()) ); connect(loeschen, SIGNAL(clicked()), SLOT(loescheZeile()) ); connect(filter, SIGNAL(toggled(bool)), SLOT(filtere(bool)) ); connect(details, SIGNAL(clicked()), SLOT(zeigeDetails()) ); }
-- Celebrate Hannibal Day this year. Take an elephant to lunch.
On Mittwoch, 23. Oktober 2002 18:13, Christian Weickhmann wrote:
Eine Klasse, die ich aus QTab erstellt habe, will partout nicht SLOTs akzeptieren (Trotz Q_OBJECT Makros). Ich war aber der Meinung, dass ich QTab bräuchte, weil ich die Klasse in ein QTabWidget einhängen wollte... Naja.
Ähh... QTab ist nicht von QWidget oder QObject abgeleitet - das kann überhaupt nicht gehen!
Dem war nicht so: QWidget reicht als vererbende Klasse vollkommen aus.
Eben. Vergiß einfach QTab. Das brauchst Du nicht, und das willst Du nicht.
BTW: Kann ich QTable irgendwie dazu bringen, beim Sortieren einer Spalte die ganze Zeile nach der Spalte zu sortieren?
Doku lesen hilft? ;-)
void QTable::sortColumn ( int col, bool ascending = TRUE, bool wholeRows = FALSE ) [virtual]
Sorts column col. If ascending is TRUE the sort is in ascending order, otherwise the sort is in descending order.
If wholeRows is TRUE, entire rows are sorted using swapRows(); otherwise only cells in the column are sorted using swapCells().
CU
--
Stefan Hundhammer
Hallo Stefan!
BTW: Kann ich QTable irgendwie dazu bringen, beim Sortieren einer Spalte die ganze Zeile nach der Spalte zu sortieren?
Doku lesen hilft? ;-)
Schon. Da steht auch was drin. Nur funktioniert das nicht so wie versprochen. Deshalb frage ich. Tschö! -- In Africa some of the native tribes have a custom of beating the ground with clubs and uttering spine chilling cries. Anthropologists call this a form of primitive self-expression. In America we call it golf.
participants (2)
-
Christian Weickhmann
-
Stefan Hundhammer