Buscar en el Blog

domingo, 28 de febrero de 2016

Estructura de Datos y Algoritmos en C ++


Estructura de Datos y Algoritmos en C ++
Data Structure and Algorithms in C++
Second Edition
Michael T. Goodrich
Roberto Tamassia
David Mount

Idioma: Ingles
Páginas: 738

domingo, 21 de febrero de 2016

Qt | Cambiar el fondo de un boton cuanto se hace click sobre este.





Vamos a ver como cambiamos de color de fondo de un boton cuando presionamos sobre este. Cuando se suelte el mouse, el boton retoma su color por defecto.


Para esto haremos uso de setStyleSheet para darle la aparencia que deseamos y dentro de las comillas, antes de indicar el formato colocamos QPushButton:pressed para indicar que cambie de color cuando el boton esté presionado.

this->setStyleSheet(" QPushButton:pressed {background-color: blue;yellow}");

Esta instrucción se puede colocar en el constructor de la clase y eso seria todo.



 Si desean tener la misma aparecian del boton de la imagen, pueden hacerlo con el siguiente codigo.


this->setStyleSheet("QPushButton {background-color: green;border-style: outset;border-width: 2px;border-radius: 10px;font: bold 14px;min-width: 4em; padding: 6px;} QPushButton:pressed {background-color: yellow;}");

jueves, 18 de febrero de 2016

Qt | Colocar un fondo a un mdiArea



Para insertar un fondo a un mdiArea es muy sencillo. Usaremos solo dos lineas de código.

QImage img("ruta del fondo/archivo.jpg");
ui->mdiArea->setBackground(img);
 
Si estamos usando un archivo de recursos, la primera linea cambiaria un poco:
 
QImage img(":/prefijo/archivojpg"); 


Qt | Posicionar una ventana hija dentro de un mdiArea



Si deseamos centrar una ventana que está dentro de un mdiArea, debemos hacer referencia al contenedor de la ventana.
frmComanda.parentWidget()->setGeometry(x,y,alto,ancho);

frmComanda es la ventana hija, muentras que con la instruccion parenWidget hago referencia al mdiArea. Con el método setGeometry() posicionamos la ventana. Este método recibe 4 parametros:
Posicion X, poscion Y, alto de la ventana(en este caso el alto de frmComanda), ancho de la ventana.

Entonces se podria posicionar la ventana de la siguiente manera:


ui->mdiArea->addSubWindow(&frmComanda,Qt::FramelessWindowHint);
frmComanda.parentWidget()->setGeometry((ui->mdiArea->width()- 700)*0.5,
(ui->mdiArea->height()- 600)*0.5,700,600);
frmComanda.show();


 

El libro está protegido y no se puede modificar | Desproteger libro de excel


Para desproteger un libro de excel, haremos uso de una macro.
Presionamos ALT+F11 para entrar al editor de Aplicaciones de Visual Basic.


Ingresamos a cualquier hoja y agregamos el siguiente código.
Sub DesprotegerLibro()

If MsgBox("Realmente desea desproteger el libro actual?", _

vbCritical + vbYesNo + vbDefaultButton2, "DesprotegerLibro") = vbYes Then

Dim i As Integer, j As Integer, k As Integer

Dim l As Integer, m As Integer, n As Integer

On Error Resume Next

For i = 65 To 66: For j = 65 To 66: For k = 65 To 66

For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66

For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66

For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

ActiveWorkbook.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & _

Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

If ActiveWorkbook.ProtectStructure = False And ActiveWorkbook.ProtectWindows = False Then

MsgBox "El libro está ahora desprotegido", vbInformation + vbOKOnly, "DesprotegerLibro"

Exit Sub

End If

Next: Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next

End If

End Sub





Después de ejecutar la macro y aceptar el mensaje nos aparecerá otra ventana
indicando que el libro ha sido deshabilitado.
 
Finalemente el libro quedó desprotegido.
 
 
 
 

miércoles, 17 de febrero de 2016

Qt | Saber que objeto emitió una señal



A veces es necesario saber que objeto emitió la señal. Por ejemplo, si tengo agregados dinamicamente "n" objetos en mi caso 10 botones y quiero saber en que boton se hizo click, entonces se usaria la función sender de QObject.


int n=0;
    for(int i=0;i<10;i++)
    {
    QPushButton *mesa=new QPushButton(this);
    mesa->setText(QString::number(i));//asignando un texto al botón
    mesa->move(n,100);//para posicionar los botobes
    n=n+100;
    //conectamos el boton con el slot
    connect(mesa,SIGNAL(clicked()),this,SLOT(abrirComanda()));



    }


En el código anterior, estoy agregando 10 botones a mi ventana. Además estoy conectando todos los botones al SLOT abrirComanda. Si desea saber en que boton se hizo click, colocaria el siguiente código en el SLOT.



QObject *senderObj = sender();



Con sender obtengo un puntero al objeto que envió la señal, si se llama en una ranura activado por una señal; de lo contrario, devuelve 0. El puntero es válido sólo durante la ejecución de la ranura que se llama a esta función a partir del contexto del hilo de este objeto.

El puntero devuelto por esta función se convierte en no válida si el remitente es destruido, o si la ranura está desconectado de la señal del emisor.



 void frmVentanaMesas::abrirComanda()
{
    QMessageBox m;
    QObject *senderObj = sender();
    m.setText(qobject_cast<QPushButton *>(senderObj)->text());
    m.exec();


}
 En el codigo anterior, despues de obtener un puntero al objeto desde donde se emitió la señal, realizo un cast para convertirlo a la clase correspondiente, para poder accerder a todos los métodos, funciones y/o propiedades.

Advertencia: Esta función viola el principio orientado a objetos de la modularidad. Sin embargo, obtener el acceso al remitente podría ser útil cuando muchas señales están conectados a una única ranura.

lunes, 15 de febrero de 2016

Abrir una sola instancia de una ventana | Qt


En algunas ocasiones solo queremos mostrar una sola instancia de una ventana. Para eso colocaremos una variable del tipo de ventana que deseamos abrir en el archivo de cabecera.

private:
    Ui::Principal *ui;
    frmVentanaMesas frmComanda;//Aqui
 
 
 
Luego en el metodo que abrirá la ventana agregamos el sisguiente código:
 
void Principal::on_pbMesasComanda_clicked()
{
    if(frmComanda.isVisible()==false)//si no es visible,lo agregamos al
    {//al mdiarea y mostramos la ventana con el método show.
        ui->mdiArea->addSubWindow(&frmComanda);
        frmComanda.show();
    }
} 


Agregar Ventanas a un QMdiArea

 

                 frmVentanaMesas *frmComanda=new frmVentanaMesas(this);//creamos una instancia   de        //frmVentanaMesas 
        ui->mdiArea->addSubWindow(frmComanda);//Aqui agregamos la ventana al mdiarea
        frmComanda->show();//mostramos la ventana en el mdiarea

Conversion de Tipo de dato cast | Qt c++ | qobject_cast

Para la conversion en Qt se usa la instruccion qobject_cast() de la clase QObject.
Se intenta lanzar su argumento al tipo de puntero especificado en paréntesis angulares, devolviendo un puntero distinto de cero si el objeto es del tipo correcto (determinado en tiempo de ejecución), o 0 si el tipo de objeto es incompatible.

QWidget *widget = qobject_cast<QWidget *>(obj);

Por ejemplo:
Si tengo un puntero de la clase QWidget que deseo convertir a QMdiSubWindow, entonces el codigo seria el siguiente:

qobject_cast<QMdiSubWindow*>( frmComanda));

En donde QMdiSubWindow es la clase destino o el tipo de dato destino y frmComanda es lo que deseo convertir al tipo QMdiSubWindow.
 

domingo, 14 de febrero de 2016

#include "" vs #include <>



Para #include "nombre de archivo" las búsquedas del preprocesador en el mismo directorio que el archivo que contiene la Directiva. Este método se utiliza normalmente para incluir archivos de cabecera definidos por el programador.

Para #include <fichero> las búsquedas de preprocesador en una forma dependiente de la aplicación, normalmente en los directorios de búsqueda pre-designado por el compilador / IDE. Este método se utiliza normalmente para incluir archivos de cabecera de la biblioteca estándar.

Maximizar una Ventana en Qt C++

 Maximizar una Ventana en Qt C++
Para que aparesca la ventana maximizada al iniciar la aplicacion, necesitamos colocar el siguiente código en el contructor de la clase.

      this->setWindowState(Qt::WindowMaximized) ;
Con lo cual el código queria de la siguiente manera:

#include "principal.h"
#include "ui_principal.h"

Principal::Principal(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Principal)
{
    ui->setupUi(this);
    this->setWindowState(Qt::WindowMaximized) ;

}

Principal::~Principal()
{
    delete ui;
}



jueves, 4 de febrero de 2016

PowerBuilder: Conexion a Sql Server usando OLEDB


PowerBuilder: Conexion a Sql Server usando OLEDB





// Profile OLEDB
SQLCA.DBMS = "OLE DB"
SQLCA.LogPass = "password"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='.',PROVIDERSTRING='database=almacen'"
connect using sqlca;


miércoles, 3 de febrero de 2016

Computer Viruses, Artificial Life and Evolución



Virus de Computadoras
 Vida Artificial y Evolución

The Little Black Book
of Computer Viruses
Volumen II
Mark A. Ludwig

Páginas 383



martes, 2 de febrero de 2016

The Little Black Book of Computer Viruses




Autor: Mark Ludwig
Idiama: Ingles
Páginas: 183


El presente libro nos habla sobre los tipos de virus de computadoras, como funcionan, herramientas necesarias para poder escribir nuestro propio virus. Un tema muy interesante para los apasionados de la informática.

Advanced qt Programing - Creación de un gran software con Qt C ++



Creación de un gran software con Qt C ++

 Autor: Mark Summerfield
Idioma: Ingles
Páginas: 554