[C++] pointer probleem?

Pagina: 1
Acties:

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46
Ik sta op het punt om gek te worden. Ik vast iets heel simpels over het hoofd, maar ik kom er niet uit.

Ik probeer voor een KDE applicatie een class te compilen die de volgende simpele constructor heeft:
code:
1
2
3
4
5
6
CenterToDialog::CenterToDialog(QWidget *parent, const QString& caption)
 : KDialogBase( parent, "centerToDialog", true, caption, Ok|Cancel, Ok, true )
{
  QGridLayout* page = new QGridLayout(this, 2, 2, 2, -1, "grid");
  this->setMainWidget(page);
}

Ik krijg echter deze error:
code:
1
2
3
4
5
6
7
centertodialog.cpp: In method `CenterToDialog::CenterToDialog (QWidget 
*, const QString &)': 
centertodialog.cpp:28: no matching function for call to 
`CenterToDialog::setMainWidget (QGridLayout *&)' 
/usr/include/kde/kdialogbase.h:767: candidates are: void 
KDialogBase::setMainWidget (QWidget *) 
gmake: *** [centertodialog.o] Error 1

Hoe ik ook worstel met *'s en &'s, ik krijg het niet voor elkaar. Ik begrijp vooral de uitdrukking (QGridLayout *&) niet. Hoe komt hij erbij dat het een adres van een pointer naar een object betreft (als ik de *& goed begrijp)?! :?

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:04
Heeft uw class wel een member functie setMainWidget en neemt die functie dan ook een pointer als argument.
Maw, ziet de function prototype er als volgt uit?
code:
1
void CenterToDialog::setMainWidget(QGridLayout*);

https://fgheysels.github.io/


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46
Ja, de class is afgeleid van KDialogBase (gedocumenteerd op http://www.ph.unimelb.edu.au/~ssk/kde/srcdoc/kdeui/KDialogBase.html
De foutmelding geeft ook al aan dat hij wel kandidaten kan vinden, maar dat die een argument QWidget* verwacht, terwijl ik volgens de compiler een QGridLayout *& geef (waarbij QGridLayout een afgeleide klasse is van QWidget, allebij afkomstig uit de QT (3) toolkit).

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Is een QGridLayout afgeleid van een QWidget? Als dat het geval is zou je kunnen proberen hem te casten naar QWidget bij je aanroep naar setMainWidget.
code:
1
2
3
4
5
6
CenterToDialog::CenterToDialog(QWidget *parent, const QString& caption)
 : KDialogBase( parent, "centerToDialog", true, caption, Ok|Cancel, Ok, true )
{
  QGridLayout* page = new QGridLayout(this, 2, 2, 2, -1, "grid");
  this->setMainWidget((QWidget *)page);
}

[disclaimer]
Nou ben ik niet heel erg bekend met QT, dus voor het zelfde geld blaat ik hier enorme onzin :)[/disclaimer]

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46
OK... Dit compileert :)
Dank je wel!

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46
Ahhh!!! |:( |:(
Ik heb nog een echt goed naar de QT documentatie gekeken, en ik zag tot mijn verbazing dat de QGridLayout niet is afgeleid van QWidget, en het dus helemaal niet raar is dat het niet werkte! |:(
Neem een QGrid en het werkt wel.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant

Pagina: 1