Stručný průvodce vytvářením GUI v C++/Qt

Slides:



Advertisements
Podobné prezentace
Makra v Excelu.
Advertisements

(instance konkrétní třídy)
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Martin Dlouhý. Vytvořeno dne Nový začátek (New start) CZ.1.07/1.4.00/
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Styly, záhlaví a zápatí, oddíly
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Vytvoření dokumentu bylo financováno ze zdrojů Evropského sociálního fondu a státního rozpočtu ČR. Název projektu: Výuka programování na střední škole.
• Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49 Výukový materiál zpracovaný v rámci projektu „Učíme moderně“ Registrační číslo projektu:
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Přednáška 11 Jiří Šebesta
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Vzhled prezentace - šablony
CZ.1.07/1.4.00/ VY_32_INOVACE_133_IT7 Výukový materiál zpracovaný v rámci projektu Vzdělávací oblast: Informační a komunikační technologie Předmět:Informatika.
Programování v C++ Cvičení.
VÝPOČTY V TISKOVÝCH SESTAVÁCH SESTAVÁCH Lenka Buchtová, 4. y.
Výpočetní technika Akademický rok 2011/2012 Letní semestr Novák Petr
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Vzdělávací materiál / DUMVY_32_INOVACE_02B14 Příkazový řádek: obsah souborů PŘÍKLADY AutorIng. Petr Haman Období vytvořeníLeden 2013 Ročník / věková kategorie3.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Číslo šablony: III/2 VY_32_INOVACE_P4_3.7 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze - sestava Typ: DUM - kombinovaný Předmět:
Tvorba prezentací v programu PowerPoint Autor: ing. Jaroslav Mochan
MS PowerPoint Prezentační manažer Kapitola 13.1 (Schránka a operace se schránkou)
14. Textový editor ( VKLÁDÁNÍ dalších objektů do textu…)
OS Windows. Tento operační systém byl vytvořen pro snazší ovládání počítače běžnými uživateli. Například stačí jednou definovat připojená zařízení (tiskárny…)
C# - Exceptions (výjimky)
Objektové programování
Dynamická alokace, polymorfismus
 Microsoft Word  Je textový procesor od firmy Microsoft, který je součástí kancelářského balíku Microsoft Office.
Uživatelská rozhraní Průvodce problematikou konstruování GUI Eduard Sojka URO, Léto 2003/4 VŠB – Technická univerzita Ostrava.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
ActionScript Moderní počítačové aplikace. Charakteristika Je odvozen od JavaScriptu Integruje do Flashe interaktivní ovládání Umožňuje vytvořit přehledné.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Informace a Internet Bohumil Bareš. Grafický editor GIMP (1)  úvod  seznámení s programem  výběry  práce se schránkou 2.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Základní škola a mateřská škola Bzenec Číslo projektu: CZ.1.07/1.4.00/ Číslo a název šablony klíčové aktivity: III/2: využívání ICT – inovace Vypracoval/a:
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
Vytváření GUI pomocí skriptovacích jazyků Eduard Sojka URO, Léto 2003/4 VŠB – Technická univerzita Ostrava.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Práce se šablonami v MS Word 2007
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Algoritmizace a programování Úvod do Delphi - 04 Mgr. Josef Nožička IKT Algoritmizace a programování
Počítačová podpora konstruování I 7. přednáška František Borůvka.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Základy práce s OS Windows
Pro 2. a 4.ročník ZŠ, vytvořeno : duben 2012 Základní škola a mateřská škola Lázně Kynžvart Autor: Mgr. Petra Šandová Název: VY_32_INOVACE_5B_INF3_07_.
Menu Vytváření menu.
Uživatelská rozhraní Cvičení 12a Martin Němec A
Uživatelská rozhraní Uživatelská rozhraní. knihovna Qt Trolltech (1994) v Oslu (Norsko) vytváří grafické uživatelské rozhraní (GUI) pro C++ multi-platformová.
TEXTOVÝ EDITOR Karin Tylšerová. Textový editor je software, kterým je možné editovat prostý text. Neobsahuje žádné informace o formátování, jako je použití.
Delphi – práce se základními komponentami (2. hodina) OB21-OP-EL-KON-DOL-M-4-008B Orbis pictus 21. století.
Y36PJC Programování v jazyce C/C++
Textový Editor.
Bc. Vladimír Holubec Bc. Nikola Němcová
Instalace Javy ( pro Windows )
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Návrhový vzor Flyweight
Výukový materiál zpracován v rámci projektu
C# přehled vlastností.
Transkript prezentace:

Stručný průvodce vytvářením GUI v C++/Qt Eduard Sojka URO, Léto 2004/5 VŠB – Technická univerzita Ostrava

Co je Qt? Qt: stručný průvodce Qt je knihovna prvků GUI existující na různých platformách (MS-Windows, Unix/Linux, Mac OS X). Používá ze z C++. Je hodnocena jako velmi dobrá. Pro vizuální konstruování existuje Qt Designer. Do Qt se uvedeme prostřednictvím jednoduchého příkladu. Jeho kompletní zdrojový text naleznete v souboru priklady_Qt\priklad1.cpp.

Qt: stručný průvodce – hlavní program Hlavní program vypadá v C++/Qt vždy podobně, jak je uvedeno dole. Je nutné zřídit objekt třídy QApplication a vyvolat metodu exec. Dále je potřebné připravit prvek GUI, který je považován za hlavní. Ten je často instancí třídy odvozené z QMainWindow. int main( int argc, char **argv ){ QApplication application( argc, argv ); MainWindow mainWindow; application.setMainWidget( &mainWindow ); mainWindow.show(); return application.exec(); }

Qt: stručný průvodce – hlavní okno GUI Konstrukce okna pomocí třídy odvozené z QMainWindow. Do oka je možné umístit „menu bar“, „tool bar“ a „status bar“. V centrální ploše lze umístit buď vlastní prvek (náš případ) nebo některé prvky standardní, např. QTextEdit nebo QCanvas. Aplikace může mít více oken odvozených z QMainWindow.

Qt: stručný průvodce – konstrukce hlavního okna MainWindow::MainWindow( ):QMainWindow( ){ setCaption( "URO - Qt" ); QPixmap *appIcon = new QPixmap( ); if( appIcon->load("mondrian.bmp")) setIcon(*appIcon); QMenuBar *menuBar = new QMenuBar( this ); // Tady naplnit menu. QToolBar *toolBar = new QToolBar( this ); // Tady naplnit toolBar. centralWidget = new CentralWidget( this ); setCentralWidget( centralWidget ); // Tridu CentralWidget popiseme dale. QStatusBar *statusBar = new QStatusBar( this ); statusBar->message( "The actions will appear here." ); } Typickými akcemi v konstruktoru hlavního okna jsou příprava menu, „tool bar“, „status bar“ a jejich zaregistrování.

Qt: stručný průvodce - menu QMenuBar *menuBar = new QMenuBar( this ); QPopupMenu *fileMenu = new QPopupMenu( this ); fileMenu->insertItem( QPixmap( fileopen_xpm ), "&Open", this, SLOT( onOpen() ), CTRL+Key_O ); … idMenuItem = fileMenu->insertItem( "&Another item", this, SLOT( onOtherAction() ) ); fileMenu->insertSeparator(); fileMenu->insertItem( "E&xit", qApp, SLOT( quit() ), CTRL+Key_X ); menuBar->insertItem( "File", fileMenu ); fileMenu->setItemEnabled( idMenuItem, false ); V jednotlivých položkách menu se uvádí mimo jiné, který objekt (zde this) a která metoda má na aktivaci položky reagovat. Musíme tedy vytvořit metody onOpen, … , onOtherAction. Qt používá termínu „slots“. Ikona „Open“ je definována v poli fileopen_xpm (definici naleznete v souboru fileopen.xpm).

Qt: stručný průvodce – „toolbar“ QToolBar *toolBar = new QToolBar( this ); toolBar->setLabel( "URO" ); toolBar->addSeparator(); QToolButton *fileOpenToolButton = new QToolButton( QPixmap( fileopen_xpm ), "Open", QString::null, this, SLOT( onOpen() ), toolBar ); QToolButton *measureLengthButton = new QToolButton( QPixmap( measurelength_xpm ), "Measure length", QString::null, this, SLOT( onMeasuringLength() ), toolBar ); Do „toolbar“ se obvykle umisťují tlačítka. Ta mohou mít nápovědu. Lištu „tool bar“ lze z okna vysunout. Opět je pro jednotlivá tlačítka specifikováno, který objekt (zde this) a kterou metodou je obsluhuje (SLOT).

Qt: stručný průvodce – konstrukce centrálního panelu Prvky zde skládáme pod sebe pomocí formátovače QVBoxLayout. Ten umí pod sebe přidávat buď samotné prvky (addWidget) nebo jejich naformátované sestavy (addLayout). Prvky a sestavy musíme předem připravit. Hodnoty 8 a 6 udávají požadovaný okraj a vzdálenost mezi prvky. Metoda addSpacing vkládá mezeru navíc. V konstruktoru centrálního panelu proto budeme mít: setPaletteBackgroundColor( QColor( 225, 225, 220 )); QVBoxLayout *topLayout = new QVBoxLayout( this, 8, 6 ); topLayout->addWidget( label1, 0, Qt::AlignCenter ); topLayout->addLayout( imageRow ); topLayout->addSpacing( 6 ); topLayout->addWidget( label3 ); topLayout->addWidget( textEdit ); topLayout->addWidget( checkGroup ); topLayout->addSpacing( 4 ); topLayout->addLayout( buttonRow );

Qt: stručný průvodce – konstrukce centrálního panelu Dále probereme konstrukci jednotlivých prvků, jejichž existenci jsme předpokládali v předchozím obrázku. Prvky budeme vytvářet v konstruktoru centrálního panelu (CentralWidget). Konstrukce prvku label1 je průhledná. Rodičem popisky je centrální panel – proto this na prvním řádku. QLabel *label1 = new QLabel( "Several Typical GUI Widgets", this ); label1->setPaletteForegroundColor( QColor( 128, 0, 0 ) ); label1->setFont( QFont( "Helvetica", 10, QFont::Normal ) ); label1->setMinimumHeight( 24 );

Qt: stručný průvodce – konstrukce centrálního panelu QHBoxLayout *imageRow = new QHBoxLayout( this ); QLabel *label2 = new QLabel( "", this ); QPixmap *pixmap = new QPixmap( "rcln.bmp" ); if ( pixmap ) label2->setPixmap( *pixmap ); listBox = new QListBox( this ); listBox->setMaximumWidth( 220 ); listBox->setFixedHeight( pixmap->height() ); listBox->insertItem( "Item 0" ); listBox->insertItem( QPixmap( zoomin_xpm ) ); … imageRow->addWidget( label2, 0, Qt::AlignLeft ); imageRow->addWidget( listBox, 0, Qt::AlignRight ); Obrázek vlevo je vytvořen jako popiska (QLabel), k níž je ovšem místo textu připojen obrázek (QPixmap). Povšimněte si, že i v „listboxu“ mohou být obrázky. Zoomin_xpm je pole znaků, v němž je obrázek definován (definici naleznete v souboru zoomin.xpm).

Qt: stručný průvodce – konstrukce centrálního panelu Zřízení textového editoru i nadpisu nad textovým polem mnoho komentářů nepotřebuje. Povšimňete si, že rolovací lišta se objevuje zcela automaticky. Objevování lišt lze modifikovat pomocí metody hScrollBarMode() , vScrollBarMode() (předvolené je automatické objevování se podle potřeby). Text lze získat metodou text jako QString. QLabel *label3 = new QLabel( "Write something here:", this ); label3->setAlignment( Qt::AlignLeft ); textEdit = new QTextEdit( this ); textEdit->setFixedHeight( 60 ); textEdit->setText( "Text edit area:\nrow2\nrow3\nanother row\nanother row\nrow" );

Qt: stručný průvodce – konstrukce centrálního panelu Pro zřizování skupin prvků je v Qt k dispozici třída QHGroupBox a QVGroupBox. Zde jsme použili první z nich. Napojení „check boxů“ na akce ukážeme později. QHGroupBox *checkGroup = new QHGroupBox( "Group", this ); check1 = new QCheckBox( "Check 1", checkGroup ); check2 = new QCheckBox( "Check 2", checkGroup );

Qt: stručný průvodce – konstrukce centrálního panelu Tlačítko s obrázkem a textem: Definici pole delete_xpm naleznete v souboru delete.xpm. Metoda addStrech vkládá pružnou mezeru. Napojení tlačítek na akce ukážeme později. QHBoxLayout *buttonRow = new QHBoxLayout( this ); QPushButton *button1 = new QPushButton( QPixmap( delete_xpm ), "", this ); button1->setFixedWidth( 24 ); button1->setFixedHeight( 24 ); QPushButton *button2 = new QPushButton( "Button", this ); button2->setFixedWidth( 96 ); button2->setFixedHeight( 24 ); buttonRow->addWidget( button1 ); buttonRow->addStretch(); buttonRow->addWidget( button2 );

Qt: stručný průvodce – napojení prvků GUI na akce V Qt generují prvky GUI signály. Signály mohou být zasílány metodám objektů, které programátor vytvoří. Propojení se zřizuje funkcí connect. Metoda má čtyři parametry: Objekt, který je zdrojem signálu, typ signálu, objekt a metoda, které signál zpracovávají. V našem případě signál vždy zpracovává objekt parent, což je rodič centrálního panelu, tedy hlavní okno. Tam proto musí být definovány všechny metody, které jsou uvedeny jako poslední parametr funkce connect. Propojení lze dynamicky měnit během chodu programu (k rozpojení slouží funkce disconnect mající tytéž parametry). connect( listBox, SIGNAL(selectionChanged()), parent, SLOT( onListBoxAction() ) ); connect( textEdit, SIGNAL(textChanged()), parent, SLOT( onTextChanged() ) ); connect( check1, SIGNAL(clicked()), parent, SLOT( onCheck1Action() ) ); connect( check2, SIGNAL(clicked()), parent, SLOT( onCheck2Action() ) ); connect( button1, SIGNAL(clicked()), parent, SLOT( onLeftButtonPressed() ) ); connect( button2, SIGNAL(clicked()), parent, SLOT( onRightButtonPressed() ) );

Qt: stručný průvodce – napojení prvků GUI na akce Ilustrace vytváření spojení (převzato od Trolltechu).

Qt: stručný průvodce – napojení prvků GUI na akce class MainWindow : public QMainWindow { Q_OBJECT public: CentralWidget *centralWidget; MainWindow(); private: int idMenuItem; public slots: void onOpen(); void onMeasuringLength(); void onListBoxAction(); void onTextChanged(); void onCheck1Action(); void onCheck2Action(); void onLeftButtonPressed(); void onRightButtonPressed(); void onOtherAction(); }; Povšimněte si, že metody zpracovávající signály jsou definovány jako tzv. „public slots“. Makro Q_OBJECT je požadováno kompilátorem meta objektů, který řeší mimo jiné napojení signálů na sloty. Musí být ve všech třídách obsahujících deklaraci signals nebo slots. Poznámka: Signály jsou generovány prvky GUI. Programátor může ale generovat také své vlastní signály. Deklarace signálu se podobá deklaraci metody. Je ale uvedena v sekci signals. Ke generování signálu se používá emit.

Qt: stručný průvodce – napojení prvků GUI na akce Často je zapotřebí jednotlivé prvky GUI povolovat, zakazovat nebo nastavovat. Následuje několik příkladů fileMenu->setItemEnabled( idMenuItem, false ); button1->setEnabled( true ); button1->setEnabled( false ); listBox->setSelected( 1, true ); check1->setChecked( true ); check2->setChecked( false ); textEdit->setFocus();

Qt: stručný průvodce - Co dál? … Podle potřeby používejte manuálu Qt (Qt Assistant nebo html dokumentaci) Můžete si přečíst text Qt 3.3 Whitepaper Navštivte www.trolltech.com