• Non ci sono risultati.

Interfacce grafiche in Qt

N/A
N/A
Protected

Academic year: 2022

Condividi "Interfacce grafiche in Qt"

Copied!
33
0
0

Testo completo

(1)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Interfacce grafiche in Qt

Fondamenti di informatica

Michele Tomaiuolo

tomamic@ce.unipr.it

http://www.ce.unipr.it/people/tomamic

(2)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Caratteristiche di Qt

Design OO: classi intuitive, riusabili ed estendibili Open source: Qt Project, Nokia Digia

Portabile: buone prestazioni con poche risorse

Sistemi desktop: Windows, MacOS, Linux …

Mobile/embedded: Android (Necessitas), Symbian, MeeGo-JollaOS, BlackBerry QNX, Raspberry Pi …

App avanzate: KDE, KOffice, VLC, Google Earth, Skype (Linux), Mathematica…

Sviluppo multipiattaforma

(3)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Libreria modulare

Modulo Descrizione

QtCore Core non-graphical classes used by other modules QtGui Graphical user interface (GUI) components

QtMultimedia Classes for low-level multimedia functionality QtNetwork Classes for network programming

QtOpenGL OpenGL support classes QtOpenVG OpenVG support classes

QtScript Classes for evaluating Qt Scripts QtScriptTools Additional Qt Script components

QtSql Classes for database integration using SQL QtSvg Classes for displaying the contents of SVG files QtWebKit Classes for displaying and editing Web content QtXml Classes for handling XML

QtXmlPatterns An XQuery & XPath engine for XML and custom data models QtDeclarative An engine for declaratively building fluid user interfaces

Phonon Multimedia framework classes Qt3Support Qt v.3 compatibility classes

(4)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Interfacce grafiche

Modulo QtGui per interfacce grafiche evolute

Usabilità, esperienza più soddisfacente per utente Supporto grafica 2D, integrazione con OpenGL Anti-aliasing, trasparenza, trasformazioni vettoriali

Insieme completo di widget di partenza

Sviluppo con meno codice, sfruttando la lib Buona OOP: specializzazione e composizione

Personalizzazione stile con poche righe di CSS

QApplication::setStyleSheet

(5)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Bottoni

QPushButton

QToolButton

QRadioButton

QCheckBox

(6)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Contenitori

QGroupBox QFrame

QToolBox

QTabWidget

(7)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Viste di elementi

QListView

QTreeView

QTableView

(8)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Display

QProgressBar

QLCDNumber

QLabel

(9)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Menu ecc.

QMenu

QMenuBar

QToolBar

QStatusBar

(10)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Input

QSlider QLineEdit QComboBox

QDoubleSpinBox QSpinBox

QTimeEdit QDateEdit

QDateTimeEdit

(11)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Input

QCalendarWidget QTextEdit

QScrollBar

QFontComboBox

QDial

(12)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Stili

Sfrutta le primitive grafiche della piattaforma

Efficienza e aspetto delle app familiare e intuitivo Ma possibile usare anche uno stile personalizzato!

QApplication::setStyle(new QWindowsStyle);

(13)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Disposizione dei widget

#include <QApplication>

#include <QTextEdit>

int main(int argv, char **args) { QApplication app(argv, args);

QTextEdit textEdit;

textEdit.show();

return app.exec();

}

Gestione del ciclo degli eventi (mouse,

tastiera ecc.) Gestione del ciclo degli eventi (mouse,

tastiera ecc.)

Tutorial:

Hello notepad Tutorial:

Hello notepad

(14)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Creare un nuovo widget

Estendere QWidget , o una sua sottoclasse Aggiungere funzionalità

Implementiamo metodi virtuali o virtuali puri Altrimenti usati i metodi della classe base

Incapsulare parti dell'interfaccia utente

Nuovo widget: composto da widget elementari

Altre parti dell'applicazione non hanno bisogno di conoscere i singoli widget

Il nuovo widget può essere riusato

(15)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Sottoclasse di QWidget

class Notepad : public QWidget {

Q_OBJECT public:

Notepad();

public slots:

void exit();

private:

QTextEdit * textEdit;

QPushButton * exitButton;

};

Vogliamo chiedere conferma all'utente

prima di uscire Vogliamo chiedere conferma all'utente

prima di uscire

Metodi speciali, da

connettere a segnali

Metodi speciali, da

connettere a segnali

Aggiunge la gestione di

segnali e slot Aggiunge la gestione di

segnali e slot

I widget semplici sono incapsulati come

campi privati I widget semplici sono incapsulati come

campi privati

(16)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Costruire la GUI

Notepad::Notepad() {

textEdit = new QTextEdit();

exitButton = new QPushButton(tr("Quit"));

QLayout * layout = new QVBoxLayout();

layout->addWidget(textEdit);

layout->addWidget(exitButton);

setLayout(layout); // QWidget setWindowTitle(tr("Notepad"));

connect(

exitButton, SIGNAL(clicked()), this, SLOT(exit()));

Costruttore:

componiamo la GUI Costruttore:

componiamo la GUI QObject::tr

traduce il testo della interfaccia utente

QObject::tr traduce il testo della

interfaccia utente

Widget disposti in un layout

verticale Widget disposti in un layout

verticale

(17)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Layout principali

Qt usa il meccanismo dei layout per disporre i widget Ci sono tre classi di layout pricipali

QHBoxLayout QVBoxLayout QGridLayout

Per installare un layout su un widget, dobbiamo invocare il metodo setLayout del widget

Il layout gestisce l'area interna al widget

(18)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Layout compositi

È possibile inserire un layout dentro un altro Es. Layout aggiuntivo a destra, con bottoni disposti in verticale

// …QVBoxLayout* buttonLayout = new QVBoxLayout();

buttonLayout->addWidget(openButton);

buttonLayout->addWidget(saveButton);

buttonLayout->addWidget(exitButton);

buttonLayout->addStretch();

(19)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Stretch, gestire lo spazio

With addStretch()

Dopo i bottoni abbiamo inserito uno “stretch”

Si estende fino ad occupare tutto lo spazio avanzante

With addStretch() Without addStretch()

(20)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Rendere l'applicazione reattiva

// …

connect(openButton, SIGNAL(clicked()), this, SLOT(open()));

connect(saveButton, SIGNAL(clicked()), this, SLOT(save()));

connect(exitButton, SIGNAL(clicked()), this, SLOT(exit()));

openButton : clicked()

openButton : clicked() connect Notepad : open() Notepad : open()

Signals Slots

connect

(21)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Accoppiamento tra segnali e slot

Accoppiamento lasco

Un oggetto emette segnale, ma non sa quali slot ricevono Molti segnali ad un singolo slot, un segnale a molti slot

Type safe

La firma del segnale deve corrispondere a quella degli slot collegati

La firma di uno slot può

essere più corta, trascura

degli argomenti che riceve

Compilatore rileva errori

(22)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Scrittura file

void Notepad::save() {

QString fileName = QFileDialog::getSaveFileName(this);

if (fileName != "") {

ofstream out(fileName.toStdString()); // c++11 if (out.good()) {

QString text = textEdit->toPlainText();

out << text.toStdString();

} else {

QMessageBox::critical(this, tr("Error"), tr("Could not save file"));

} } }

Scelta file di scrittura Scelta file di scrittura

Scrittura intero testo

Scrittura intero testo

(23)

Tomaiuolo Fondamenti di informaticaTomaiuolo Fondamenti di informatica . Ingegneria dell'informazione UniPR. Ingegneria dell'informazione UniPR p://www.ce.unipr.it/people/tomamic/p://www.ce.unipr.it/people/tomamic/

Lettura file

void Notepad::open() {

QString fileName = QFileDialog::getOpenFileName(this);

if (fileName != "") {

ifstream in(fileName.toStdString().c_str()); // c++03 if (in.good()) {

string content; getline(in, content, '\0');

textEdit->setText(content.c_str());

} else {

QMessageBox::critical(this, tr("Error"), tr("Could not open file"));

} } }

Scelta file di lettura Scelta file di lettura

Lettura intero file

Lettura intero file

(24)

Fondamenti di informatica Fondamenti di informatica dell'informazione UniPR dell'informazione UniPR unipr.it/people/tomamic/unipr.it/people/tomamic/

Chiusura app

void Notepad::exit() {

int button = QMessageBox::question(

this,

tr("Notepad - Quit"),

tr("Do you really want to quit?"), QMessageBox::Yes | QMessageBox::No);

if (button == QMessageBox::Yes) { close();

} }

// See documentation (F1):

// QMessageBox // QInputDialog

Dialogo per conferma Dialogo per

conferma

Chiusura finestra Chiusura

finestra

Riferimenti

Documenti correlati

aiuolo – Fondamenti di informaticaaiuolo – Fondamenti di informatica egneria dell'informazione – UniPR egneria dell'informazione –

Input space: building P using probability distributions so that picking two similar points is much more probable than picking two points which are well far apart.. Output

In questa lezione si continua la descrizione degli elementi di base utilizzati a livello RTL.. Si discute la suddivisione fra percorso dati e unità

lo – Fondamenti di informatica lo – Fondamenti di informatica eria dell'informazione – UniPR eria dell'informazione – UniPR

• Una variabile è un ente, appartenente ad un certo tipo, che può assumere uno qualunque dei valori appartenenti al tipo. • Una variabile è identificata da un

Un utente locale è definito solo in uno specifico computer, quindi non può accedere ad altri computer. Un utente globale è definito per tutti i computer della stessa

Nazionale per l'informatica Consorzio Interuniversitario (art.91 DPR 283/1980) (Organismo di diritto pubblico con personalità giuridica di diritto privato soggetto a

In generale, per qualunque impiego di MOGM in Ateneo, gli operatori devono essere forniti di dispositivi di protezione individuale (DPI), l’accesso deve essere controllato, deve