Portál AbcLinuxu, 13. května 2024 08:11


Dotaz: QT - vkladani vlastniho widgetu

7.12.2005 14:20 Elsik
QT - vkladani vlastniho widgetu
Přečteno: 225×
Odpovědět | Admin
Ahoj udelal sem si hlavni okno MainWindows v nem sem si udelal LayoutGrid a ted to neho postupne vkladam predmety, udelel asem si vlastni widget ale kdyz ho tam pomoci addWidget pridam tak ta se tam sice prida ale protoze nakonci tam davam jeste spacer aby se mi to zarovnalo nahoru tak se ten muj widget uplne smrti na 0 pixelu. Nevite proc? Nevite jak nastavit jeho nejakou velikost aby to ten spacer nemohl takhle zmensit? Dekuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.12.2005 16:25 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: QT - vkladani vlastniho widgetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
jestlize je to potomek QWidgetu, tak tam muzes pouzit nsatevni velikosti pres setMinimumXXXX(), setGeometry() nebo pres "size hinty":

http://doc.trolltech.com/3.3/qwidget.html
Kuolema Kaikille (Paitsi Meille).
7.12.2005 17:21 Elsik
Rozbalit Rozbalit vše Re: QT - vkladani vlastniho widgetu
Dekuji, uz vim jak na to. Ale nastal dalsi problem potrebuju se z toho widgetu dostat nejakym pointrem na hlavni okno kde bude vlozen. V tom widgetu mohl nastavit uz nejaky connecty treba. Jde to nejak? Mozna ze je to blbost se odkazovat na neco co jeste neexistuje ale docela by mi to usnadnilo praci:] Any idea?:]
7.12.2005 19:42 shamot
Rozbalit Rozbalit vše Re: QT - vkladani vlastniho widgetu
pointer na hlavni okno: a] qApp->mainWidget(); kde qApp je globalni poiner na instanci QApplication (ta promenna qApp vzdycky existuje, nemusi se definovat) b] kazdemu widgetu se v konstruktoru predava odkaz na rodicovsky widget (parent), tak toho by se dalo vyuzit

connecty: Pokud potrebujes neco propojit s MainWindow, nejlepe zavolat connect() na urovni tridy QMainWindow, treba v jejim konstruktoru. Stejne ostatni pod-widgety konstruujes z nejake funkce QMainWindow (napr z konstruktoru).
7.12.2005 20:10 Elsik
Rozbalit Rozbalit vše Re: QT - vkladani vlastniho widgetu
Pravda to me nenapadlo:] dekuju pouziju. Necekane mam dalsi dotaz. Proc se mi ted widget nezobrazi po kliknuti na tlacitko Adapters v ten ScrollArea. Nastavi se spravne ten scroll bar ale widget se nezobrazi. kdyz zavolam to addWidget az po vytvoreni "window" tak to jde. nechybi mi tam neco jako repaint nebo update? Dekuji
#include 
#include "window.h"
#include "windowadapters.h"
#include "adapters_compont.h"

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
    {
	window = NULL;
	uii.setupUi(this);
	
	connect(uii.actionExit, SIGNAL(triggered()), this, SLOT(close()));
	
	//  -----------------------------------------------------------------------------

	QPushButton * adapterButton = new QPushButton;
	adapterButton->setText("Adapters");
	uii.vboxLayout->addWidget(adapterButton);
	connect(adapterButton, SIGNAL(clicked()), this, SLOT(ShowAdapters()));
		
	QPushButton * eraseButton = new QPushButton;
	eraseButton->setText("Erase");
	uii.vboxLayout->addWidget(eraseButton);
	connect(eraseButton, SIGNAL(clicked()), this, SLOT(WindowErase()));
	
	QPushButton * exitButton = new QPushButton;
	exitButton->setText("Exit");
	uii.vboxLayout->addWidget(exitButton);
	connect(exitButton, SIGNAL(clicked()), this, SLOT(close()));
	
	QSpacerItem * spacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
	uii.vboxLayout->addItem(spacer1);
	
	scrollArea = new QScrollArea;
	uii.vboxLayout1->addWidget(scrollArea);
	
	// ---------------------------------------------------------------------
	
    }

void MainWindow::ShowAdapters()
    {
	if(window==NULL)
	{
	    window = new windowadapters;
            scrollArea->takeWidget();    
	    scrollArea->setWidget(window);
            scrollArea->setWidgetResizable(window);
	}
    }

void MainWindow::WindowErase()
    {	
	if(window!=NULL)
	{	
	    window->close();
            window=NULL;
	}
	
    }
7.12.2005 20:30 shamot
Rozbalit Rozbalit vše Re: QT - vkladani vlastniho widgetu
a] tento radek je podezrely... proc je tam vboxLayout1, kdyz pred tim pouzivas vboxLayout uii.vboxLayout1->addWidget(scrollArea);

b] nechtelo by to neco jako

window->show();

nebo

uii.update();
7.12.2005 20:36 Elsik
Rozbalit Rozbalit vše Re: QT - vkladani vlastniho widgetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
a] je to vertikalni layout prvni pro menu a druhy pro ten scrollarea b] to update jsem zkousel nepomohlo

add] upravil sem to takhle ale prijde mi zbytecny to mazat, nesel by lepsi zpusob? po tom erase tam klidne ten scrollarea muze zustat jen aby se vypraznil a potom nahral zase dalsi widget (ted stejny ve vysledku jiny)
#include QtGui>
#include "window.h"
#include "windowadapters.h"
#include "adapters_compont.h"

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
    {
	window = NULL;
	uii.setupUi(this);
	
	connect(uii.actionExit, SIGNAL(triggered()), this, SLOT(close()));
	
	//  -----------------------------------------------------------------------------

	QPushButton * adapterButton = new QPushButton;
	adapterButton->setText("Adapters");
	uii.vboxLayout->addWidget(adapterButton);
	connect(adapterButton, SIGNAL(clicked()), this, SLOT(ShowAdapters()));
		
	QPushButton * eraseButton = new QPushButton;
	eraseButton->setText("Erase");
	uii.vboxLayout->addWidget(eraseButton);
	connect(eraseButton, SIGNAL(clicked()), this, SLOT(WindowErase()));
	
	QPushButton * exitButton = new QPushButton;
	exitButton->setText("Exit");
	uii.vboxLayout->addWidget(exitButton);
	connect(exitButton, SIGNAL(clicked()), this, SLOT(close()));
	
	QSpacerItem * spacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
	uii.vboxLayout->addItem(spacer1);
	
	// ---------------------------------------------------------------------
	
    }

void MainWindow::ShowAdapters()
    {
	if(window==NULL)
	{
	    scrollArea = new QScrollArea;	
	    window = new windowadapters;
 	    scrollArea->setWidget(window);
            scrollArea->setWidgetResizable(window);
	    uii.vboxLayout1->addWidget(scrollArea);
	}
    }

void MainWindow::WindowErase()
    {	
	if(window!=NULL)
	{	
	    window->close();
	    window=NULL;
	    delete scrollArea;	
	}
    }

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.