Seite 1 von 1
ui member in statischer funktion!?
Verfasst: 23. Oktober 2010 00:12
von realdarkman71
Hallo Leute,
ich habe mit dem Designer mein Hauptfenster gestaltet. In der Hauptklasse ist dann ja das Objekt ui, mit dem ich auf die Widgets im Fenster zugreifen kann. Jetzt habe ich in der gleiche Klasse eine statische Funktion, in der ich über das ui Objekt auf die Widgets zugreifen möchte. Klappt aber leider nicht! Der Compiler sagt immer: invalid use of member ‘MainWindow::ui’ in static member function
Wie kann ich das lösen?
Danke und Gruß
Chris
Verfasst: 23. Oktober 2010 08:08
von franzf
Wie willst du darauf zugreifen? Wofür brauchst du das in einer statzischen Funktion? Bitte Code! Thx
Verfasst: 23. Oktober 2010 12:05
von realdarkman71
Ich möchte aus einer anderen Klasse einen Text zur MainWindow-Klasse (über die statischen Funktion) zurückgeben und dort den Text in ein QPlainTextEdit schreiben. Nur kann ich nicht innerhalb der statischen Funktion auf die ui-> Widgets zugreifen!
MainWindow.h:
MainWindow.cpp:
Code: Alles auswählen
MainWindow::writeText(QString text) {
ui->plainTextEdit->appendPlainText(text);
}
= invalid use of member ‘MainWindow::ui’ in static member function
Verfasst: 23. Oktober 2010 12:12
von solarix
realdarkman71 hat geschrieben:Ich möchte aus einer anderen Klasse einen Text zur MainWindow-Klasse zurückgeben und dort den Text in ein QPlainTextEdit schreiben.
Dann sende ein Signal....
hth...
Verfasst: 23. Oktober 2010 12:29
von Christian81
... oder mache writeText nicht statisch.
Verfasst: 23. Oktober 2010 13:01
von realdarkman71
Ein Signal ist eine gute Idee! Wenn ich die Funktion nicht statisch mache, bleibt das QPlainTextEdit immer leer!
In der anderen Klasse:
Code: Alles auswählen
MainWindow *mainWindow = new MainWindow();
mainWindow->writeTexte("Test!");
Kompiliert zwar ohne Fehler, aber das TextEdit bleibt leer!
Verfasst: 23. Oktober 2010 13:16
von padreigh
Kurzform static:
Mit static deklariertes funktioniert ohne konkretes Objekt, deshalb muss gewährleistet sein das alle Sachen die das static deklarierte anfasst auch static sind (das gilt nur für ebenfalls static deklarierte Sachen). Da statics auch ohne Objekt funktionieren gibts das nur einmal pro Klasse, änderst du einen statischen member in einer Instanz des Objekts gilt das ebenso für den statischen member der anderen (die sind in Wirklichkeit ja einunddasselbe).
Code: Alles auswählen
class Demo {
static int gibts_ohne_objekt;
int gibts_nicht_ohne_objekt;
public:
// init des nicht statischen
Demo () : gibts_nicht_ohne_objekt(-10) { }
static int gibsmir1 { return gibts_ohne_objekt; }
int gibsmir2 { return gibts_nicht_ohne_objekt; }
};
// init des statischen
int Demo::gibts_ohne_objekt = 5;
int main() {
Demo d;
std::cout << Demo::gibsmir1() << std::endl;
std::cout << Demo::gibsmir2() << std::endl; // error
std::cout << d.gibsmir1() << std::endl;
std::cout << d.gibsmir2() << std::endl;
}
Minibeispiel zum Thema connect:
Code: Alles auswählen
#ifndef MW_H
#define MW_H
#include <QMainWindow>
class QPlainTextEdit;
class QDialog;
class MW : public QMainWindow
{
public:
MW(QWidget * parent = 0, Qt::WindowFlags flags = 0);
~MW();
private:
QPlainTextEdit * pte;
QDialog * dia;
};
#endif // MW_H
Code: Alles auswählen
#include "mw.h"
#include <QFrame>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QPlainTextEdit>
#include <QDialog>
MW::MW(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent,flags)
{
setContentsMargins(10,10,10,10);
pte = new QPlainTextEdit(this);
pte->setFrameStyle(QFrame::Panel|QFrame::Sunken);
setCentralWidget(pte);
dia = new QDialog(0, Qt::Dialog|Qt::CustomizeWindowHint);
QHBoxLayout * hbl = new QHBoxLayout(dia);
QLineEdit * le = new QLineEdit("enter text here");
hbl->addWidget(le);
dia->show();
connect(le,SIGNAL(textChanged(QString)),pte,SLOT(appendPlainText(QString)));
}
MW::~MW()
{
dia->close();
}
Auf Elemente in ui kannst du auch mit ui->widgetname zugreifen ...
Verfasst: 23. Oktober 2010 13:46
von realdarkman71
Das mit dem Thema Signal/Slots ist schon klar! Ich habe das nun mit einem Signal gelöst! Ich hätte da aber auch selber drauf kommen können/sollen/müssen (ist ja auch so Qt like), statt hier das Forum vollzuspammen ... sorry!
Trotzdem vielen Dank für Eure Hilfe! ...manchmal sieht man den Wald vor lauter Bäumen nicht!
Gruß
Chris