[Kde-devel-es] Dudas muy basicas

Ignacio Cárdenas kde-devel-es@mail.kde.org
Tue, 10 Dec 2002 23:22:24 +0100


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hola!

> Unas pequeñas dudas sobre el manual de antonio larrosa y de c++
>
> -Del manual de antonio
>  QPopupMenu *filemenu = new QPopupMenu;
>  Bien, este paso lo entiendo... pero lo que no acabo de ver
>  es porque no usamos el mismo metodo para crear el menu horizontal
>  es decir asignado memoria con el new y esas cosas, y no como hace
>  con el kmenubar
>
>  KMenuBar *menu = menuBar();

Aquí lo que tenemos es un puntero a KMenuBar llamado 'menu'. Claro, al 
principio ese puntero no apunta a nada, y si queremos que apunte a un objeto 
nuevo, pues habrá que crearlo y asignarle memoria con el operador 'new'. Sin 
embargo este no es el caso, ya que 'menu' apunta a un objeto que ya existía, 
y no hace falta crearlo ni asignarle memoria... me imagino que si le hechas 
un vistazo al código del método de 'menuBar()' te encontarás algo similar a 
esto:

KMenuBar mimenu = new KMenuBar();
........................
return mimenu;

De este modo, el método devuelve un objeto de tipo KMenuBar al que ya se le ha 
asignado la memoria. Cuado luego hacemos

KMenuBar *menu = menuBar();

tan sólo creamos un puntero que apunte a ese bloque de memoria que ya existía.

> -En el tutorial de las QT:
>
>  class MyWidget : public QWidget
>  .....
>  .....
>  .....
>  MyWidget::MyWidget( QWidget *parent, const char *name )
>
>         : QWidget( parent, name )
>
>           ^^^^^^^^^^^^^^^^^^^^^^^
>
>                 |___ es necesario volver a decir que clase hereda?

No, eso no es lo que hace... El primer código que has puesto dice que la clase 
MyWidget hereda de QWidget, pero la siguiente linea lo que hace es llamar al 
constructor de la clase QWidget con los parámetros 'parent' y 'name'. Esta es 
una estructura que se sule utilizar en las clases que heredan: se llama al 
constructor del padre para ahorrarte trabajo en la inicialización de las 
variables del propio padre.

> -Una de c++
>  No acabo de ver porque en determinados momentos hemos de acceder
> a  ciertas  funciones  con los dos puntos (::),en vez de con un simple
> punto.
>
>  ej:  KFileDialog::getOpenURL ();

No estoy seguro, pero creo que eso sólo se puede hacer con los métodos 
estáticos... estos son lo que puedes llamar indicando el nombre de la clase a 
la que pertenecen, pero no necesitas crear una instancia de la clase. En este 
caso concreto, el método 'getOpenURL()' debe ser estático, y no necesitamos 
instanciar la clase 'KFileDialog' para usarlo, es decir, no necesitamos hacer 
esto:

KFileDialog dialog = new KFileDialog();
dialog.getOpenURL();

Un saludo,
Ignacio.
- -- 
"La capacidad de decidir por nosotros mismos es la única libertad que 
realmente tenemos... Usa esa libertad."

========================
//->Ignacio Cárdenas Díaz<-//
========================
iakynet@eresmas.com
Linux user #286387 -- http://counter.li.org
- ----------------------------------
Dpto. Lenguajes y Sistemas Informáticos, UNED.
icardenas@bec.uned.es
http://www.lsi.uned.es
- ----------------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.0 (GNU/Linux)

iD8DBQE99mklkC21d1l2YQURAifgAJ9lsihDxaKVGQSmoET0CaCmo4wYOQCgq0In
/9ylb4zGltYBcDLM7MpCGrs=
=V9Qb
-----END PGP SIGNATURE-----