hallo,
ich stehe vor einer gleichen Problematik und schaffs aber mit der Erläuterung noch nicht:
meine Parenklasse ist abgeleitet von QMainWindow und hat ein neues Attribut db bekommen. Das ist ein Pointer auf ein QSqlDatabase.
Code: Alles auswählen
class MainWindow : public QMainWindow, public Ui::MainWindow
{
Q_OBJECT
//
public:
static MainWindow* self( QWidget* = 0 );
QSqlDatabase* db;
...
QMainWindow ruft eine Klasse OpenProjectDialog auf. Dabei wird eine factory-Funktion verwendet und ein Pointer auf das MainWindow übergeben.
Code: Alles auswählen
class OpenProjectDialog : public QDialog, public Ui::OpenProjectDialog {
Q_OBJECT
//
public:
static OpenProjectDialog* self( MainWindow* = 0 );
private:
OpenProjectDialog(MainWindow* = 0 );
..
irgendwann will ich dann aus dem OpenProjectDialog das db im MainWindow ändern:
Code: Alles auswählen
MainWindow* parent = static_cast<MainWindow *>( this->parent());
parent->db->setDatabaseName(LE_Server->text());
wie man sieht, probier ich schon das Ergebnis von this->parent() wieder zum MainWindow zu machen. Dabei bekomme ich aber die Fehlermeldung dass der static_cast illegal wäre.
Ursprünglich hatte ich es ohne static_cast und mit parentWidget() probiert. Das gibt nur ein QWidget zurück, somit beschwert er sich, dass er das QWidget nicht in MainWindow umwandeln kann.
Ich dachte dann, ich müsste wohl die parentWidget() - Funktion so überladen, dass sie ein MainWindow zurückgibt und habe mir qwidget.h angeschaut, wo die Funktion definiert wird:
Code: Alles auswählen
inline QWidget *QWidget::parentWidget() const
{ return static_cast<QWidget *>(QObject::parent()); }
daher dachte ich, ich müsste entsprechend mit meinem Code oben ein MainWindow zurückbekommen. Wie macht man das dann?