PDF de programación - Programación visual en KDE KDevelop3 + KDevDesigner

Imágen de pdf Programación visual en KDE KDevelop3 + KDevDesigner

Programación visual en KDE KDevelop3 + KDevDesignergráfica de visualizaciones

Publicado el 18 de Mayo del 2018
357 visualizaciones desde el 18 de Mayo del 2018
2,0 MB
104 paginas
Creado hace 19a (15/03/2005)
K Desktop Enviroment

Programación visual en KDE

KDevelop3 + KDevDesigner

Matías Costa
[email protected]

14 de Marzo de 2005

Matías Costa 2005
CC Attribution-ShareAlike

Contenidos

➔ C++ Básico
➔ Creación de proyectos y clases en KDevelop3
➔ Poniendo controles con el ratón: KDevDesigner
➔ Objetos Qt
➔ Señales y ranuras
➔ Eventos
➔ Acciones KDE
➔ Configuración de aplicaciones: QConfig y

KConfig XT

C++ básico

¿Porque C++?

➔ Velocidad
➔ Compatible C

– Utilización directa de librerías en C
– Reutilización de código
– Reutilización de conocimientos

➔ Herencia multiple
➔ Templates
➔ Sobre todo: ¡funciona!

C++ básico

Objetos

class MiClase {

MiClase::MiClase(int valor){

public:

miEntero = valor;

MiClase(int valor);
~MiClase();
int miMetodo();

private:

}

MiClase::~MiClase(){}

int MiClase::miMetodo(){

return miEntero;

int miEntero;

}

}

C++ básico

Objetos “estaticos”

void UnaClase::unMetodo() {

MiClase miObjeto( 5 );
int unEntero = miObjeto.miMetodo();

}
➔ Objeto creado en la pila
➔ Estos objetos se destruyen

implicitamente

C++ básico

Objetos “dinamicos” y punteros

void UnaClase::unMetodo() {

MiClase *miObjeto = new MiClase( 5 );
int unEntero = miObjeto->miMetodo();
delete miObjeto;

}
➔ Estos objetos usan memoria dinamica y

deben ser destruidos explicitamente
➔ Normalmente usados como objetos

miembro

➔ Si haces un new QObject, y este tiene

padre, no hace falta hacer el delete

➔ Si haces un new QWidget, procurar que
tenga siempre padre, así seguro que no
tendrás una fuga de memoria

C++ básico

Referencias

MiClase miObjeto( 5 );

MiClase &mismoObjeto = miObjeto;

int unEntero = miObjeto.miMetodo();

int otroEnteroIgual = mismoObjeto.miMetodo();
➔ Conceptualmente iguales a un puntero,

pero con diferente sintaxis

➔ Útiles para cambiar parámetros sin

tener que retocar código

C++ básico

Constantes

➔ Punteros constantes
MyClass* const MyClass

➔ Punteros a constantes

const MyClass *myClass

➔ Referencias constantes

const MyClass &myClass
➔ Metodos constantes

int someProperty() const;

K Desktop Enviroment

El primer proyecto

Creación de proyectos

➔ Hacer un «¡Hola mundo!» es realmente

fácil

Hola mundo

Creación de proyectos

Configurando el proyecto

➔ Proyecto > Opciones del proyecto
➔ General

– Poner nuestro nombre y email

➔ Extensiones

– Activar grupos de archivos

➔ Opciones de configure

– Añadir '-pipe' a los parámetros del

compilador

Creación de proyectos

Completado automático de código

➔ Especifico de C++

Creación de proyectos

➔ Navegador de clases y métodos

El entorno

Creación de proyectos

main.cpp

➔ Se crea un KApplication
➔ Se procesan los argumentos y

parámetros con KCmdLineArgs::init()

➔ Se instancia el widget principal.
➔ Se le especifica a la aplicación el

widget principal con setMainWidget()
➔ Se muestra dicho widget con show()

Creación de proyectos

holamundowidget.cpp

➔ El widget principal hereda de

KMainWindow.

➔ KMainWindow proporciona una barra de

estado, de herramientas, menú... etc

➔ En nuestro sencillo hola mundo solo se

coloca un widget central con
setCentralWidget()

Creación de proyectos

El entorno

➔ KDevelop3 maneja autoconf / automake
➔ make con F8 o
➔ make y ejecutar con F9 o
➔ KDevelop nos preguntara amablemente
si queremos ejecutar './configure' si no
encuentra un archivo 'Makefile'

➔ Podemos filtrar la salida de make y el

compilador

Creación de proyectos

El entorno

➔ Grupos de archivos

K Desktop Enviroment

Señales y ranuras

( Signals/Slots )

Señales y ranuras

Problemas

➔ Hacer un programa grafico es más

dificil que uno de consola
– Ejecución no secuencial
– Las acciones del usuario son impredecibles
– Normalmente la interfaz y comportamiento

no esta bien definida al principio del
proyecto

➔ Problema: ¿como responder a los

eventos de los controles?

Señales y ranuras

void on_click(void *(*handler)(void));

void do_something(void) { .... }

int main(int argc, char **argv){

La vieja escuela C

cwidget.h

CWidget *my_widget=cwidget_new_button(“Button text”);

my_widget->on_click(do_something);

....

}

app.c

Señales y ranuras

El modelo Java (I)

public class MyDialog extends JDialog {

....

public MyDialog(Frame owner, String title, boolean modal) {

super(owner, title, modal);
try {

JButton myButton = new Jbutton();
myButton1.setText("Button text");
myButton1.addActionListener(new

MyDialog_myButton_actionAdapter(this));

....

} catch (Exception exception) { .... }

}

public void MyButton_actionPerformed(ActionEvent e) { .... }

}

MyDialog.java

Señales y ranuras

El modelo Java (II)

➔ Objeto “pegamento”

class MyDialog_myButton_actionAdapter implements ActionListener {

private MyDialog adaptee;

Dialog1_jButton1_actionAdapter(Dialog1 adaptee) {

this.adaptee = adaptee;

}

public void actionPerformed(ActionEvent e) {

adaptee.jButton1_actionPerformed(e);

}

}

MyDialog.java

Señales y ranuras

public signals:

void click();

public slots:

void doSomething();

void MyClass::doSomething() { .... }

“The Qt's way”

qpushbutton.h

myclass.h

void MyClass(QWidget *parent, const char *name)

:ParentClass(parent, name) {

QPushButton *myButton = new QPushButton(this);

connect(myButton, SIGNAL( clicked() ),

this, SLOT( doSomething() ) );

}

....

myclass.cpp

➔ Intuitivo y flexible
➔ Sin codigo pegamento: menos código
que mantener, implementaciones más
claras

➔ Seguro, un objeto conectado eliminado

no provoca segfault

➔ Type safe: si no coinciden, o no existe

una señal o ranura, simplemente se
avisa por la salida de error

K Desktop Enviroment

El diseñador de interfaces

KDevDesigner

Diseñador de interfaces

➔ Diseñador

El entorno

Etiqueta
(Qlabel)

Botón

(QPushButton)

Diseñador de interfaces

➔ Qt puede manejar el tamaño y colocación
de los widgets automáticamente (QLayout)

“Layouting”

➔ Alinea los widgets de manera

horizontal, vertical o en cuadricula

➔ Alinea los widgets de manera

horizontal o vertical con separadores
(QSplitter)

➔ Rompe la alineación

Diseñador de interfaces

“Layouting”

➔ Pinchar en el fondo del formulario y

romper la alineación

➔ Redimensionar la etiqueta y moverla

abajo

➔ Colocar cuatro casillas de selección

– Doble click en el botón para colocar varios

widgets

– Un solo click en el formulario, o arrastrar para

especificar tamaño

Diseñador de interfaces

“Layouting”

➔ Volver a pinchar en el fondo del

formulario y alinear verticalmente

Señales y ranuras

Convención de nombres

➔ Los objetos o variables miembro se

preceden con 'm_', 'm' o '_' .
Ej: MyClass::m_myProperty

➔ Las propiedades se cambian con set*.

Ej: MyClass::setProperty()

➔ Para consultar, simplemente el nombre.

Ej: MiClass::property()
– Si es bool a veces se precede con 'is'

Ej: MiClass::isEmpty()

Señales y ranuras

“Layouting”

➔ Para cambiar la etiqueta de
las casillas pulsar dos veces
sobre ellas.

➔ Podemos usar el carácter '&'

para usar la letra siguiente
como “acelerador”
– El propio diseñador elegirá

uno por nosotros

– No nos dejara repetir letra

Señales y ranuras

➔ Cambiamos el nombre de los widgets
en el campo 'name' abajo a la derecha

Señales y ranuras

Programando con una mano y el ratón (I)

➔ Seleccionar la herramienta de conexión

de señales/ranuras

➔ Pinchar sobre m_kde y arrastrar hasta

m_gnuLinux

➔ Conectar toggled() con setChecked()

Señales y ranuras

Programando con una mano y el ratón (II)

➔ Repetir con toggled()  setDisabled()
➔ Conectar también estas señales a m_pretty
➔ Guardar ( ) y ejecutar ( )

K Desktop Enviroment

KMyPeople

KMyPeople

➔ Vamos a hacer
una aplicación
mas o menos
útil “full KDE”

KMyPeople

➔ La aplicación es

un visor html

➔ Podemos abrir
una página en
Internet gracias a
la transparencia
de red de KDE
(KIO)

KMyPeople

➔ Quitamos KMyPeople::m_printer y

cualquier referencia a el
– También KMyPeople::filePrint()

➔ Eliminamos KMyPeopleView::print()
➔ En KMyPeople::setupActions()

eliminamos KStdAction::print(this,
SLOT(filePrint())...

KMyPeople

➔ Para que los textos aparezcan en

español simplemente colocamos la línea
KLocale::setMainCatalogue("kdelibs");
la primera de main() en main.cpp

➔ Deberíamos escribir todas las cadenas

con i18n(), en ingles, generar un
catalogo y traducirlo. Pero vamos a
obviarlo y escribiremos los textos
directamente en español

KMyPeople

➔ Creamos un nuevo

widget en la barra de
nuevos archivos a la
izquierda

➔ Lo llamamos

KMyPeopleViewBase

➔ Aceptamos el siguiente
dialogo para añadirlo al
proyecto

KMyPeople

➔ Llamamos al formulario

KMyPeopleViewBase

➔ Editar > Form Settings...

– Nombre de la clase: KMyPeopleViewBase
– Podemos rellenar otros campos como el

autor o los comentarios

KMyPeople

➔ Lo abrimos y añadimos widgets

– Un KListBox ( View (KDE) )
– Tres QLabel ( Display )
– Tres KLineEdit ( Input (KDE) )

KMyPeople

➔ Seleccionamos los KlineEdit y QTextLabel

y los alineamos verticalmente
– Arrastrando el ratón
– Con la tecla mayusculas pulsada

KMyPeople

➔ Seleccionamos el KListBox y el grupo
recién creado y los alineamos con un
splitter
– Para seleccionar el grupo hay que pinchar

en la linea roja

KMyPeople

➔ Ahora simplemente pinchamos en el
fondo del formulario y seleccionamos
alineación vertical

➔ Podemos ver el resultado con

Ventana > Previsualizar formulario
– O pulsando Crtl+T

KMyPeople

➔ Eliminamos KParts::ReadOnlyPart

*m_html de la clase KMyPeopleView
➔ Cambiamos la definicion de la clase
KMyPeopleView para que herede de
KMyPeopleViewBase en vez de QWidget
➔ En el constructor lo eliminamos todo y

también cambiamos QWidget por
KMyPeopleViewBase

KMyPeople

➔ Ejecutamos y vemos el resultado

KMyPeople

➔ Poner texto a los QTextLabel y darle
nombre a los KLineEdit y el KListBox

m_listBox

m_name

m_surname

m_phone

KMyPeople

➔ Vamos quitando las alineaciones y

añadimo
  • Links de descarga
http://lwp-l.com/pdf11082

Comentarios de: Programación visual en KDE KDevelop3 + KDevDesigner (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad