abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 23:00 | Nová verze

    Poštovní klient Thunderbird byl vydán v nové verzi 153 s kódovým názvem Meadow. Jedná se o ESR (Extended Support Release) vydání. Přehled novinek v poznámkách k vydání. Vylepšuje OAuth. Thundermail lze používat bez instalace doplňku.

    Ladislav Hagara | Komentářů: 0
    dnes 22:22 | Zajímavý článek

    AI tento rok naplno vtrhla do vývoje softwaru a výrazně ovlivňuje také open source projekty. Jiří Eischmann v příspěvku Jak mění AI open source na svém blogu rozebírá několik trendů, které v open source v poslední době v souvislosti s AI pozoruje, a jak tyto trendy svět otevřeného softwaru mění (Inflace projektů, Zahlcení kontroly, Klesající motivace zveřejňovat kód).

    Ladislav Hagara | Komentářů: 0
    dnes 22:00 | IT novinky

    Evropská komise (EK) vyměřila americké internetové společnosti Google pokutu 890 milionů eur (21,5 miliardy Kč) za porušení unijního nařízení o digitálních trzích (DMA). Firma se podle unijní exekutivy provinila tím, že ve vyhledávači Google Search upřednostňovala vlastní služby a že podnikům ukládala omezení, která jim bránila nasměrovat spotřebitele k alternativním, často levnějším nákupním kanálům na platformě Google Play.

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 19:44 | IT novinky

    Samsung na akci Galaxy Unpacked July 2026 (YouTube) představil své nové telefony Galaxy Z Fold8 Ultra, Fold8 a Flip8, hodinky Galaxy Watch Ultra2 a Watch9 a chytré brýle ve spolupráci s Gentle Monster a Warby Parker.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | IT novinky

    Po pěti letech vývoje vyšla česká počítačová hra Scarlet Deer Inn (ProtonDB). Scarlet Deer Inn je vyšívaná temná středověká pohádka. Zatímco život ve zdánlivě obyčejné vesnici se točí kolem běžných povinností a sousedských drbů, v podzemí se skrývají zlověstná tajemství.

    Ladislav Hagara | Komentářů: 1
    včera 13:33 | IT novinky

    Představen byl Raspberry Pi Touch Display 2 s uhlopříčkou 10 palců a rozlišením 1200 × 1920 pixelů. Cena je 80 dolarů.

    Ladislav Hagara | Komentářů: 3
    včera 13:22 | Komunita

    RPCS3 (Wikipedie), tj. open source emulátor Sony PlayStation 3, snížil minimální požadavky. Nově jsou podporovány starší grafické karty ATI Radeon řady HD 2000, 3000 a 4000 z let 2007 až 2009. Na PC běží už 75 % všech her pro PlayStation 3. V budoucnu bude RPCS3 fungovat bez firmwaru z PS3. V RPCS3 byl implementován systémový modul cellSysmodule (𝕏).

    Ladislav Hagara | Komentářů: 2
    včera 11:00 | Zajímavý software

    Vyšel open-source nástroj winetop (MIT) — nativní CLI/TUI pro sledování a ukončování Wine, Proton, Lutris, Heroic a Bottles sezení. Seskupuje procesy podle WINEPREFIX / Steam AppId, umí bezpečně zabít jen hru (včetně Steam reaperu) a nabízí i skriptovatelné příkazy (list, kill, orphans, …). Balíčky jsou mimo jiné na crates.io, Copru (dnf copr enable kovariadam/winetop), PPA ppa:kovariadam/winetop a AUR (winetop-bin).

    kovariadam | Komentářů: 0
    včera 02:44 | IT novinky

    Ve spolupráci společností OpenAI a Work Louder byla představena (𝕏) hardwarová klávesnice Codex Micro pro práci s AI agenty. Cena klávesnice je 230 dolarů.

    Ladislav Hagara | Komentářů: 2
    21.7. 20:00 | Nová verze

    Byl vydán Mozilla Firefox 153.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 153 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (30%)
     (5%)
     (6%)
     (2%)
     (15%)
     (24%)
    Celkem 2213 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Konzolové programy v Qt 4 – 1 (úvod)

    10. 7. 2009 | David Watzke | Programování | 7196×

    Tento seriál bude pojetím připomínat sérii článků o programování GUI programů v Qt 4 a lišit se bude v zaměření. Zaměřovat se budu na součásti, které k běhu nevyžadují modul QtGui a tedy ani X server. Některé věci je zbytečné předvádět graficky, zatímco jiné se do konzole přímo hodí.

    Než se pustíte do dalšího čtení, doporučuji prohlédnout si alespoň první díl seriálu o GUI, protože základy jsou podobné a nemá význam opakovat zde celý úvod od začátku.

    Cílovou skupinou tohoto seriálu jsou lidé s alespoň základními znalostmi C++. Ačkoliv bude veškerý kód okomentovaný, cílem seriálu není vyučování základů C++.

    Jak začít?

    Je to celkem prosté. Ve funkci main() místo QApplication vytvoříte instanci QCoreApplication a pak už se jen stačí vyhýbat součástem z modulu QtGui.

    První ukázkový program, který jsem připravil, slouží k práci s datem. Zadáte nějaké datum a můžete k němu přičítat (nebo od něj odečítat) dny (d), měsíce (m) a roky (y). Ukázka:

    $ ./qdatemod today -7d +1m
    neděle, 10. května 2009 -> středa, 3. června 2009
    
    $ ./qdatemod 1.1.1970 +39y +4m +9d
    čtvrtek, 1. ledna 1970 -> neděle, 10. května 2009
    

    main.cpp: Nejjednodušší možná varianta. Vytvoříme instanci hlavní třídy a nespouštíme smyčku událostí pomocí app.exec(), protože by nám zde byla k ničemu. Místo toho vracíme hodnotu metody run(), která implementuje veškerou funkčnost.

    #include <QCoreApplication>
    
    #include "datemod.h"
    
    int main(int argc, char *argv[])
    {
    	QCoreApplication app(argc, argv);
    
    	DateMod main;
    
    	return main.run();
    }
    

    datemod.h: API.

    #ifndef DATEMOD_H
    #define DATEMOD_H
    
    #include <QObject>
    
    #include <QDate>
    #include <QStringList>
    #include <QTextStream>
    
    class DateMod : public QObject
    {
    public:
    	DateMod();
    	int run();
    
    private:
    	int error(QString text, int retcode = 1);
    
    	QDate baseDate;
    	QStringList argList;
    	QTextStream Output;
    };
    
    #endif // DATEMOD_H
    

    datemod.cpp: Zde je novinkou použití třídy QTextStream, která poskytuje rozhraní pro čtení a zápis textu. V programu je použita pro zápis na standardní chybový výstup.

    #include "datemod.h"
    
    #include <QCoreApplication>
    #include <QDebug>
    
    DateMod::DateMod() : Output(stderr, QIODevice::WriteOnly)
    {
    	// uložíme si seznam argumentů
    	argList << QCoreApplication::arguments();
    	// a odstraníme první položku (název spouštěného souboru)
    	argList.removeFirst();
    }
    
    int DateMod::run()
    {
    	// potřebujeme alespoň 1 argument (datum)
    	if(argList.size() < 1)		
    		return error(tr("Need at least one argument (a 'd.M.yyyy' date)!"));
    
    	// načteme zadané datum ("today" nastaví dnešní datum)
    	if(argList.first() != tr("today"))
    	{
    		baseDate = QDate::fromString(argList.first(), "d.M.yyyy");
    
    		if(baseDate.isNull())
    			return error(tr("The date you've entered is not valid.") + " " +
    				     tr("It's not 'd.M.yyyy' or it doesn't exist or it's out of range."));
    	} else
    		baseDate = QDate::currentDate();
    
    	// odstraníme ze seznamu první argument
    	argList.removeFirst();
    
    	// pokud nemáme žádné další argumenty, vypíšeme samotné datum
    	if(!argList.size())
    		return error(baseDate.toString(Qt::DefaultLocaleLongDate), 0);
    
    	// regulární výraz, který nám pomůže odfiltrovat zjevné nesmysly a
    	// dostat z řetězce potřebné části
    	QRegExp regex("^([+-]?[0-9]+)([dmy])$");
    	QDate newDate = baseDate;
    
    	// dokud seznam argumentů není prázdný
    	while(!argList.isEmpty())
    	{
    		// pokud argument neodpovídá regulárnímu výrazu
    		if(!argList.first().contains(regex))
    			return error(tr("Invalid argument: ") + argList.first());
    
    		// odstraníme první argument
    		argList.removeFirst();
    
    		bool ok = false;
    		// převedeme zadané číslo na integer
    		int add = regex.cap(1).toInt(&ok);
    		// a zkontrolujeme, zda se to podařilo
    		if(!ok)
    			return error(tr("Conversion of ") + regex.cap(1) + tr(" to int failed."));
    		// uložíme si znak na konci argumentu
    		char what = regex.cap(2)[0].toAscii();
    
    		// podle toho, jaký je na konci argumentu znak, přidáme k aktuálnímu datu
    		// zadaný počet dní, měsíců nebo roků
    		switch(what)
    		{
    		case 'd':
    			newDate = newDate.addDays(add);
    			break;
    		case 'm':
    			newDate = newDate.addMonths(add);
    			break;
    		case 'y':
    			newDate = newDate.addYears(add);
    			break;
    		default:
    			break;
    		}
    
    		// pokud nové datum není validní
    		if(newDate.isNull())
    			return error(tr("Shifted date is invalid (probably out of range)."));
    	}
    
    	// když vše proběhne v pořádku, vypíšeme původní a nové datum
    	return error(baseDate.toString(Qt::DefaultLocaleLongDate) + " -> " +
    		     newDate.toString(Qt::DefaultLocaleLongDate), 0);
    }
    
    // vypíše text na std. chybový výstup a vrátí hodnotu retcode
    int DateMod::error(QString text, int retcode)
    {
    	// vypíšeme text
    	Output << text << "\n";
    	Output.flush();
    
    	return retcode;
    }
    
    

    Zdrojáky si můžete stáhnout v archívu qdatemod.tar.bz2.

    Spouštění externích procesů

    Občas se stane, že z programu potřebujete spustit nějakou utilitu. Pro tyto účely je v Qt k dispozici třída QProcess, která v tomto směru nabízí zajímavé možnosti. Její použití si nyní předvedeme na jednoduchém příkladu.

    Na rozdíl od předchozího programu bude mít tento smyčku událostí, i když by se bez ní obešel. Nikdy totiž neuškodí – spíš naopak, je to taková jistota, že po sobě program stihne uklidit v každém případě.

    Program spouští příkaz

    /sbin/ip address show

    a parsuje z jeho výstupu názvy síťových rozhraní v systému. Výstup by měl být stejný, jako když na GNU/Linuxu spustíte

    /sbin/ip a | sed -nr '/^[0-9]+:/ s/^[^:]+: ([^:]+).*/\1/p'

    Na mém systému toto (i následující program) vypíše:

    lo
    marvell
    nvidia
    sit0
    vboxnet0

    Následuje kód:

    main.cpp:

    #include <QCoreApplication>
    #include <QTimer>
    
    #include "process.h"
    
    int main(int argc, char *argv[])
    {
            QCoreApplication a(argc, argv);
    
            // toto zajistí ukončení programu po jeho vykonání
            QTimer::singleShot(0, &a, SLOT(quit()));
    
            // vytvoříme instanci hlavní třídy
            Process main;
            // a spustíme program
            main.run();
    
            // spustíme smyčku událostí, která se v tomto případě
            // v podstatě hned ukončí
            return a.exec();
    }
    

    process.h: API.

    #ifndef PROCESS_H
    #define PROCESS_H
    
    #include <QObject>
    #include <QStringList>
    #include <QProcess>
    
    // třídu zakládám na QObject, jelikož používám sloty a lokalizační systém Qt
    class Process : public QObject
    {
            Q_OBJECT
    public:
            Process();
            void run();
    
    private:
            QProcess* process;
            QString executable;
            QStringList arguments;
    
    private slots:
            void handleOutput(int, QProcess::ExitStatus);
            void handleError(QProcess::ProcessError);
    };
    
    #endif // PROCESS_H
    

    process.cpp:

    #include "process.h"
    #include <QDebug>
    
    Process::Process()
    {
            // vytvoříme instanci objektu QProcess
            process = new QProcess(this);
    
            // cesta k programu, který budeme spouštět
            executable = "/sbin/ip";
            // argumenty programu
            arguments << "address" << "show";
    
            // propojíme signály procesu se sloty této třídy
            connect(process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(handleOutput(int,QProcess::ExitStatus)));
            connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(handleError(QProcess::ProcessError)));
    }
    
    // zpracuje chybový signál (vypíše chybovou hlášku)
    void Process::handleError(QProcess::ProcessError error)
    {
            switch(error)
            {
            case QProcess::FailedToStart:
                    qDebug() << tr("The process failed to start. (Either the file doesn't exist, or you have insufficient permissions to invoke it.)");
                    break;
            case QProcess::Crashed:
                    qDebug() << tr("The process crashed.");
                    break;
            case QProcess::ReadError:
                    qDebug() << tr("An error occurred when attempting to read from the process.");
                    break;
            default:
                    qDebug() << tr("An unknown error occurred.");
                    break;
            }
    }
    
    // zpracuje výstup programu; vypíše seznam síťových rozhraní
    void Process::handleOutput(int /*retcode*/, QProcess::ExitStatus status)
    {
            if(status == QProcess::CrashExit)
            {
                    qDebug() << tr("process crashed, quitting");
                    return;
            }
    
            // vezme celý výstup programu a rozdělí jej do seznamu,
            // kde každý řádek představuje jednu položku
            QList<QByteArray> outlines = process->readAllStandardOutput().split('\n');
    
            // vytvoříme si regulární výraz (s referencí)
            // tento regexp hledá číslo na začátku, za ním dvojtečku a jako referenci bere
            // řetězec, který je za tím (až po další dvojtečku)
            // například z "1: abc: def" bude reference "abc"
            QRegExp rx("^[0-9]+: ([^:]+)");
    
            // otevřeme si std. výstup pro zápis
            QTextStream out(stdout, QIODevice::WriteOnly);
    
            // postupně projdeme každý řádek
            for(int i=0; i<outlines.size(); i++)
                    // pokud výraz odpovídá
                    if(rx.indexIn(outlines[i]) != -1)
                            // vypíšeme první referenci
                            out << rx.cap(1) << '\n';
    
            out.flush();
    }
    
    void Process::run()
    {
            // spustí program s danými argumenty
            process->start(executable, arguments);
            // čeká, dokud se program neukončí
            process->waitForFinished(-1);
    }
    
    

    Zdrojáky si můžete stáhnout v archívu process.tar.bz2.

           

    Hodnocení: 85 %

            š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ář

    10.7.2009 00:48 __
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Includovat v C++ pouze same hlavickove soubory z C, s jedinou vyjimkou (QT4) jasne ukazuje ze pouzivat C++ pro tvorbu programu pro SHELL je spatne. Pouzivat navic jeste QT4 pro text-mode programy je jeste vice spatne. Spravne by se melo pouzit treba glib a kod by mel byt C99 ci GNU99.
    David Watzke avatar 10.7.2009 00:52 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Kde includuju hlavičkový soubory z C?
    Pouzivat navic jeste QT4 pro text-mode programy je jeste vice spatne.
    Jakto?
    Spravne by se melo pouzit treba glib a kod by mel byt C99 ci GNU99.
    Řekl kdo? :-)
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    10.7.2009 08:17 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    To nic, jeden z dalších fanatiků. On asi myslel tvůj "process.h" :-)
    10.7.2009 11:55 Dvorak
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Toto by profesionální programátor nikdy neřekl.

    I v konzolových aplikacích je potřeba spousta věcí jako networking, XML processing, regexp, threads,a dalsí a další, pro které má QT výbornou podporu (multiplatformově).

    Navíc, objektové programování je jasná cesta ve většině jazyků. Proto dnes prosazovat čisté cécko zda se být prochu mimo.

     

    Petr Tomášek avatar 10.7.2009 12:29 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    A proč ne raději glib?

    multicult.fm | monokultura je zlo | welcome refugees!
    10.7.2009 14:29 Lojza
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

     Protože je to článek o QT, ne?  Taky se v diskuzi pod článkem o gtk+ budete ptát, proč nepoužít raději GLib? POkdu tomu rozumíte, tak sem rovnou napište důvody k upřednostnění GLib a pokud jenom z nudy machrujete, tak jsem na vás ztratil čas (což mě mrzí. ale neomlouvám se).

    Petr Tomášek avatar 10.7.2009 15:18 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    On tu nějaký článek o Gtk+ je?

    multicult.fm | monokultura je zlo | welcome refugees!
    Max avatar 10.7.2009 18:08 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Buď vůbec nechápeš, na co reaguješ, nebo máš potřebu reagovat a tak musíš plácnout i sebevětší kravinu, jelikož nemáš žádné rozumné argumenty ;-).
    Zdar Max
    Měl jsem sen ... :(
    andree avatar 12.7.2009 21:27 andree | skóre: 39 | blog: andreeeeelog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    hmm, tak to vela stastia, az budes chciet nakodit konzolovy renderer napr. html+css, alebo nejaku corba aplikaciu :-) verim, ze ti vtedy nejaka ta "spatnost" da dostatocny dovod, preco napisat 10x viac kodu, a umerne viac dokumentacie a chyb :)

    10.7.2009 08:49 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    1. Je možné vytvořit v qt4 konzolovou aplikaci, která si pak může, pokud to potřebuje, otevřít nějaké okno, pak ho zase zavřít, normálně pokračovat jen v konzoli atd? V qt3 to dělám tak, že program běží na konzoli zcela bez qt, pak v určitou chvíli zavolám XInitThreads(); app=new QApplication(0,NULL);, vyhodí to sice varování QApplication: invalid Display* argument, ale pak normálně funguje. Má na to qt4 nějaké čisté řešení?
    2. Pokud qt4 defaultně používá evenloop z glib, dá se pak udělat, že by si ten zpočátku konzolový program otvíral okna qt+gtk(+tk z nějakých starých python skriptů) mixovaně a fungovalo by to?

    Dík, Venca

    David Watzke avatar 10.7.2009 11:25 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    1) Nikdy jsem to nezkoušel, ale když se nad tím zamyslím, tak můžeš zkusit vytvořit QApplication hned na začátku, jako bys to udělal v grafickém programu a potom prostě něco provádět a zavolat show() na nějakej widget (okno) až když ho budeš chtít zobrazit. Budeš si u toho okna asi muset reimplementovat closeEvent() nebo tak.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    10.7.2009 11:42 mikro
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    ide to este jednoduchsie -- ako vravis, cesta je cez klasicke QDialog::show() miesto exec() + treba nastavit, nech sa aplikacia neukonci po zavreti posledneho okna, tusim to je v QApplication triede alebo nejakych global flagoch.

    David Watzke avatar 10.7.2009 11:57 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Dá se to nastavit přes QApplication property quitOnLastWindowClosed.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Petr Tomášek avatar 10.7.2009 15:19 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Řešením je použít glib a vůbec se Qt nezabývat... (mimochodem, na tom vidíte, že gtk+/glib je líp navržena, než celá slavná Qt, prostě nikoho nenutí používat X-y...)

    multicult.fm | monokultura je zlo | welcome refugees!
    10.7.2009 15:27 Mark
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Ha. Vieš na čom je najlepšie vidieť, že gtk+/glib je lepšie navrhnutá než celá slávna Qt? Na tom, že ma dlhší názov. 9-2=7, takže gtk+/glib musí byť 7 krát lepšie navrhnutá.

    |🇵🇸 avatar 10.7.2009 16:49 |🇵🇸 | skóre: 94 | blog:
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Vždyť je to zlomek a 'g' se vykrátí...
    🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
    10.7.2009 21:44 Mark
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    :-D

    10.7.2009 15:30 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Děláte ze sebe jenom vola
    Petr Tomášek avatar 10.7.2009 15:32 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)


    To je argument jak prase...

    multicult.fm | monokultura je zlo | welcome refugees!
    10.7.2009 15:41 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    že gtk+/glib je líp navržena
    je argument ještě lepší
    Petr Tomášek avatar 10.7.2009 15:44 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Ano, to totiž argument je. Glib můžu použít v konzolové aplikaci na systému bez X11 + gtk+...

    multicult.fm | monokultura je zlo | welcome refugees!
    10.7.2009 15:55 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    QtCore taky, dál?
    10.7.2009 17:37 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    When your hammer is C++, everything begins to look like a thumb.
    Max avatar 10.7.2009 18:12 Max | skóre: 73 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    Nu, vzhledem k tomu, že už je rozumně licencováno, tak už to asi neplatí, ne?
    Zdar Max
    Měl jsem sen ... :(
    xkucf03 avatar 17.7.2009 11:38 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše GPL licence

    A před tím snad nebylo rozumně licencováno? (GPL)

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    10.7.2009 18:19 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    LOL +1, toto jsem četl poprvé:)
    andree avatar 12.7.2009 21:24 andree | skóre: 39 | blog: andreeeeelog
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    hm, myslel som ze qt gui bezi aj na platformach, ktore Xka vobec nepoznaju... hm, co sa tu dnes nedozviem :)

    Fuky avatar 12.7.2009 12:06 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    QApplication: Invalid Display* argument

    A je nějaké rozumné odůvodnění předchozí hlášky v případě, že argc = 0, argv = NULL? Nějakou diskuzi jsem našel, ale nic rozumného z ní nevyplynulo. V GTK lze použít gtk_init(NULL, NULL); v Qt se zbavuju otravné hlášky:

    int argc = 1;
    char *argv[1];
    QApplication app(argc, argv);
    

    Jak to řešit "čistě"?

    Fuky avatar 12.7.2009 12:14 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Už vím, předpokládal jsem, že volám:

    QApplication ( int & argc, char ** argv )
    

    Ale z app(0, NULL); usoudil kompilátor, že chci volat:

    QApplication ( Display * dpy, HANDLE visual = 0, HANDLE colormap = 0 )
    

    Viz ./gui/kernel/qapplication.cpp:

        if (! dpy)
            qWarning("QApplication: Invalid Display* argument");
    

    12.7.2009 23:42 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Huráá, super, díky!! Podařilo se mi to očůrat takhle:

    int argc=0;
    app=new QApplication(argc,(char**)NULL);

    Tím se vybere ten správný overload a varování se nezobrazí.

    10.7.2009 09:47
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    skrytý komentář Náš administrátor shledal tento komentář závadným.

    vulgární

    Zobrazit komentář
    mirec avatar 10.7.2009 12:47 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Minule som sa pokúšal urobiť aplikáciu schopnú vyrenderovať HTML stránku a exportovať ju do PDF. Je možné používať QPainter aj bez GUI? Neviem prečo, ale keď som nemal zobrazené žiadne okno aplikácia vždy havarovala. Pritom nepotrebujem QPainter použiť na vykresľovanie okna, ale iba na vykreslenie do súboru ...

    A ešte jedna drobnosť, neviem či poznáte knižnice ako Turbo Vision. Bolo by krásne ak by niektoré GUI prvky (základné) fungovali aj v konzole (niečo ako ncurses s tým, že by aplikácia nebežiaca v X zobrazila jednoduché rozhranie skladajúce sa z ASCII znakov). Žiaľ Qt je zamerané len na klasické okná :(

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    11.7.2009 12:18 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    QPainter je soucasti modulu QtGui, takze s cistym QtCore pouzit nejde. Samotne kresleni "do souboru", t.j. na jakykoliv podporovany "device" lze kreslit bez oken. Akorat musi existovat instance QAppliaction.
    Kuolema Kaikille (Paitsi Meille).
    David Watzke avatar 11.7.2009 12:39 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    A QtGui potřebuje X server (i když v tomhle případě nemusí běžet), takže třeba na serveru to je fakt radost...
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    limit_false avatar 13.7.2009 15:13 limit_false | skóre: 23 | blog: limit_false
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)

    Potreba X11 se da "obejit" pouzitim Xvnc nebo Xvfb. Dalsi zpusob je opatchovat Qt jak to dela napr. http://code.google.com/p/wkhtmltopdf/

    When people want prime order group, give them prime order group.
    mirec avatar 11.7.2009 14:18 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Konzolové programy v Qt 4 – 1 (úvod)
    No kreslenie funguje kým nepoužijem fonty. U fontov využíva niečo z X aj keď kreslí do súboru :(
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    11.7.2009 00:23 limit_false
    Rozbalit Rozbalit vše Pozor na fork()
    S "textovym" Qt nejde moc dobre psat daemony, ktere se potrebuji fork()-nout na pozadi. (I kdyz platformne nezavisle wrappery jako QTcpSocket mohou navadet k tomu psat neco takoveho. BTW QTcpSocket je taky plny prekvapeni, hlavne signaly v neocekavanou dobu.)

    U libICE existuje race condition, ktera zpusobi ze libICE po forknuti programu zacne psat do spatnych socketu (a program spadne). Tenhle race condition sa neprojevi vzdy, jenom na nekterych systemech. Je samozrejme mozne skompilovat Qt bez podpory libICE, ale pokud vim je to vzdy by default zapnuto na vsech distribucich.

    Založit nové vláknoNahoru

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