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?
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.
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.
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.