<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Zugriff auf UI elemente in anderer Klasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein Zugriffsproblem auf UI-Elementen in einer anderen Klasse. In meinem Programm habe ich ein zweites QMainWindow (initialziert in secondWindow.h), in der secondWindow.cxx Klasse kann ich auf alle GUI-Elemente problemlos zugreifen aber wenn ich in der &quot;read.cxx&quot; Klasse auf UI-Elemente zugreifen will, bekomme ich segmentation fault. Wo könnte mein Fehler liegen? Danke im voraus.</p>
<pre><code>-----------------------------secondWindow.h----------------------------------

#ifndef __secondWindow_h
#define __secondWindow_h

#include &quot;ui_secondwindow.h&quot;

class secondWindow : public QMainWindow
{
    friend class read;
    igstkStandardClassBasicTraitsMacro(secondWindow, QMainWindow);
    Q_OBJECT

public:
    igstkStateMachineMacro();

    secondWindow();
    virtual ~secondWindow();
    void createSignalAndSlots();

public slots:
    void secondWindowTest();

protected:

private:
    Ui::secondMainWindow m_secondWindowUI;
};
#endif

----------------------------secondWindow.cxx---------------------------------

#include &quot;secondWindow.moc&quot;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;

secondWindow::secondWindow() :m_StateMachine(this)
{
    m_secondWindowUI.setupUi(this);
    createSignalAndSlots();
}

void secondWindow::createSignalAndSlots()
{
    connect(m_secondWindowUI.pushButton1, SIGNAL(clicked()),this, SLOT(secondWindowTest()));

    connect(m_secondWindowUI.pushButton2, SIGNAL(clicked()), read::instance(), SLOT(readTest()));
}

void secondWindow::secondWindowTest()
{
    m_secondWindowUI.pushButton1-&gt;setEnabled(true); //OK
}

secondWindow::~secondWindow(){}

---------------------------------read.h--------------------------------------

#pragma once

#include &quot;secondWindow.h&quot;

class read : public QObject
{
    Q_OBJECT

public:
    static read *instance();
    read();
    virtual ~read() {}

public slots:
    void readTest();

protected:
    secondWindow	*m_readUI;
    static read 	*m_read;

private:
};

---------------------------------read.cxx--------------------------------------
#include &lt;read.moc&gt;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;

read *read::m_read= NULL;

read::read()
{
    m_readUI = dynamic_cast&lt;secondWindow*&gt;( QApplication::instance() );
}

read *read::instance()
{
    if(m_read == NULL)
    m_read = new read();

    return m_read;
}

void read::readTest()
{
    m_readUI-&gt;m_secondWindowUI.qlabelTest-&gt;setText(&quot;test&quot;); //segmentation fault
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/315785/zugriff-auf-ui-elemente-in-anderer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 09:49:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315785.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Apr 2013 18:56:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriff auf UI elemente in anderer Klasse on Thu, 11 Apr 2013 19:52:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein Zugriffsproblem auf UI-Elementen in einer anderen Klasse. In meinem Programm habe ich ein zweites QMainWindow (initialziert in secondWindow.h), in der secondWindow.cxx Klasse kann ich auf alle GUI-Elemente problemlos zugreifen aber wenn ich in der &quot;read.cxx&quot; Klasse auf UI-Elemente zugreifen will, bekomme ich segmentation fault. Wo könnte mein Fehler liegen? Danke im voraus.</p>
<pre><code>-----------------------------secondWindow.h----------------------------------

#ifndef __secondWindow_h
#define __secondWindow_h

#include &quot;ui_secondwindow.h&quot;

class secondWindow : public QMainWindow
{
    friend class read;
    igstkStandardClassBasicTraitsMacro(secondWindow, QMainWindow);
    Q_OBJECT

public:
    igstkStateMachineMacro();

    secondWindow();
    virtual ~secondWindow();
    void createSignalAndSlots();

public slots:
    void secondWindowTest();

protected:

private:
    Ui::secondMainWindow m_secondWindowUI;
};
#endif

----------------------------secondWindow.cxx---------------------------------

#include &quot;secondWindow.moc&quot;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;

secondWindow::secondWindow() :m_StateMachine(this)
{
    m_secondWindowUI.setupUi(this);
    createSignalAndSlots();
}

void secondWindow::createSignalAndSlots()
{
    connect(m_secondWindowUI.pushButton1, SIGNAL(clicked()),this, SLOT(secondWindowTest()));

    connect(m_secondWindowUI.pushButton2, SIGNAL(clicked()), read::instance(), SLOT(readTest()));
}

void secondWindow::secondWindowTest()
{
    m_secondWindowUI.pushButton1-&gt;setEnabled(true); //OK
}

secondWindow::~secondWindow(){}

---------------------------------read.h--------------------------------------

#pragma once

#include &quot;secondWindow.h&quot;

class read : public QObject
{
    Q_OBJECT

public:
    static read *instance();
    read();
    virtual ~read() {}

public slots:
    void readTest();

protected:
    secondWindow	*m_readUI;
    static read 	*m_read;

private:
};

---------------------------------read.cxx--------------------------------------
#include &lt;read.moc&gt;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;

read *read::m_read= NULL;

read::read()
{
    m_readUI = dynamic_cast&lt;secondWindow*&gt;( QApplication::instance() );
}

read *read::instance()
{
    if(m_read == NULL)
    m_read = new read();

    return m_read;
}

void read::readTest()
{
    m_readUI-&gt;m_secondWindowUI.qlabelTest-&gt;setText(&quot;test&quot;); //segmentation fault
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2314847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314847</guid><dc:creator><![CDATA[nasil122002]]></dc:creator><pubDate>Thu, 11 Apr 2013 19:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf UI elemente in anderer Klasse on Thu, 11 Apr 2013 19:01:37 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du m_readUI auch initialisieren, bevor du es verwendest...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314851</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 11 Apr 2013 19:01:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf UI elemente in anderer Klasse on Thu, 11 Apr 2013 19:24:21 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Vielleicht solltest du m_readUI auch initialisieren, bevor du es verwendest...</p>
</blockquote>
<pre><code>protected: 
     secondWindow    *m_readUI;
</code></pre>
<p>Ist es somit nicht initializiert? verstehe nicht. Beim indexieren (ctrl+space) in eclipse sind alle UI elemente sichtbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314858</guid><dc:creator><![CDATA[nasil122002]]></dc:creator><pubDate>Thu, 11 Apr 2013 19:24:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf UI elemente in anderer Klasse on Thu, 11 Apr 2013 19:53:13 GMT]]></title><description><![CDATA[<p>Nein. Der Zeiger ist definiert.<br />
Beim Erzeugen des Objektes (via Konstruktor) wird die rohe sizeof(zeiger) lange Bitfolge als Adresse interpretiert auf das der Zeiger nun zeigt.<br />
Wenn du ihn nun verwendest wird das Objekt, was auch immer auf dieser Adresse ist, als secondWindow interpretiert und die rohe Bytefolge evtl. verändert. Das ergibt einen segmentation fault (schutzverletzung), weil dein Programm Werte verändert, die es nicht veränden dürfte (z.B. Variablen von anderen Programmen oder so).<br />
Deshalb solltest du den Zeiger im Konstruktor initialisieren, sprich, er soll auf ein Objekt zeigen, was dir auch gehört.</p>
<p>Edit: Das, was du auskommentiert hattest, war schon richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314861</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 11 Apr 2013 19:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf UI elemente in anderer Klasse on Tue, 23 Apr 2013 14:26:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Tut mir leid für verspätete Antwort. segmentation fault habe ich jetzt hinter mir, in mein Programm habe ich zusätzlich eine neue Klasse &quot;app&quot; hinzugefügt, in der ich benötighte Initialisierungen vornehme. Aber dieses Mal habe ich ein anderes Problem. Wenn ich auf dem &quot;secondWindow&quot; aufs &quot;pushButton2&quot; klicke, passiert gar nichts, keine reaktion. Vllt. sollte ich mein ganzes Programm posten, damit Sie mir weiter helfen können.</p>
<p>Danke im Voraus.</p>
<pre><code>-----------------------------mainWindow.h----------------------------------
#ifndef __mainWindow_h
#define __mainWindow_h

#include &quot;ui_mainWindow.h&quot;
#include &quot;app.h&quot;

class mainWindow : public QMainWindow
{
	friend class app;
	friend class write;
	igstkStandardClassBasicTraitsMacro(mainWindow, QMainWindow);
	Q_OBJECT

public:
	igstkStateMachineMacro();

	mainWindow();
	virtual ~mainWindow();
	void createSignalAndSlots();

public slots:
	void openSecondWindow();
	void mainWindowTest();

private:
	Ui::mainWindow	m_mainWindowUI;
};
#endif

-----------------------------mainWindow.cxx----------------------------------
#include &quot;mainWindow.moc&quot;
#include &quot;mainWindow.h&quot;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;
#include &quot;write.h&quot;

mainWindow::mainWindow() : m_StateMachine(this)
{
	m_mainWindowUI.setupUi(this);
	createSignalAndSlots();
}

mainWindow::~mainWindow(){}

void mainWindow::createSignalAndSlots()
{
	connect(m_mainWindowUI.menuOpenAction, SIGNAL(triggered()), this, SLOT(openSecondWindow()));
	connect(m_mainWindowUI.pushButton1, SIGNAL(clicked()), this, SLOT((mainWindowTest()));
	connect(m_mainWindowUI.pushButton2, SIGNAL(clicked()), write::instance(), SLOT((writeTest()));
}

void mainWindow::openSecondWindow()
{
	secondWindow  *secondWin = new secondWindow(); 
	secondWin-&gt;show();
}

void mainWindow::mainWindowTest()
{
   m_mainWindowUI.pushButton1-&gt;setEnabled(true); //OK, es funktioniert
}

-----------------------------write.h----------------------------------
#pragma once

#include &quot;mainWindow.h&quot;

class write : public QObject
{
    Q_OBJECT

public:
    static write *instance();
    write();
    virtual ~write() {}

public slots:
    void writeTest();

protected:
    app			*m_writeUI;
    static write 	*m_write;

private:
};

-----------------------------write.cxx----------------------------------
#include &lt;write.moc&gt;
#include &quot;mainWindow.h&quot;
#include &quot;write.h&quot;

write *write::m_write= NULL;

write::write()
{
	m_writeUI = dynamic_cast&lt;app*&gt;(QApplication::instance());
}

write *write::instance()
{
    if(m_write == NULL)
    m_write = new write();

    return m_write;
}

void write::writeTest()
{
    m_writeUI-&gt;m_mainWindowUI.mainQLabelTest-&gt;setText(&quot;main label test&quot;); //OK, es funktioniert
}
</code></pre>
<pre><code>-----------------------------secondWindow.h----------------------------------
#ifndef __secondWindow_h
#define __secondWindow_h

#include &quot;ui_secondWindow.h&quot;
#include &quot;app.h&quot;

class secondWindow : public QMainWindow
{
    friend class read;
	friend class app;
    igstkStandardClassBasicTraitsMacro(secondWindow, QMainWindow);
    Q_OBJECT

public:
    igstkStateMachineMacro();

    secondWindow(QWidget *parent= 0);
    virtual ~secondWindow();
    void createSignalAndSlots();

public slots:
    void secondWindowTest();

private:
    Ui::secondWindow	m_secondWindowUI;
};
#endif

-----------------------------secondWindow.cxx----------------------------------
#include &quot;secondWindow.moc&quot;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;

secondWindow::secondWindow(QWidget *parent) :m_StateMachine(this)
{
    m_secondWindowUI.setupUi(this);
    createSignalAndSlots();
}

secondWindow::~secondWindow(){}

void secondWindow::createSignalAndSlots()
{
    connect(m_secondWindowUI.pushButton1, SIGNAL(clicked()),this, SLOT(secondWindowTest()));
    connect(m_secondWindowUI.pushButton2, SIGNAL(clicked()), read::instance(), SLOT(readTest()));
}

void secondWindow::secondWindowTest()
{
    m_secondWindowUI.pushButton1-&gt;setEnabled(true); //OK, es funktioniert
}

-----------------------------read.h----------------------------------
#pragma once

#include &quot;secondWindow.h&quot;

class read : public QObject
{
    Q_OBJECT

public:
    static read *instance();
    read();
    virtual ~read() {}

public slots:
    void readTest();

protected:
    app			*m_readUI;
    static read 	*m_read;

private:
};

-----------------------------read.cxx----------------------------------
#include &lt;read.moc&gt;
#include &quot;secondWindow.h&quot;
#include &quot;read.h&quot;

read *read::m_read= NULL;

read::read()
{
    m_readUI = dynamic_cast&lt;app*&gt;(QApplication::instance());
}

read *read::instance()
{
    if(m_read == NULL)
    m_read = new read();

    return m_read;
}

void read::readTest()
{
    m_readUI-&gt;m_secondWindowUI.secondQLabelTest-&gt;setText(&quot;second label test&quot;); //FEHLER, es passiert nichts
}
</code></pre>
<pre><code>-----------------------------app.h----------------------------------
#pragma once

class mainWindow; 
class secondWindow;

class app : public QApplication
{
  Q_OBJECT
  igstkStandardClassBasicTraitsMacro(app, QApplication);

  friend class read;
  friend class write;
  friend class mainWindow;
  friend class secondWindow;

public:
  app(int&amp; argc, char **argv);
  virtual ~app() {}

protected:
	mainWindow	*m_mainWin;
	secondWindow	*m_secondWin;

	void setMainWindow(mainWindow *mainWindow)
	{
		m_mainWin = mainWindow;
	}

	void setSecondWindow(secondWindow *secondWindow)
	{
		m_secondWin = secondWindow;
	}
private:
};

-----------------------------app.cxx----------------------------------
#include &quot;app.moc&quot;
#include &quot;app.h&quot;

app::app(int&amp; argc, char **argv): QApplication(argc, argv), m_StateMachine(this){
}

-----------------------------main.cxx----------------------------------
#include &quot;mainWindow.h&quot;
#include &quot;secondWindow.h&quot;
#include &quot;app.h&quot;

int main(int argc, char** argv)
{ 
	app app(argc, argv);

	mainWindow main;
	secondWindow second;

	app.setMainWindow(&amp;main);
	app.setSecondWindow(&amp;second);

	main.showMaximized();

	return app.exec();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317768</guid><dc:creator><![CDATA[nasil122002]]></dc:creator><pubDate>Tue, 23 Apr 2013 14:26:34 GMT</pubDate></item></channel></rss>