c ++ Zugriff auf übergeordnete Widgets von einer Funktion

8

Ich bin neu in C ++ und Qt und versuche, auf ein Widget von einer Elternklasse zuzugreifen.

Hier ist mein Hauptfenster.cpp

%Vor%

Ich habe eine andere Klasse und versuche auf ein Widget von "ui" in dieser Klasse zuzugreifen. Wie so:

%Vor%

Das gibt mir einen Fehler, der besagt, dass die Methoden und Felder nicht aufgelöst werden konnten. Aber wenn ich die Zeile parent->ui->menuSL->setCurrentIndex(0); in den Konstruktor setze, gibt es kein Problem.

Würde jemand bitte meinen Fehler aufzeigen?

    
user2444217 06.09.2013, 04:06
quelle

2 Antworten

3

Aus dem Code kann man schließen, dass die Klasse DashBoard QObject erbt. Das parent -Feld eines QObject ist als ein Zeiger auf ein QObject definiert. Wenn Sie parent->ui->menuSL->setCurrentIndex(0); innerhalb einer Methode der Klasse DashBoard aufrufen, gehen Sie davon aus, dass QObject ein Element namens% co_de definiert % was nicht wahr ist.

Übergeben Sie einfach so übergeordnete Elemente:

%Vor%

oder dieser:

%Vor%

Im Konstruktor wird der Fehler nicht angezeigt, weil ui als Zeiger auf ein Objekt der Klasse parent definiert ist und dann an den Konstruktor von MainWindow übergeben wird.

Vergessen Sie nicht, QObject public zu machen und den automatisch generierten UI-Header aufzunehmen, wenn Sie Qt Designer (in Ihrem Fall ui ) in der "ui_mainwindow.h" cpp-Datei verwenden.

HINWEIS: Ich versuche nur, Ihre Frage zu beantworten, aber ich ermutige Sie, die Art, wie Sie das tun, zu überprüfen. Es gibt mehrere Möglichkeiten, dasselbe mit einem konsistenteren OO-Design zu erreichen.

    
mhcuervo 06.09.2013 04:31
quelle
2

Innerhalb Ihrer select-Methode versuchen Sie, eine Variable namens parent zu verwenden. Aber Sie benötigen die Methode QObject::parent() .

Außerdem müssen Sie das übergeordnete Element in QMainWindow umwandeln.

%Vor%

Sie können nur auf ui zugreifen, wenn es öffentlich ist.

Ich denke, Sie sollten eine Methode in Ihrer MainWindow -Klasse bereitstellen, die die gewünschte Operation ausführt.

    
Kai Walz 06.09.2013 04:21
quelle

Tags und Links