Szebb és használhatóbb programok Vezérlőelemek dinamikus felhelyezése
Statikus kezelőfelületek Pro Könnyű létrehozni Gyorsan módosítható Nem kell számolgatni Kontra Nem alkalmazkodik a változásokhoz Több ablakra (formra) van szükség A szerkesztéséhez keretprogram kell
Dinamikus kezelőfelületek Pro Az igényeknek megfelelő elrendezés Elég egy form Módszertanilag elegánsabb megvalósítás Kontra Nehezebb létrehozni Több időbe kerül (újra) átlátni Esetenként sok számolást igényel
Microsoft.NET Visual Studio .Designer.cs és.cs fájl (mert a help használata nehézkes) Mintaelem létrehozása, attribútumok beállítása (designer) Kezelés ellesése (.Designer.cs)
Trolltech QT Designer .ui és.ui.h fájl (mert az assistant sem jobb) Mintaelem fölrakása, tulajdonságok, kapcsolatok beállítása (designer).ui →.h és.cpp (uic)
.ui fájl XML formátum Elődeklaráció: Változó: Tagfüggvény: Slot: Attribútumok: Hozzáférés: access (protected, private) Visszatérés típusa: returnType
Hasonlóságok, eltérések #1.NET Button b = new Button(); this.Controls.Add(b); b.Name = ”PushMe”; b.Location = Location(10, 10); b.Size = new Size(96, 32); b.Text = ”Push me!”; b.Click += new System.EventHandler(pushed); b.Show(); QT QPushButton b = new QPushButton(this, ”PushMe”); b->setGeometry( QRect(10, 10, 96, 32)); b->setText(”Push me!”); connect(b, SIGNAL(clicked()), this, SLOT(pushed())); b->show(); Fontos! Elhagyhat ó
Hasonlóságok, eltérések #2.NET void pushed(object sender, EventArgs e) { Button b = (Button) sender; string name = b.Name; b.BackColor = Color.Green;... } QT void pushed() { QPushButton b = (QPushButton) sender(); QString name = b->name(); b->setPaletteBackgroundColor (QColor(0, 0, 255));... }
Gombsor létrehozása (.NET) #1 private Button[] btn;... void update(int size) { // removing controls... foreach(Button b in btn) this.Container.Remove(b); // we don’t need to ‘delete’ anything, // the garbage collector will clean up the mess...
Gombsor létrehozása (.NET) #2... // creating controls... btn = new Button[size]; for(int i = 0; i < size; ++i) { btn[i] = new Button(); btn[i].Location = new Location( * size, 10); btn[i].Size = new Size(32, 32); btn[i].Text = i.ToString(); this.Container.Add(btn[i]); }
Gombsor létrehozása (QT) #1 private QPushButton** btn;... void update(int size) { // this widget takes control // of the replaced buttons QWidget w(); for(int i = 0; i < size; ++i) btn[i]->reparent(&w, QPoint(0, 0)); // destroy container delete[] btn;...
Gombsor létrehozása (QT) #2... // create container btn = new button[size]; // and the new row... for(int i = 0; i < size; ++i) { btn[i] = new QPushButton(this); btn[i]->setGeometry(QRect( * size, 10, 32, 32)); btn[i]->setText(QString().setNum(i)); btn[i]->show(); }
Példa: moziterem Microsoft.NETTrolltech QT