[Qt] Dostęp do obiektów

0

Witam Serdecznie
Mój problem polega na uzyskaniu dostępu do obiektów klasy nadrzędnej.

class MainWindow : public QMainWindow
{
	Q_OBJECT
public:
	MainWindow();

private:
	QPlainTextEdit *textEdit;

	/* Find Dialog */
	findDialog *findDlg;
};

MainWindow::MainWindow()
{
	findDlg = new findDialog(this);
	textEdit = new QPlainTextEdit;
}

class findDialog : public QWidget
{
	Q_OBJECT
public:
	findDialog(QWidget *parent = 0);
};

findDialog::findDialog(QWidget *parent)
	: QWidget(parent)
{
}

Usiłuję uzyskać dostęp do funkcji find() obiektu textEdit np: z konstruktora findDialog. Bardzo proszę o jakieś wskazówki albo prosty przykład jak można to zrealizować.

0

"klasa zaprzyjaźniona" lub przeorganizuj swoją koncepcję bo próbujesz uzyskać dostęp do pola prywatnego. Poza tym wydaje mi się, że za wcześnie bierzesz się za Qt nie mając podstaw obiektowości.

0

Jeżeli kontrolka textEdit jako rodzica (mainwindow) będzie miała wspólnego z finddialog to powinno pomóc: http://doc.qt.nokia.com/4.6/qobject.html#children

Ogółem obiekty w Qt mają hierarchię rodzice -> dziecioki i powinno śmigać jak się dobrze zrobi.

0

Uzyska dostęp do obiektu ale czy do jego prywatnych pól składowych? Wątpię.

0

No cóż, dopóki chodzi tylko o publiczną funkcję tego obiektu (QPlainTextEdit::find()), chyba nie ma potrzeby zamartwiać się na zapas?

0

Jednak chyba najprostszym sposobem na komunikacje będzie połączenie klas sygnałami. Przykład powinien zamykać okno główne.

class MainWindow : public QMainWindow
{
        Q_OBJECT
public:
        MainWindow();

private:
        QPlainTextEdit *textEdit;

        /* Find Dialog */
        findDialog *findDlg;
};

MainWindow::MainWindow()
{
        findDlg = new findDialog(this);
        textEdit = new QPlainTextEdit;

        connect(&findDlg, SIGNAL(mySignal()), this, SLOT(close()));
}

class findDialog : public QWidget
{
        Q_OBJECT
public:
        findDialog(QWidget *parent = 0);
private slots:
	void closeDialog();
signals:
	void mySignal();
};

findDialog::findDialog(QWidget *parent)
        : QWidget(parent)
{
        button2 = new QPushButton (tr("&Cancel"), this);
	connect(button2, SIGNAL(clicked()), this, SLOT(closeDialog()));
}

void findDialog::closeDialog()
{
	emit mySignal();
}

Niestety coś jest jeszcze nie tak z linijką:

connect(&findDlg, SIGNAL(mySignal()), this, SLOT(close()));

przy komplacji otrzymuje warning o treści: "taking address of temporary".

0

finddlg jest już wskaźnikiem, więc nie ma potrzeby używać '&'.
Btw, to ma tak wyglądać?

        textEdit = new QPlainTextEdit;
 
0

@HiIAmFromPoland źle ciebie zrozumiałem w sumie to sam nie wiem o czym myślałem jak tak teraz patrzę, oczywiście masz rację ;)

co do autora wyrażam głęboką nadzieję, że jeżeli już tworzysz przy pomocy new obiekt ( bez rodzica ) to usuwasz go delete'em? Jeżeli widgetowi przypisujesz rodzica to podczas jego usuwania zwalnia on pamięć po swoich dzieciakach w innym wypadku musisz sam o to zadbać.

0
matek3005 napisał(a)

@HiIAmFromPoland źle ciebie zrozumiałem w sumie to sam nie wiem o czym myślałem jak tak teraz patrzę, oczywiście masz rację ;)

co do autora wyrażam głęboką nadzieję, że jeżeli już tworzysz przy pomocy new obiekt ( bez rodzica ) to usuwasz go delete'em? Jeżeli widgetowi przypisujesz rodzica to podczas jego usuwania zwalnia on pamięć po swoich dzieciakach w innym wypadku musisz sam o to zadbać.

O dziękuje za pomoc, poprawnie powinno być tak?

textEdit = new QPlainTextEdit(this);

1 użytkowników online, w tym zalogowanych: 0, gości: 1