La primera parte de este tutorial incluye el diseño de la interfaz gráfica de usuario (GUI) que utilizamos para la aplicación de la Libreta de direcciones.
El primer paso para la creación de un programa de interfaz gráfica de usuario es el diseño de la interfaz de usuario. En este capítulo, nuestro objetivo es la creación de las etiquetas y los campos de entrada necesarios para ejecutar una aplicación básica de la libreta de direcciones. La figura a continuación es una captura de pantalla de nuestros resultados esperados.
Se seleccionarán dos objetos QLabel y se llamaran nombreLabel y direccionLabel, así como dos campos de entrada, un objeto QLineEdit, nombreLine, y un objeto QTextEdit, direccionText, para permitir que el usuario introduzca el nombre del contacto y dirección. Los reproductores utilizados y sus posiciones se muestran en la siguiente figura.
Hay tres archivos que se utilizan para aplicar esta libreta de direcciones:
addressbook.h - el archivo de definición de la clase de Libreta de direcciones,
addressbook.cpp - el archivo de implementación para la clase de Libreta de direcciones, y
main.cpp - el archivo que contiene la función main (), con una instancia de la Libreta de direcciones.
Programación Qt - subclases
Al escribir programas de Qt, por lo general subclase objetos Qt para agregar funcionalidad. Este es uno de los conceptos fundamentales detrás de la creación de widgets personalizados o colecciones de widgets estándar. Subclases para ampliar o cambiar el comportamiento de un widget tiene las siguientes ventajas:
Podemos escribir las implementaciones de las funciones virtuales o virtual pura para obtener exactamente lo que necesitamos, cayendo sobre la aplicación de la clase base, cuando sea necesario.
Nos permite encapsular partes de la interfaz de usuario dentro de una clase, de manera que las otras partes de la aplicación no necesita saber acerca de los reproductores individuales en la interfaz de usuario.
La subclase puede ser usado para crear widgets personalizados múltiples en la misma aplicación o en la biblioteca, y el código de la subclase puede ser reutilizado en otros proyectos.
Desde Qt no ofrece un widget específico libreta de direcciones, nos subclase de una clase estándar widget Qt y añadir características a la misma. La clase de Libreta de direcciones que creamos en este tutorial puede ser reutilizado en situaciones en que se necesita una base widget libreta de direcciones.
Definición de la clase libreta
El archivo libreta.h se utiliza para definir la clase de Libreta de direcciones.
Empezamos por la definición de Libreta de direcciones como subclase QWidget y la declaración de un constructor. También utilizamos la macro Q_OBJECT para indicar que la clase utiliza la internacionalización y las señales de Qt y ranuras características, incluso si no usamos todas estas características en esta etapa.
- Código:
class libreta : public QWidget
{
Q_OBJECT
public:
libreta(QWidget *parent = 0);
private:
QLineEdit * nombreLine;
QTextEdit * direccionText;
};
La clase tiene las declaraciones de nameLine y addressText, las instancias privadas de QLineEdit y QTextEdit mencionado anteriormente. Verá, en los próximos capítulos, que los datos almacenados en nameLine y addressText es necesario para muchas de las funciones de la libreta de direcciones.
No es necesario incluir las declaraciones de los objetos QLabel vamos a utilizar, porque no vamos a necesitar para hacer referencia a ellos una vez que se han creado. La forma en Qt pistas de la propiedad de los objetos se explica en la siguiente sección.
La macro Q_OBJECT sí aplica algunas de las características más avanzadas de Qt. Por ahora, es útil pensar en la macro Q_OBJECT como un atajo que nos permite utilizar el tr() y connect() funciones.
Hemos completado el archivo libreta.h y pasamos a aplicar el archivo libreta.cpp correspondiente.
La aplicación de la clase libreta
El constructor de AddressBook acepta un parámetro QWidget, padre. Por convención, se pasa este parámetro para el constructor de la clase base. Este concepto de propiedad, donde un padre puede tener uno o más hijos, es útil para agrupar widgets en Qt. Por ejemplo, si elimina uno de los padres, todos sus hijos se eliminarán también.
- Código:
libreta::libreta(QWidget *parent)
: QWidget(parent)
{
QLabel * nombreLabel = new QLabel("Nombre:");
nombreLine = new QLineEdit;
QLabel * direccionLabel = new QLabel("Direccion:");
direccionText = new QTextEdit;
Dentro de este constructor, declaramos y una instancia de dos locales de objetos QLabel, nameLabel y addressLabel, así como una instancia de nameLine y addressText. El tr () devuelve una versión traducida de la cadena, si hay uno disponible, en caso contrario, devuelve la propia cadena. Piense de esta función como una traducción <insertar aquí> marcador para marcar QString
objetos para la traducción. Usted se dará cuenta, en los próximos capítulos, así como en los ejemplos de qt
, que incluyan cada vez que utilice una cadena traducible.
Cuando la programación con Qt, es útil saber cómo diseños de trabajo. Qt ofrece tres clases de diseño principales: QHBoxLayout
, QVBoxLayout
y QGridLayout
para manejar el posicionamiento de widgets.
Usamos un QGridLayout a la posición de nuestras etiquetas y campos de entrada de una manera estructurada. QGridLayout divide el espacio disponible en una red y lugares de reproductores en las células que especificar con números de fila y columna. El diagrama de arriba muestra la celdas de diseño y la posición de nuestros widgets, y especificar este acuerdo con el siguiente código:
- Código:
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget (nombreLabel, 0, 0);
mainLayout->addWidget (nombreLine, 0, 1);
mainLayout->addWidget (direccionLabel, 1, 0);
mainLayout->addWidget (direccionText, 1, 1);
Tenga en cuenta que addressLabel se coloca usando Qt:: AlignTop como un argumento adicional. Esto es para asegurarse de que no está verticalmente en la celda (1,0). Para una visión básica sobre el diseño de Qt, consulte el documento de las clases de diseño.
Con el fin de instalar el objeto de la presentación en el widget, hemos de invocar setLayout del widget () Función:
- Código:
setLayout (mainLayout);
setWindowTitle ("Simple Libreta de Direcciones");
}
Por último, ponemos el título del widget de "Simple Libreta de direcciones".
Ejecutar la aplicaciónUn archivo separado, main.cpp, se utiliza para la función main (). Dentro de esta función, tenemos una instancia de un objeto QApplication, app. QApplication es responsable de la aplicación de diversos recursos de todo, como la fuente por defecto y el cursor, y para el funcionamiento de un bucle de eventos. Por lo tanto, siempre hay un objeto QApplication en todas las aplicaciones gráficas usando Qt.
- Código:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
libreta *lib =new libreta;
lib->show();
return a.exec();
}
Construimos un nuevo widget de Libreta de direcciones en el montón con la palabra clave nueva e invocar su show () la función para que aparezca. Sin embargo, el artilugio no se muestra hasta el bucle de eventos de la aplicación se inicia. Comenzamos el ciclo de eventos llamando al ejecutivo de la aplicación () función, el resultado devuelto por esta función se utiliza como valor de retorno de la función main ().
ejemplos de qt
connect()
connect()