2017-04-08 4 views
0

Ich baue eine QT-Anwendung, in der ich auf ui-Elemente zugreifen muss. aber ich bin immer Fehler wieBenutze UI-Elemente aus der statischen Funktion

ungültige Verwendung von Mitglied ‚foo :: ui‘ in statischer Memberfunktion

Der Code groß ist, so hier kann nicht hinzuzufügen.

Erklärung ui

private: 
Ui::foo *ui; 

Initialisierung in Constructor

foo::foo(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::foo) 
{ 
    ui->setupUi(this); 
} 

in statischer Funktion Zugriff, wo es Fehler gibt.

ui->fp->setText("Some Text"); 

Statische Funktionsdeklaration.

static I eventCallback(PVOID i_pv_context, 
     T_xyz i_i_command, 
     PVOID i_pv_param); 

Hauptcode

int main(int argc, char *argv[]) 
    { 
    QApplication a(argc, argv); 
    BarrierInterfaceModule w; 
    w.show(); 
    return a.exec(); 
    } 

Ich habe im Internet gesucht, aber nicht Lösung bekommen haben. Bitte lassen Sie mich wissen, ob es einen Weg gibt, around.let mich wissen, wenn Sie weitere Informationen Vielen Dank im Voraus brauchen

+0

Nun, der Fehler sagt es. 'ui' ist nicht statisch, so dass Sie es nicht ohne ein Objekt in einer statischen Methode verwenden können. Warum brauchst du diese Methode, um statisch zu sein und kannst du auch 'ui' statisch machen? –

+0

Ihr Fehlercode ist einfach. Jede * nicht-statische Member-Funktion * muss über ein Objekt aufgerufen werden. – WhiZTiM

+0

@SamiKuhmonsen ist eine Third-Party-Funktion also muss es statisch sein. – RPK

Antwort

0

Ich bin mir dessen bewusst zwei mögliche Lösungen:

  1. Verwenden Sie ein singleton class für foo. Diese Methode funktioniert nur, wenn Sie nur eine Instanz von foo benötigen, was wahrscheinlich der Fall ist, weil es sich um eine QMainWindow handelt. Jetzt können Sie den Text wie folgt festlegen: getInstance()->ui->fp->setText("Some Text");
  2. Oft Callback-Funktion können einen Zeiger auf Benutzerdaten übergeben, aber das hängt von der Bibliothek ab, die Sie verwenden.
+0

danke für die antwort ich bin auch zu demselben schluss gekommen (singleton zu benutzen). aber mein Objekt wird in main als int int erzeugt (int argc, char * argv []) { QApplication a (argc, argv); BarrierInterfaceModul w; w.show(); Rückgabe a.exec(); } ' – RPK

+0

Entschuldigung für schlechtes Format des obigen Kommentars. Ich weiß nicht, wie man Singleton in diesem Fall verwendet. – RPK

+0

Warum überschreiben Sie es nicht als: BarrierInterfaceModule :: getInstance() -> show(); ' – m7913d

Verwandte Themen