abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 19:00 | Zajímavý projekt

    Na crowdsourcingové platformě Crowd Supply byla spuštěna kampaň na podporu open source biometrického monitoru ve tvaru hodinek HealthyPi Move. Cena je 249 dolarů a plánovaný termín dodání listopad letošního roku.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | Upozornění Ladislav Hagara | Komentářů: 9
    včera 17:44 | Nová verze

    Firma Murena představila /e/OS verze 2.0. Jde o  alternativní sestavení Androidu bez aplikací Google. Mezi novinkami je podrobnější nastavení ochrany soukromí před sledováním aplikacemi. Murena prodává několik smartphonů s předinstalovaným /e/OS (Fairphone, repasovaný Google Pixel 5).

    Fluttershy, yay! | Komentářů: 0
    včera 14:33 | Zajímavý software

    Do 30. května lze v rámci akce Warhammer Skulls 2024 získat na Steamu zdarma hru Warhammer 40,000: Gladius - Relics of War.

    Ladislav Hagara | Komentářů: 1
    včera 13:33 | Nová verze

    HelenOS (Wikipedie), tj. svobodný operační systém českého původu založený na architektuře mikrojádra, byl vydán ve verzi 0.14.1. Přehled novinek v poznámkách k vydání. Vypíchnou lze nabídku Start. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 2
    23.5. 23:22 | Zajímavý software

    BreadboardOS je firmware pro Raspberry Pi Pico (RP2040) umožňující s tímto MCU komunikovat pomocí řádkového rozhraní (CLI). Využívá FreeRTOS a Microshell.

    Ladislav Hagara | Komentářů: 0
    23.5. 16:55 | Nová verze

    Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 24.05. Přehled novinek i s náhledy a videi v oficiálním oznámení. Do balíku se dostalo 5 nových aplikací: Audex, Accessibility Inspector, Francis, Kalm a Skladnik.

    Ladislav Hagara | Komentářů: 10
    23.5. 12:55 | Nová verze

    Byla vydána (𝕏) nová verze 18.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    22.5. 23:44 | Pozvánky

    V neděli 26. května lze navštívit Maker Faire Rychnov nad Kněžnou, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    22.5. 16:33 | Nová verze

    Byla vydána nová stabilní verze 3.20.0, tj. první z nové řady 3.20, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu 64bitové architektury RISC-V.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (82%)
     (4%)
     (7%)
     (7%)
    Celkem 526 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Grafické programy v Qt 4 - 2 (hlavní okno programu)

    12. 3. 2009 | David Watzke | Programování | 22818×

    V tomto díle si ukážeme, jak vytvořit hlavní okno, jak uložit a načíst nastavení a nakonec, jak by mohl vypadat program pro jednoduché malování.

    Hlavní okno

    Spousta programů má ve svém hlavním okně nabídku (menubar), panely nástrojů (toolbary), stavový řádek (status bar) a podobně. Qt pro tyto účely obsahuje třídu QMainWindow, která vytvoření hlavního okna usnadňuje. Následuje jednoduchý demonstrační program – je to pouze widget, takže je třeba vytvořit ještě main.cpp, viz předchozí díl.

    mainwindow.h: Zde bych zmínil tzv. dopřednou deklaraci (forward declaration), která může zkrátit dobu potřebnou k sestavení programu. Použité třídy, jejichž API v hlavičkovém souboru nepotřebujeme (třeba členské proměnné), takto dopředu deklarujeme a #include dáme až do implementačního .cpp souboru. Kompilátor díky tomu nebude zbytečně víckrát parsovat hromadu hlavičkových souborů, jen aby se dozvěděl, že taková třída opravdu existuje (protože to je jediná informace, kterou v tomto bodě potřebuje). Přímo vývojáři Qt tvrdí, že to v některých případech může mít poměrně velký vliv na dobu kompilace.

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    // dopředná deklarace
    class QDir;
    class QMessageBox;
    class QListWidget;
    class QListWidgetItem;
    
    class MainWindow : public QMainWindow
    {
    	Q_OBJECT
    
    public:
    	// v konstruktoru nepředáváme rodiče, protože jde o hlavní okno
    	MainWindow();
    
    private:
    	QDir* m_dir;
    	QListWidget* m_list;
    	QString m_dName;
    
    private slots:
    	void openDir(QString = QString());
    	void itemDoubleClicked(QListWidgetItem*);
    };
    
    #endif
    

    mainwindow.cpp: Všimněte si slotu itemDoubleClicked, kterému je předán ukazatel na uživatelem dvojkliknutou položku seznamu QListWidgetItem.

    #include "mainwindow.h"
    #include <QApplication>
    #include <QMenuBar>
    #include <QToolBar>
    #include <QAction>
    #include <QFileDialog>
    #include <QDir>
    #include <QFileInfo>
    #include <QMessageBox>
    #include <QListWidget>
    
    MainWindow::MainWindow() : m_dir(0)
    {
    	// vytvoříme panel s nabídkou
    	QMenuBar* menuBar = new QMenuBar(this);
    	// jednotlivá menu
    	QMenu* menuFile = new QMenu(tr("&File"));
    	QMenu* menuHelp = new QMenu(tr("&Help"));
    	// položky menu
    	QAction* actionOpen = new QAction(tr("&Open"), this);
    	QAction* actionQuit = new QAction(tr("&Quit"), this);
    	QAction* actionAboutQt = new QAction(tr("About Qt"), this);
    
    	// nastavení klávesové zkratky
    	actionOpen->setShortcut(QKeySequence("Ctrl+O"));
    
    	// propojení položek menu s funkcemi programu
    	connect(actionOpen, SIGNAL(triggered()), this, SLOT(openDir()));
    	connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
    	connect(actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
    
    	// přidáme položky do patřičných nabídek...
    	menuFile->addAction(actionOpen);
    	menuFile->addAction(actionQuit);
    	menuHelp->addAction(actionAboutQt);
    	//... a jednotlivá menu do panelu
    	menuBar->addMenu(menuFile);
    	menuBar->addMenu(menuHelp);
    
    	// řekneme widgetu, aby použil naše menu
    	setMenuBar(menuBar);
    
    	// vytvoříme grafický seznam položek
    	m_list = new QListWidget(this);
    	// a nastavíme jej jako hlavní widget hlavního okna
    	setCentralWidget(m_list);
    
    	// dvojklik na seznam spustí náš slot
    	connect(m_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
    		this, SLOT(itemDoubleClicked(QListWidgetItem*)));
    
    	resize(600, 400);
    }
    
    void MainWindow::itemDoubleClicked(QListWidgetItem* item)
    {
    	// tato třída poskytuje informace o souborech a adresářích
    	QFileInfo fileInfo(m_dName + "/" + item->text());
    
    	if(fileInfo.isDir())
    		openDir(fileInfo.canonicalFilePath());
    	else
    	{
    		// dialogy dovedou pracovat s jednoduchým HTML
    		QString infotext = "<b>Name</b>: " + fileInfo.fileName()
    			 + "<br/><b>Location</b>: " + fileInfo.canonicalPath()
    			 + "<br/><b>Owner</b>: " + fileInfo.owner()
    			 + "<br/><b>Group</b>: " + fileInfo.group();
    		QMessageBox::information(this, tr("File info"), infotext);
    	}
    }
    
    void MainWindow::openDir(QString dName)
    {
    	if(!dName.isEmpty())
    		m_dName = dName;
    	else
    		do	// dialog pro výběr existujícího adresáře
    			m_dName = QFileDialog::getExistingDirectory(this, tr("Choose a directory"));
    		while(m_dName.isEmpty());
    
    	m_dir = new QDir(m_dName);
    	// Zde by bylo vhodné kontrolovat přístupová práva,
    	// a patřičně na ně reagovat. Takto program nedostatečné
    	// oprávnění ignoruje a seznam se vyprázdní.
    
    	// vyprázdníme seznam
    	m_list->clear();
    	// přidáme položky z adresáře do seznamu
    	m_list->addItems(m_dir->entryList(QDir::AllEntries, QDir::Name));
    
    	delete m_dir;
    }
    

    qt 2 example1

    Ukládání a načítání nastavení

    Velmi často se hodí možnost ukládat (a poté zpětně načítat) nastavení programu, a proto si ukážeme, jak to je jednoduché s třídou QSettings. Konfigurace se ukládá do souboru ~/.config/organizace/název_programu.conf. Pokud budete chtít ukládat veškerou konfiguraci programu do jednoho souboru (což je běžné), pak je vhodné nastavit si název organizace a programu již do instance QApplication ve funkci main(), abyste tyto údaje nemuseli zadávat pokaždé do konstruktoru QSettings:

    qApp->setOrganizationName("Organizace");
    qApp->setApplicationName("SuperProgram");
    // konfigurace bude v ~/.config/Organizace/SuperProgram.conf
    

    Asi nejdůležitější 2 metody třídy QSettings jsou:

    • void setValue(const QString& key, const QVariant& value) - nastaví položce key hodnotu value.
    • QVariant value(const QString& key, const QVariant& defaultValue = QVariant()) - vrátí hodnotu položky key. Pro případ, že tato položka není v nastavení, můžete nastavit volitelnou výchozí hodnotu.

    Co je to QVariant? Jde o jakýsi kontejner, který dovede pojmout libovolný datový typ. Chová se jako union pro základní datové typy C++ a Qt. Když chcete z proměnné tohoto typu dostat hodnotu, musíte vědět, jakého je hodnota typu (k tomu může v nejhorším pomoci metoda typeName(), která vrátí název typu jako C řetězec) a zavolat patřičnou metodu toType(), kde Type nahradíte za patřičný datový typ:

    QVariant test(true);
    bool b = test.toBool();
    
    QVariant numero(123);
    int n = numero.toInt();
    

    A zde konečně přichází ukázkový program. Zkuste si napsat něco do textového pole a potom na spinboxu vybrat nějaké číslo. Nastavení uložte tlačítkem Save, program ukončete a tlačítko Load by vaše nastavení mělo načíst.

    settings.h:

    #ifndef SETTINGS_H
    #define SETTINGS_H
    
    #include <QWidget>
    #include <QSettings>
    
    class QLineEdit;
    class QSpinBox;
    
    class Settings : public QWidget
    {
    	Q_OBJECT
    
    public:
    	Settings();
    
    private:
    	QSettings m_settings;
    	QLineEdit* m_lineEdit;
    	QSpinBox* m_spinBox;
    
    public slots:
    	void loadSettings();
    	void saveSettings();
    };
    
    #endif // SETTINGS_H
    

    settings.cpp:

    #include "settings.h"
    
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <QLineEdit>
    #include <QSpinBox>
    #include <QPushButton>
    
    Settings::Settings()
    {
    	m_lineEdit = new QLineEdit();
    	m_spinBox = new QSpinBox();
    
    	//tlačítka pro načtení a uložení nastavení
    	QPushButton* load = new QPushButton(tr("Load"));
    	QPushButton* save = new QPushButton(tr("Save"));
    
    	connect(load, SIGNAL(clicked()), this, SLOT(loadSettings()));
    	connect(save, SIGNAL(clicked()), this, SLOT(saveSettings()));
    
    	QHBoxLayout* wLayout = new QHBoxLayout();
    	wLayout->addWidget(m_lineEdit, 1);
    	wLayout->addWidget(m_spinBox);
    
    	QHBoxLayout* btnLayout = new QHBoxLayout();
    	btnLayout->addWidget(load);
    	btnLayout->addWidget(save);
    
    	QVBoxLayout* layout = new QVBoxLayout(this);
    	layout->addLayout(wLayout);
    	layout->addLayout(btnLayout);
    
    	setLayout(layout);
    }
    
    // načte nastavení - hodnoty načtené z konfiguračního souboru přiřadí patřičným objektům
    void Settings::loadSettings()
    {
    	m_lineEdit->setText( m_settings.value("lineEdit", QString()).toString() );
    	m_spinBox->setValue( m_settings.value("spinBox", 0).toInt() );
    }
    
    // uloží nastavení
    void Settings::saveSettings()
    {
    	m_settings.setValue("lineEdit", m_lineEdit->text());
    	m_settings.setValue("spinBox", m_spinBox->value());
    }
    

    qt 2 example2

    Události a kreslení

    Na události jsme už jednou narazili v minulém díle, když jsme reimplementovali událost dvojkliku na speciální tlačítko. Tentokrát si ovšem kromě událostí myši zkusíme napsat i paintEvent(), což je funkce, která má za úkol vykreslit a následně překreslovat widget. Překreslit můžeme také pouze danou oblast, takže toho pro efektivitu využijeme a ukážeme si, jak napsat velice jednoduché Malování :-)

    painting.h:

    #ifndef PAINTING_H
    #define PAINTING_H
    
    #include <QWidget>
    #include <QPainter>
    
    class Painting : public QWidget
    {
    public:
    	Painting(QWidget *parent = 0);
    
    protected:
    	// hýbání myší
    	virtual void mouseMoveEvent(QMouseEvent*);
    	// stlačení tlačítka myši
    	virtual void mousePressEvent(QMouseEvent*);
    	// puštění tlačítka myši
    	virtual void mouseReleaseEvent(QMouseEvent*);
    	// událost kreslení
    	virtual void paintEvent(QPaintEvent* e);
    
    private:
    	bool m_painting;
    };
    
    #endif // PAINTING_H
    

    painting.cpp:

    #include "painting.h"
    
    #include <QMouseEvent>
    
    Painting::Painting(QWidget *parent)
    	: QWidget(parent), m_painting(false)
    {
    	// bílé pozadí
    	setPalette(QPalette(QColor(255, 255, 255)));
    	setAutoFillBackground(true);
    }
    
    // povolí kreslení
    void Painting::mousePressEvent(QMouseEvent* e)
    {
    	m_painting = true;
    	e->ignore();
    }
    
    // zakáže kreslení
    void Painting::mouseReleaseEvent(QMouseEvent* e)
    {
    	m_painting = false;
    	e->ignore();
    }
    
    // pokud je povolené kreslení, aktualizuje pixel pod kurzorem
    void Painting::mouseMoveEvent(QMouseEvent* e)
    {
    	if(!m_painting)
    		return;
    	update(e->x(), e->y(), 1, 1);
    }
    
    // vykreslíme pixel, který máme aktualizovat
    void Painting::paintEvent(QPaintEvent* e)
    {
    	QPainter p(this);
    	// nastaví barvu "pera"
    	p.setPen(Qt::black);
    	// vykreslí tečku na daném bodě
    	p.drawPoint(e->rect().x(), e->rect().y());
    }
    

    qt 2 example3

    QPainter toho dokáže mnohem víc, než jen kreslit tečky, ale podrobněji to v tomto seriálu nebudeme rozebírat, takže zájemce odkazuji na dokumentaci.

    Závěr

    V příštím díle si mj. ukážeme, jak navrhnout GUI pomocí Qt Designeru a jak s takovým návrhem potom dále pracovat.

           

    Hodnocení: 95 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

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

    Komentáře

    Vložit další komentář

    kozzi avatar 12.3.2009 03:14 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Bohužel musím být trochu kritický. Tento seriál trpí jedním hlavním nedostatkem. Nějak my chybí skupina lidí, pro které by mohl být zajímavý. Určitě není určen pro lidi co s Qt začínají. Takže pokud vynecháme tuto skupinu, tak nám zbývají lidé co Qt částečně znají. No je sice pravda, že pro tyto lidi by mohl mít v určitých částch malý význam, ale dle mě, né dostatečně významný. Pro mě osobně se jedná o text, který mi nic moc nového neřekne, ale je pravda že něco mále mě určitě přiučí. Další věc co by nebyla na škodu je, kdyby celý článek postupně směřoval k určitému cíli. Prostě kdyby na konci článku bylo výsledkem třeba něco jako totalcmd například :-). Jinak mám celkově dojem že pokud bych prostudoval kód Doliho programů, tak se dozvím to samé ;-). Celkově mi jde o to, že by bylo možná lepší, se zaměřit na lidi co chtějí Qt začít.
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    David Watzke avatar 12.3.2009 03:22 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Je určený pro lidi, co s Qt začínají, ale ne pro ty, co začínají s C++. Kritiku beru, zkusím bejt do budoucna trochu víc upovídanej, jestli se ukáže, že to je žádoucí.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Jardík avatar 12.3.2009 08:38 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Není. Mně např. k pochopení věci stačí jednou, maximálně dvakrát, přečíst zdroják, takže od příště stačí pouze ten :-)
    Věřím v jednoho Boha.
    kozzi avatar 12.3.2009 18:35 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    LOL, právě si tak čtu tento seriál a najednou koukám na komentáře, a tam jeden ode mě. A to sem si říkal že sem to včera v té hospodě (hospodách) nepřehnal a vše si pamatuju :-D. No by mě zajímalo jestli sem v tu dobu tomu kodu rozuměl :-)
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    kozzi avatar 12.3.2009 18:36 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Zajímavé je že tam není ani moc pravopisných chyb a je to s háčkama. To bude nějakej Matrix :-D
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    12.3.2009 11:23 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Musím souhlasit, že seriál není cílen pro úplné začátečníky a cílová skupina tak bude chudší než asi bylo zamýšleno. Ovšem pokud si je čtenář jistý svými C++ znalostmi, měl by se poměrně rychle problematikou prokousat.

    Jediné, co by bylo pro úplné začátečníky přínosnější, by byla lokalizace celé Qt dokumentace do češtiny. K tomu ale není důvod, protože pokud není člověk schopný zvládnout (alespoň pasivně) technický anglický text tak, aby pochopil myšlenku (není potřeba překládat každé slovo a chápat gramatiku), nikdy z něj nebude programátor. Alespoň ne takový, který svede více než jen nahradu "Hello world!" za "Ahoj svete" (I když taky jsem měl radost jak decko, když se mi před mnoha lety podařilo poprvé přeložil změny v jednom demu podobného rozsahu :-D )

    13.3.2009 15:40 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Musím souhlasit, že seriál není cílen pro úplné začátečníky a cílová skupina tak bude chudší než asi bylo zamýšleno.
    Nesouhlas
    Ovšem pokud si je čtenář jistý svými C++ znalostmi, měl by se poměrně rychle problematikou prokousat.
    Jak je řečeno jinde, článek je pro začátečníky v Qt, ne v C++
    Quando omni flunkus moritati
    Marián Kyral avatar 12.3.2009 12:37 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Já tenhle seriál vítám, alespoň se konečně dozvím, proč to je právě takhle :-)

     

    Jsem programátor v C, shell, PL/SQL. C++ jsem se ještě stále nenaučil, mám jen jakési povědomí o objektech a jak to zhruba funguje, ale to mi nezabránilo spáchat jeden plugin do kate (Konečně jsem jej začal přepisovat pro KDE 4) a podílet se na vývoji jednoho plasmoidu (yaWP - jestli ho někdo zná). Něco si najdu v tutoriálech, něco najdu v jiných programech a inspiruji se, zbytek metodou pokus-omyl. Nejhorší to bývá při překladu. Některé hlášky jsou docela zajímavé a co je vlastně špatně člověk většinou zjistí až s pomocí Googlu.

     

     

    Saljack avatar 12.3.2009 14:52 Saljack | skóre: 28 | blog: Saljack | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Tohle je přesně seriál pro mě. Dříve jsem dělal s PyQt, ale chci se naučit dělat s C++ a Qt. Do teď jsem se hodně inspiroval z Doliho faratu a můžu jen doporučit najít si nějaký projekt a číst si zdrojáky a snažit se pochopit proč je to právě tak. A díky za QSettings vůbec sem o této třídě nevěděl a je to přesně to co jsem potřeboval ;-).
    Sex, Drugs & Rock´n Roll.
    David Watzke avatar 12.3.2009 15:01 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    I já se tímhle seriálem tu a tam něco přiučím :-) Bez QSettings by byl svět Qt aplikací docela smutnej :-) Není zač.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    frEon avatar 12.3.2009 16:09 frEon | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Ja treba s qt neumim, c++ tak trochu (stravil jsem ale dost casu s c) a jenom pasivne, ale prikladum rozumim (az na tu vec s dvojteckou v MainWindow::MainWindow() : m_dir(0)). Podle me jsou dost dobre voleny na to, aby z nich bylo pekne jasne k cemu jednotlive Qt objekty slouzi a jak se s nimi delaji zakladni veci. Podle me je to pekny start pro programatory do Qt.
    Talking about music is like dancing to architecture.
    David Watzke avatar 12.3.2009 16:18 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    "Věc s dvojtečkou" lze použít jen u konstruktoru a slouží k nastavení výchozí hodnoty. Je to vlastně totéž, jako kdybych udělal tohle:
    MainWindow::MainWindow()
    {
    	m_dir = 0;
    	...
    m_dir jsem inicializoval, abych pak nemusel podmiňovat delete a mohl ho prostě spustit ať už se m_dir použije nebo ne. Je to bezpečnější.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    12.3.2009 16:27 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Tuhle syntaxi nesnáším, ale nešť, zajímalo by mne spíš, proč ukazatel inicializuješ nulou a ne NULLou :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    David Watzke avatar 12.3.2009 16:34 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Protože je to fuk.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Saljack avatar 12.3.2009 17:05 Saljack | skóre: 28 | blog: Saljack | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    NULL se používalo v C v C++ by se měla používat 0.
    Sex, Drugs & Rock´n Roll.
    Jardík avatar 12.3.2009 21:07 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    V C++0x máme "null" (teda gcc to zrovna nějak nebere, ale ...).
    Věřím v jednoho Boha.
    12.3.2009 21:59 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Teď na to koukám: http://en.wikipedia.org/wiki/C++0x#Null_pointer_constant a mám k tomu jenom jedno: šmarjá, to je tak typicky céčkařské! Nedávno jsem četl povzdech jednoho z návrhářů Ady, že dnešní jazyky jsou vyloženě odbyté a halabala navržené, a už vím, proč to tak je. Oni si všichni berou příklad z Céčka!
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Jardík avatar 13.3.2009 00:07 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    No vidíte .. stejně jsem debil, napsal jsem null (asi zblblej z C#) místo nullptr.
    Věřím v jednoho Boha.
    14.3.2009 17:29 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Tahle syntaxe se někomu nelíbí, ale nemí samoúčelná, umožňuje volat konstruktory předků s parametry. Jinak by byly při vytváření instance potomka automaticky volány neparametrické konstruktory předků dřív než by byla šanci v konstruktoru potomka zavolat konstruktory předka "ručně". Samozřejmě je diskutabilní nakolik je účelné takto inicializovat kdeco :)
    14.3.2009 17:45 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Wo to fo? Kde se bere ta magie, která volá neparametrický konstruktor předka dřív, než je v konstruktoru potomka šance zavolat vybraný konstruktor předka ručně? Hádám, že se jen někomu nelíbilo vynutit si volání konstruktoru předka jako úplně první příkaz v konstruktoru potomka, a tak vymyslel tenhle nekoncepční hack. Pravda? :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    Saljack avatar 12.3.2009 17:11 Saljack | skóre: 28 | blog: Saljack | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Ovšem kdyby m_dir byla konstanta tak by to takhle nešlo a muselo by se použít to s dvojtečkou.
    Sex, Drugs & Rock´n Roll.
    frEon avatar 12.3.2009 17:44 frEon | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Aha, dik za vysvetleni.
    Talking about music is like dancing to architecture.
    12.3.2009 13:04 Roman Schulz | skóre: 8 | Brno
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Přimlouval bych se za zvětšení boxů se zdrojáky ať v nich není potřeba tolik scrollovat, teď mi to přijde celkem nepřehledné...
    David Watzke avatar 12.3.2009 13:09 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Proto je u každýho boxu tlačítko Rozbalit :-) Ale taky bych řekl, že minimálně u tohoto seriálu by bylo dobrý to trochu (nebo klidně hodně) roztáhnout už v defaultu.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    12.3.2009 14:42 Jardik
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Jeste ze ne implicitne.

    13.3.2009 10:53 RapMan | skóre: 14 | blog: RapMan
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Ja bych chtel nejaky serial o programovani, kde bych mel plnohodnotne IDE s moznosti doplnovani syntaxe, navrhu formularu, atd. Proste pro lidi, kteri jsou zmlsani visual studiem a chteli by vedet, jak neceho podobneho dosahnout lehce pod linuxem.
    David Watzke avatar 13.3.2009 10:58 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    V takovym případě by se ti mohl líbit příští díl.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    13.3.2009 12:12 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Vetsina takovych IDE se da ovladat pouze intuici, neni treba nic studovat ani nic slozite nastavovat (mozna par cest). A ze jich neni malo, Qt Creator, KDevelop, QDevelop, Monkey Studio, HaiQ, Vim a urcite jsem jich dost zapomel. Zakladni schopnosti jako doplnovani kodu, editaci *.ui, kompilaci, debugovani, atd. podporuji svym zpusobem vsechny. Dobre IDE neznamena, ze se musi chovat a vypadat jako MSVS. Je treba vyzkouset vsechny a jit cestou nejmensiho odporu. Napr. u me je urcite neschudny vi, prestoze si jini bez nej nedokazi pocitac ani predstavit...

    David Watzke avatar 13.3.2009 12:21 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Vim ovládáš intuicí? :-D To já jsem se to teda nejdřív musel naučit, celkem závidím ;-)
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Marián Kyral avatar 13.3.2009 13:46 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Když pochopíš princip, tak je i vim intuitivní.

    dw - delete word

    Nicméně netvrdím, že bych vim nějak extra uměl. Většinou se totiž pohybuji na různých AIX serverech, kde je jen vi, tak jsem se naučil jen pár základních příkazů, které potřebuji.

    13.3.2009 15:00 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Ja a Vim nejsme kamaradi :-) Ale pokud clovek ovlada Vim, verim, ze neni problem ho pouzivat i jako IDE pro Qt. (uz jsem tu par screenshotu videl)

    Marián Kyral avatar 13.3.2009 22:25 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Právě jsem na jeden narazil...

    http://www.abclinuxu.cz/desktopy/mirec-20090204

    Marián Kyral avatar 13.3.2009 12:48 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Možná mi někdo poradí. Tvrdě jsem narazil s naprostou trivialitou :-(

    Mám tři proměnné QColor, potřebuji je zazálohovat, změnit na default , něco vykreslit a pak obnovit ze zálohy. Bohužel to obnovení mi nějak nefunguje :-( Zkoušel jsem různé varianty, studoval dokumentaci ke QColor, ale zatím nic nezabralo. Jak už jsem psal, v C++ celkem dost plavu :-(

        if ( m_theme != "default" && m_theme != "naked" ) {
          // set default colors when custom colors and not default or naked theme
          QColor fontColorBck = m_fontColor;
          QColor fontLowerColorBck = m_fontLowerColor;
          QColor fontShadowColorBck = m_fontShadowColor;
    
          setDefaultColors();
        }
    
    .....
    
        if ( m_theme != "default" && m_theme != "naked" ) {
          // restore font colors
          // tady mi to nějak drhne :-(
          m_fontColor = fontColorBck;
          m_fontLowerColor = fontLowerColorBck;
          m_fontShadowColor = fontShadowColorBck;
        }
    
    /usr/local/src/yawp/yawp/0.1/yawp.cpp: In member function ‘void YaWP::paintPanel(QPainter*, const QStyleOptionGraphicsItem*, const QRect&)’:
    /usr/local/src/yawp/yawp/0.1/yawp.cpp:781: error: ‘fontColorBck’ was not declared in this scope
    /usr/local/src/yawp/yawp/0.1/yawp.cpp:782: error: ‘fontLowerColorBck’ was not declared in this scope
    /usr/local/src/yawp/yawp/0.1/yawp.cpp:783: error: ‘fontShadowColorBck’ was not declared in this scope
    make[2]: *** [CMakeFiles/plasma_yawp.dir/yawp.o] Error 1
    make[1]: *** [CMakeFiles/plasma_yawp.dir/all] Error 2
    make: *** [all] Error 2
    
    13.3.2009 12:57 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Kupodivu ta hláška překladače není úplně blbá :-) Proměnné fontColorBck, fontLowerColorBck a fontShadowColorBck jsou platné jenom v tom bloku if ( m_theme != "default" && m_theme != "naked" ) { ... }. Nejpřímočařejší postup (netvrdím, že nejlepší) by byl asi takový:
        QColor fontColorBck;
        QColor fontLowerColorBck;
        QColor fontShadowColorBck;
    
        if ( m_theme != "default" && m_theme != "naked" ) {
          // set default colors when custom colors and not default or naked theme
          fontColorBck = m_fontColor;
          fontLowerColorBck = m_fontLowerColor;
          fontShadowColorBck = m_fontShadowColor;
    
          setDefaultColors();
        }
    
    .....
    
        if ( m_theme != "default" && m_theme != "naked" ) {
          // restore font colors
          m_fontColor = fontColorBck;
          m_fontLowerColor = fontLowerColorBck;
          m_fontShadowColor = fontShadowColorBck;
        }
    
    Nejsa Céčkař, nejsem si jistý, jestli překladač nebude prudit, že ty proměnné might not be initialized, ale to je jen takový detail :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    David Watzke avatar 13.3.2009 13:02 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    No jo vlastně, ono je to v ifu :-)
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Marián Kyral avatar 13.3.2009 14:04 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Díky moc, na tohle jsem úplně zapomněl, už to funguje. Taková blbost a já se s tím od včerejška trápím.

    To je tak, když člověk v něčem delší dobu nedělá, pak všechno zapomene :-(

    mirec avatar 13.3.2009 16:47 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Neinicializovaná by mohla byť keby to bol napr. smerník. U objektu sa automaticky spustí konštruktor (a teda objekt bude vždy inicializovaný, v prípade farby predpokladám, že na čiernu farbu).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    13.3.2009 16:50 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    No jo, to jsou ty šílenosti s ukládáním objektů na zásobník. Jak říkám, nejsem Céčkař :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    15.3.2009 00:03 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Ale napsal jste to správně ;-)
    Marián Kyral avatar 13.3.2009 21:09 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    QColor::QColor ()

    Constructs an invalid color with the RGB value (0, 0, 0). An invalid color is a color that is not properly set up for the underlying window system.

    The alpha value of an invalid color is unspecified.

    http://doc.trolltech.com/4.5/qcolor.html#QColor

    David Watzke avatar 13.3.2009 13:00 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Ta proměnná evidentně není dostupná ve funkci, ve který se jí snažíš použít. Ty QColory fontColorBck, fontLowerColorBck a fontShadowColorBck vytvoř (taky) jako private proměnný třídy (nebo tý funkci předávej ukazatele na ně... tzn. &fontColorBck bude QColor*) a pak by to mělo jít...
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    14.3.2009 14:07 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Pěkné... To QStettings jsem neznal, zajímavé. Dá se nastavit nějaká úplně jiná cesta k .conf?
    David Watzke avatar 14.3.2009 14:40 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Jo, dá... jeden z konstruktorů je:
    QSettings ( const QString & fileName, Format format, QObject * parent = 0 )
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    14.3.2009 14:41 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Mrkni na pretizene konstruktory, napr.:
    QSettings::QSettings(const QString& fileName, Format format, QObject* parent = 0)

    16.3.2009 15:23 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Jsem zdesen.....

    Jsem zvykly na Delphi (jej to je let), tam se tohle vsechno naklikalo za minutu a tady se to musi priserne obskurnim zpusobem matlat spolu se zdrojakem. Brr...

    Zdenek
    www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
    David Watzke avatar 16.3.2009 15:37 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    V příštím díle se naklikáš až až, tak si počkej.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    frEon avatar 19.3.2009 09:05 frEon | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Pro knihovnu qt existuje taky hromada klikatek, s jejichz pomoci muzes delat gui. Ale je urcite dobre vedet, co se pod tim deje a jak to qt vlastne funguje, aby z nas nebyly klikaci lamy. :-)
    Talking about music is like dancing to architecture.
    19.3.2009 12:37 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)

    Na jednom tydennim oficialnim skoleni, na ktere jsem byl vyslan, se nam skolitel snazil mimo jineho vysvetlit, proc nepouzivat QtDesigner a proc radeji kreslit gui primo z kodu. Je pravda, ze designer nepodporuje spoustu veci, jako vlozeni na toolbar neco jineho nez toolbutton nebo akci z menu, obdobne se statusbarem, moznost rozdelit lokalizaci textu pro jednotne a mnozne cislo (pripadne vice tvaru mnozneho cisla (1 zprava, 2 zpravy, 5 zprav, ...)) nebo napr. pouziti tzv. stretch factoru...

    Ale je pravda, ze stale pouzivam spise designer, protoze vyjma ruznych widgetu na tool/status-baru jsem zatim byl schopny vyjmenovane nevyhody elegantne obejit :-)

    15.12.2012 16:42 Pavel
    Rozbalit Rozbalit vše Re: Grafické programy v Qt 4 - 2 (hlavní okno programu)
    Ahoj,

    první příklad se mi spustí a funguje - lze třeba otevří soubor pomocí Ctr+O, ale hlavní okno programu je úplně prázdné. Neobsahuje menu ani nic jiného. Můj main.cpp (to menšítko u prvního #include mám samozřejmě správně, tady jsem ho smazaal, protože se to jinak považuje za html zančku):

    #include QtGui/QApplication> #include "mainwindow.h"

    int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow w; w.show(); return app.exec(); }

    Co dělám blbě? Díky, Pavel

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.