Qt sloty problem s dynamickou alokaci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Qt sloty problem s dynamickou alokaci – C / C++ – Fórum – Programujte.comQt sloty problem s dynamickou alokaci – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
19. 1. 2013   #1
-
0
-

ahoj,mensi problem,ve tride mam 5 dynamicky vytvorenych tlacitek v konstruktoru a kdyz stisknu tlacitko nejake tak k nim chci ve slotu pristupovat,ale vyhodi to chybu jako by pamet vubec nebyla alokovana. 

gui.cpp: 

gui::gui (mujserver * server)
{
	QLabel * popisekAdresa=new QLabel ("adresa");
	QLabel * popisekPort=new QLabel ("port");
	QLabel * popisekZprava=new QLabel ("zprava");
	QString textZpravy,adresa;
	QPushButton * kickClient=new QPushButton ("vykopnout klienta");
	QPushButton *kickAllClients=new QPushButton ("vykopnout vsechny klienty");
	QPushButton *sendMsg=new QPushButton ("posli zpravu");
	QPushButton *startServer=new QPushButton ("nastartovat");
	QPushButton *stopServer=new QPushButton ("stop");
	QPushButton * nastavit=new QPushButton ("nastavit");
	QHBoxLayout *layout=new QHBoxLayout ();
	QHBoxLayout * layout2=new QHBoxLayout ();
	QVBoxLayout * Vlayout=new QVBoxLayout ();
	QComboBox * listClients=new QComboBox ();
	QLineEdit * adresaEdit=new QLineEdit ();
	QLineEdit *portEdit=new QLineEdit ();
	QLineEdit *zpravaEdit=new QLineEdit ();
	QWidget * widget=new QWidget (this);
	QWidget * widget2=new QWidget (this);
	this->server=server;
	startServer->setEnabled (false);
	stopServer->setEnabled (false);
	//sendMsg->setEnabled (false);
	kickClient->setEnabled (false);
	kickAllClients->setEnabled (false);
	layout->addWidget (kickClient);
	layout->addWidget (kickAllClients);
	layout->addWidget (sendMsg);
	layout->addWidget (startServer);
	layout->addWidget (stopServer);
	layout->addWidget (listClients);
	layout2->addWidget (popisekAdresa);
	layout2->addWidget (adresaEdit);
	layout2->addWidget (popisekPort);
	layout2->addWidget (portEdit);
	layout2->addWidget (popisekZprava);
	layout2->addWidget (zpravaEdit);
	layout2->addWidget (nastavit);
	widget->setLayout (layout);
	widget2->setLayout (layout2);
	Vlayout->addWidget (widget);
	Vlayout->addWidget (widget2);
	this->setLayout (Vlayout);
	connect (startServer,SIGNAL (clicked ()),this,SLOT (start()));
	connect (stopServer,SIGNAL (clicked ()),this,SLOT (stop()));
	connect (kickClient,SIGNAL (clicked ()),this,SLOT (kick()));
	connect (kickAllClients,SIGNAL (clicked ()),this,SLOT (KickAll()));
	connect (sendMsg,SIGNAL (clicked ()),this,SLOT (send()));
	connect (nastavit,SIGNAL (clicked()),this,SLOT (nastav()));
	show ();
}
void gui::start ()
{
	server->start ();
}
void gui::stop ()
{
	server->stop ();
}
void gui::kick ()
{
	
}
void gui::KickAll ()
{
	server->KickAll ();
}
void gui::send ()
{
	QString text=zpravaEdit->text ();
	server->send (text);
}
void gui::SendAll ()
{

}
void gui::nastav ()
{
	adresa=adresaEdit->text ();
	QString portS=portEdit->text ();
	port=portS.toInt ();
	startServer->setEnabled (true);
	stopServer->setEnabled (true);
	sendMsg->setEnabled (true);
	kickClient->setEnabled (true);
	kickAllClients->setEnabled (true);
}

gui.h
 

#ifndef GUI
#define GUI
#include "header.h"
#include "mujserver.h"
class gui:public QWidget
{
	Q_OBJECT
private:
	int port;
	QString textZpravy,adresa;
	QWidget *widget,*widget2;
	QComboBox * listClients;
	QPushButton * kickClient,*kickAllClients,*sendMsg,*startServer,*stopServer,*nastavit;
	QHBoxLayout * layout,*layout2;
	QVBoxLayout * Vlayout;
	QTextBrowser * stavovyText;
	QLineEdit * adresaEdit,*portEdit,*zpravaEdit;
	mujserver * server;
	QLabel *popisekAdresa,*popisekPort,*popisekZprava;
public:
	gui (mujserver * server);
	private slots:
	void stop ();
	void start ();
	void KickAll();
	void kick ();
	void send ();
	void SendAll ();
	void nastav ();
};
#endif GUI

poradte prosim cim to je,uz si s tim nevim rady. vzdyt pamet sem prece alokoval.

Nahlásit jako SPAM
IP: 86.49.56.–
crazy
~ Moderátor
+10
Grafoman
19. 1. 2013   #2
-
0
-

#1 rodinne.baleni.ryze
udělej ty tlačítka jako privátní atributy třídy gui.

pak v konstruktoru alokuj:

class gui {
	Q_OBJECT
private:
	QPushButton *prvni;
	...
};

gui::gui() {
	prvni = new QPushButton(this);
	...
	connect(prvni, SIGNAL(clicked),
		this, SLOT(...));
	...
}
Nahlásit jako SPAM
IP: 147.32.31.–
All you need is vision and time.
crazy
~ Moderátor
+10
Grafoman
19. 1. 2013   #3
-
0
-

a kde vůbec vytváříš ty layouty?

Nahlásit jako SPAM
IP: 147.32.31.–
All you need is vision and time.
19. 1. 2013   #4
-
0
-

tak vytvarim,nebo sem si aspon myslel ze je vytvarim tady. 
v hlavickovem:
QPushButton * kickClient,*kickAllClients,*sendMsg,*startServer,*stopServer,*nastavit;
a ve zdrojovem kodu
QPushButton * kickClient=new QPushButton ("vykopnout klienta");
QPushButton *kickAllClients=new QPushButton ("vykopnout vsechny klienty");
QPushButton *sendMsg=new QPushButton ("posli zpravu");
QPushButton *startServer=new QPushButton ("nastartovat");
QPushButton *stopServer=new QPushButton ("stop");
QPushButton * nastavit=new QPushButton ("nastavit");
a ja je jako privatni atributy uz mam nebo to delam spatne? asi delam.dekuju za radu jeste se nato podivam

Nahlásit jako SPAM
IP: 86.49.56.–
20. 1. 2013   #5
-
0
-

pomozte prosim :( vubec si s tim nevim rady. prece je vytvarim spravne ne? mam to stejne jako ty

Nahlásit jako SPAM
IP: 86.49.56.–
Řešení
crazy
~ Moderátor
+10
Grafoman
20. 1. 2013   #6
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#5 rodinne.baleni.ryze
nemáš...

1) v konstruktoru vytváříš nové proměnné: QPushButton *button = new QPushButton(this); není to samé jako button = new QPushButton(this);

2) nevytváříš nikde ty layouty... musíš to udělat stejně jako s těmi tlačítky...

čili ve třídě:

class gui {
	QVBoxLayout * lay1;
};

a konstruktor:
gui::gui()
{
	button = new QPushButton...
	...
	lay1 = new QVBoxLayout(this);
	lay1->addWidget(button);
	
	connect(button, SIGNAL(clicked()), this, SLOT(...));
}
Nahlásit jako SPAM
IP: 147.32.31.–
All you need is vision and time.
x
~ Anonymní uživatel
5 příspěvků
20. 1. 2013   #7
-
0
-

moc dekuju uz to vidim,uplne sem to prehledl. dekuju za pomoc

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 80.239.242.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 108 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý