Sustituyendo la interfaz gráfica por QML (parte I)

Buenas de nuevo,

Se nota que estoy a tope eh? 🙂

Bien, ahora vengo con la idea de comentaros como enfoco el tema de sustituir la antigua interfaz gráfica basada en QWidgets por la nueva, fantástica y radiante interfaz gráfica hecha en QML (y no digo esto porque la he hecho yo 😉 ).

Igual que cuando empecé a desarrollarla, ahora es momento de analizar cuándo se usa la interfaz antigua ya la relación que tiene con el resto del programa. Pero antes de eso vamos a echarle un vistazo a cómo funciona el tema de las interfaces en Qt.

Cuando se trabaja con interfaces basadas en QWidgets (hablaré del caso de la programación para KDE que es un poco especial) se diseña una interfaz gráfica en el editor gráfico de QtCreator lo que da como resultado un archivo XML que define la interfaz gráfica (en este caso call-window.ui). Ese archivo se llama durante el programa, declarando como variable directamente (en este caso Ui::CallWindow ui;) y se asigna la interfaz al mismo mediante un comandillo que se llama setupUi() (en este caso d->ui.setupUi(this)), después de haber incluido la interfaz con el mítico #include (en este caso #include “ui_call-window.h”) .

Una vez hecho esto, se tiene acceso a todos los widgets definidos en el archivo .ui a través de la clase de la interfaz gráfica. Para este programa sería:

$cat call-window.cpp | grep ui.
     Ui::CallWindow ui;
     : KXmlGuiWindow(), d(new Private)
     d->ui.setupUi(this);
     d->ui.errorWidget->hide();
     d->ui.errorWidget->setMessageType(KMessageWidget::Error);
     setupGUI(QSize(428, 395), ToolBar | Keys | StatusBar | Create, QLatin1String("callwindowui.rc"));
     handler->connectDtmfWidget(d->ui.dtmfWidget);
         d->ui.remoteUserDisplayLabel->setText(QString::fromAscii(
         d->ui.videoPreviewWidget->setVideoSink(QGst::ElementPtr());
             d->ui.videoPreviewWidget->setVideoSink(localVideoSink);
         d->ui.videoWidget->setVideoSink(QGst::ElementPtr());
             d->ui.videoWidget->setVideoSink(remoteVideoSink);
         d->ui.callStackedWidget->setCurrentIndex(0);
         d->ui.callStackedWidget->setCurrentIndex(1);
             d->ui.videoPreviewWidget->show();
             d->ui.videoPreviewWidget->hide();
     d->muteAction->setCheckedState(KGuiItem(i18nc("@action", "Mute"), KIcon("audio-volume-muted")));
     d->ui.dtmfStackedWidget->setCurrentIndex(checked ? 1 : 0);
         KXmlGuiWindow::closeEvent(event);
         d->ui.errorWidget->setText(i18nc("@info:error", "There was an error while pausing the call"));
         d->ui.errorWidget->animatedShow();
         d->ui.videoPreviewWidget->hide();
         d->ui.videoWidget->repaint();
         d->ui.videoPreviewWidget->show();

Y como me estoy alargando mucho analizaré las partes una a una en la parte II de este tutorial y seguiré adelante con la solución.

Stay tuned!

Parte II

Anuncios

Un pensamiento en “Sustituyendo la interfaz gráfica por QML (parte I)

  1. Sustituyendo la interfaz gráfica por QML (parte II) – Mi PFC

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s