Funciones Qt en formato Harbour

09/08/2010

Descargue las libtrias Qt, que estan en el disco de instalacion
de mandriva 2010 y cree un nuevo guion para compilar mi sistema con
harbour + Qt , quedo asi:
---------------------------------------------------------------------
clear
date
echo '*********************************************************'
echo '* Compila harbour con hbmk2 *'
echo '* *'
echo '* Konta *'
echo '* *'
echo '*********************************************************'

export HB_INC_INSTALL=/usr/include/harbour
export HB_LIB_INSTALL=/usr/lib/harbour

ls -1 *.prg > sos1
sed 's/*/ /' sos1 > sos2.clp

hbmk2 -m -n0 -okonta.out -gtxwc @sos2.clp -lhbqt -lhbqtcore -lhbqtgui
-lhbqtnetwork -lQtCore -lQtGui -lQtNetwork -lQtUiTo\
ols

rm sos1*
rm sos2*
rm hb_out.log

date

exit


-------------------------------------------------------------------------
deben observar la citacion a las librerias Qt en el hbmke, de nuevo
en sos2.clp quedan todos los progrmaw .prg y uno que tiene la funcion
main()

Esto es todo, desde el compilador, luego segui el proceso de crear
las funciones que yo queria para emular el sistema texto pero en la
forma grafica, sin los problemas del modo textp.

aqui va una relacion de como quedo el listado de funciones
desarrolladas

--------------------------------------------------------------------------

/*
Rutinas con Qt

Medellin 28/07/2010
Carlos Arturo Castaño G

*/

/*----------------------------------------------------------------------*/
FUNCTION xReleaseMemory( aObj )

/* libera variablers y objetos de memoria */

#if 1
LOCAL i

for i := 1 TO len( aObj )
if hb_isObject( aObj[ i ] )
aObj[ i ]:pPtr := 1
elseif hb_isArray( aObj[ i ] )
xReleaseMemory( aObj[ i ] )
endif
next

#else
HB_SYMBOL_UNUSED( aObj )
#endif
RETURN nil

/*----------------------------------------------------------------------*/
FUNCTION QtParamK()

/* Parametros basicos de extension de la pantalla grafica maxima */
/* y algunos parametros para el manjo de los messages de alerta , */
/* informativos etc. */
/* Por lo general defino y declaro los parametros en cada funcion */
/* pero estos son externos para no temer qye definir cada tipo */
/* de mensaje por separado /*

public XMAXIMA_ := 1024
public YMAXIMA_ := 768
public XBASE_ := 120.00 //(mantiene la relacion 80/25)
public YBASE_ := 37.50

public MSG_NOICON := 0
public MSG_INFORMATIVO := 1
public MSG_WARNING := 2
public MSG_CRITICO := 3
public MSG_PREGUNTA := 4

return

/*----------------------------------------------------------------------*/
FUNCTION cssK(tipo)

/*
defino 2 tpos basicos de ppresentacion lo que llamo tipo say
y los que llamo tipo get, se pueden definir tantos como se necesiten
es una simplificacion del modelo css
*/

local parametros
do case
case tipo = 1 //1=say 2=get
parametros := "font:bold 14px;"
parametros := parametros + "background-color:blue;"
parametros := parametros + "color : yellow;"
parametros := parametros + "selection-color :blue;"
parametros := parametros + "selection-background-color:yellow"
case tipo = 2
parametros := "font:bold 12px;"
parametros := parametros + "background-color:#c7c8e1;"
parametros := parametros + "color : blue;"
parametros := parametros + "selection-color :#c7c8e1;"
parametros := parametros + "selection-background-color:blue"
endcase

return (parametros)

/*----------------------------------------------------------------------*/
FUNCTION X(xPos)

/* aunque como dije en alguna ocacion anterior me decidi por usar los
auto posicionamientos de los contenedores tipo Widget, en general, para
algunas cosas muy especificas, quiero tener el control de la posicion
y ancho del objeto, y como estoy mas acostumbrado a pensar en
terminos de caracter mas que de pixel, hice esta pequena rutina que me da
una relacion de 80x25 aproximadamente en una pantalla de 1024x728 o
mas geeral de (XMax,YMax), tambien use el modelo XBase de posicionar
objetos tipo (Y,X) en contraposciion al modelo (X,Y) de Qt.
XPos, se da en caracteres, no en pixels.
*/


return round(((XMAXIMA_ * xPos)/XBASE_)+0.5,0)

/*----------------------------------------------------------------------*/
FUNCTION Y(yPos)

/* Igual que X(xPos)

return round(((YMAXIMA_ * yPos)/YBASE_)+0.5,0)

/*----------------------------------------------------------------------*/
FUNCTION Tr(textTmp)

/*
Aqui va ir el traductor Qt muli-lenguaje
aun lo tengo pendiente
*/

LOCAL textSos

textSos := TextTmp

return (textSos)

/*----------------------------------------------------------------------*/
FUNCTION ImagenK( ksosObj, imagenPath , yPos, xPos, AltoTmp, AnchoTmp)

/*
Permite colocar unaq imagen como fondo de cualquier laberl, tambien lo
uso para colocar el fiondo de la ventana principal
ksosIbj, es un objeto que hereda las propiedades del objeto que lo
llama, por ejemplo QMainWindow

*/

LOCAL iLabel

iLabel := QLabel() :new(ksosObj)
iLabel : setScaledContents(.T.)
iPixMap:= QPixmap():new(imagenPath)
iLabel : setPixMap(iPixMap)
if (xPos <> NIL .and. yPos <> NIL)
iLabel:move(xPos, yPos)
endif
if (anchoTmp <> NIL .and. altoTmp <> NIL)
iLabel:resize( anchoTmp, altoTmp )
else
iLabel : adjustSize()
endif

iLabel : show()

return iLabel

/*----------------------------------------------------------------------*/
FUNCTION StatusK( ksosObj,textTmp,Duracion )

LOCAL oSBar

oSBar := QStatusBar():new( ksosObj )
osBar : setStyleSheet(cssK(1))
oSBar : showMessage(textTmp,Duracion)
ksosObj: setStatusBar( oSBar )

return oSBar

/*----------------------------------------------------------------------*/
FUNCTION SayK( ksosObj, yPos, xPos, textTmp, altoTmp , anchoTmp )

LOCAL sLabel

sLabel:=QLabel():new( ksosObj )
sLabel: setTextFormat( 1 ) // 0 text plain 1 RichText 2 Auto
sLabel: setText( textTmp )
slabel: setStyleSheet(cssK(1))
slabel: setFrameShape(0x0002)
slabel: setFrameShadow(0x0020)

slabel: setLineWidth(3)

if (xPos <> NIL .and. yPos <> NIL)
sLabel:move(xPos , yPos)
endif
if (altoTmp <> NIL .and. anchoTmp <> NIL)
sLabel:reSize( anchoTmp, altoTmp )
endif

sLabel:Show()

return sLabel

/*----------------------------------------------------------------------*/
FUNCTION GetK( ksosObj, yPos, xPos, textTmp, altoTmp , anchoTmp, ;
lenTmp , mask )

#define QT_EVE_RETURNPRESSED "returnPressed()"

LOCAL gEdit

LOCAL LEFT := 1
LOCAL RIGHT := 2
LOCAL CENTER := 4
LOCAL ALL := 8

textTmp:= trim(textTmp)

gEdit:= QLineEdit():new( ksosObj )
gEdit: setStyleSheet(cssK(2))
gEdit: setMaxLength(lenTmp )
gEdit: setText(textTmp)
gedit: cursorPosition(len(textTmp))
gEdit: setAlignment( LEFT )
if len(trim(mask)) <> 0
gEdit:setInputMask(Mask)
endif
if (xPos <> NIL .and. yPos <> NIL)
gEdit:move( xPos, yPos )
endif
if (anchoTmp <> NIL .and. altoTmp <> NIL)
gEdit:resize( anchoTmp, altoTmp )
endif

Qt_Connect_Signal( gEdit,QT_EVE_RETURNPRESSED, {|| lexit:= .T. })

gedit:show()

return gEdit
/*----------------------------------------------------------------------*/
FUNCTION PasswdK( ksosObj, yPos, xPos, textTmp, altoTmp , anchoTmp, lenTmp )

#define QT_EVE_RETURNPRESSED "returnPressed()"

LOCAL pEdit

LOCAL LEFT := 1
LOCAL RIGHT := 2
LOCAL CENTER := 4
LOCAL ALL := 8
LOCAL PASSWORD := 2

pEdit := QLineEdit():new( ksosObj )
pEdit : setStyleSheet(cssK(2))
pEdit : setMaxLength(lenTmp )
pEdit : setText( textTmp )
pEdit : setAlignment( LEFT )
pEdit : cursorPosition(0)
pEdit : setEchoMode( PASSWORD )
if (xPos <> NIL .and. yPos <> NIL)
pEdit:move( xPos, yPos )
endif
if (altoTmp <> NIL .and. anchoTmp <> NIL)
pEdit:resize( anchoTmp, altoTmp )
endif

Qt_Connect_Signal( pEdit,QT_EVE_RETURNPRESSED, {|| lexit:= .T. } )

pEdit:show()

return pEdit
/*----------------------------------------------------------------------*/
FUNCTION ReadK( ksosObj, yPos, xPos, altoTmp, anchoTmp )

/*
Funciona de forma similar a el Read del XBase, cuando se invocand
los gets, estos pueden modificados y actualizados hasta tanto no
se le de aceptar a el REad, que muestrra un mensaje de aceptar o
cancelar , permite una forma de operacion similar a Dialog, pero
sin auto posicionamiento, ya que los Say y los Get pueden ser
colocados a voluntad lo mismo quel el read
*/

#define QT_EVE_CLICKED_I "ButtonClicked(int)"
#define QT_EVE_CLICKED "clicked()"

LOCAL oBtn, aBtn, cBtn, layB, oEventLoop, elegido
LOCAL aExit := .F.
LOCAL cExit := .F.

oBtn := QGroupBox():new(ksosObj)
oBtn : setStyleSheet(cssK(1))

aBtn := QPushButton():new()
aBtn : setStyleSheet(cssK(2))
aBtn : setText( "&" + Tr("Aceptar") )
aBtn : setIcon( pathI + "Aceptar.jpeg" )

cBtn := QPushButton():new()
cBtn : setStyleSheet(cssK(2))
cBtn : setText( "&" + Tr("Cancelar") )
cBtn : setIcon( pathI + "Cancelar.jpeg" )

layB := QHBoxLayout():new()
layB : addWidGet(aBtn)
layB : addWidGet(cBtn)

oBtn : setLayout(layB)
oBtn : setFlat(layB)

if (xPos <> NIL .and. yPos <> NIL)
oBtn:move( xPos,yPos )
endif
if (altoTmp <> NIL .and. anchoTmp <> NIL)
oBtn:resize( anchoTmp, altoTmp )
endif

Qt_Connect_Signal( aBtn, QT_EVE_CLICKED , {|| aExit := .T. } )
Qt_Connect_Signal( cBtn, QT_EVE_CLICKED , {|| cExit := .T. } )

oBtn:show()

oEventLoop := QEventLoop():new( Ownd )

do while .t.
oEventLoop:processEvents()
if (aExit .or. Cexit)
do case
case aExit
elegido = "Aceptar"
case cExit
elegido = "Cancelar"
endcase
exit
endif
enddo

oEventLoop:exit( 0 )
oEventLoop := 0

HB_GCALL( .T.)

RETURN {oBtn, elegido}

/*----------------------------------------------------------------------*/
FUNCTION MsgInfo( cMsg , tipoDeMensaje )

LOCAL oMB

oMB:=QMessageBox():new()
oMB: setStyleSheet(cssK(2))
oMB: setInformativeText( cMsg )
oMB: setWindowTitle(Tr("Kontable"))
oMB: seticon(tipoDeMensaje)
oMB: exec()

oMB := NIL

HB_GCALL( .T.)

RETURN nil

/*---------------------------------------------------------------------*/
FUNCTION SiNoK( cMsg,defaultTmp )

/*
Define el boton de seleccino Si / No mas un texto de forma especifica
la funcion debuelve un Si,No ante el evento elegido
*/

LOCAL oMB,SI,NO,SiNo

oMB:=QMessageBox():new()
oMB: setStyleSheet(cssK(2))
oMB: setWindowTitle( Tr("Kontable") )
oMB: setIcon(MSG_PREGUNTA)
oMB: setInformativeText( cMsg )

SI=oMB:addButton_1("&" + Tr("Si"),0)
NO=oMB:addButton_1("&" + Tr("No"),1)

if defaultTmp = 0
oMB:setDefaultButton(NO)
else
oMB:setDefaultButton(SI)
endif

oMB:setEscapeButton(NO)
oMB:exec()

do case
case oMB:clickedButton() = SI
SiNo:= "Si"
case oMB:clickedButton() = NO
SiNo:= "No"
endcase

HB_GCALL( .T.)

RETURN SiNo

/*----------------------------------------------------------------------*/
FUNCTION ComboBoxK( ksosObj, yPos, xPos, arrTmp, altoTmp , anchoTmp )

/*
inserte las opciones del comobo en una matrix, el combo, permite
colocar iconos en cada eleccion , la matriz es 2 posiciones
en la primera va el ico, en la segunda el text0.
sino no desea colocar icono deje esta posicioin en blanco
*/

#define QT_EVE_ACTIVATED "activated(int)"

LOCAL comboK , long_ , elegido
LOCAL lExit := .F.

comboK := QComboBox():new( ksosObj )
comboK : setStyleSheet(cssK(2))
comboK : resize(anchoTmp,altoTmp )
if (xPos <> NIL .and. yPos <> NIL)
comboK:move( xPos, YPos )
endif
if (anchoTmp <> NIL .and. altoTmp <> NIL)
comboK:resize(anchoTmp,altoTmp )
endif

i := 1
long_:= len(arrTmp)
Do while i <= long_ if arrTmp[i,2] = NIL arrTmp[i,2] := "" endif comboK:addItem_1(arrTmp[i,2],arrTmp[i,1] ) //arg1=icono arg2=texto i++ enddo Qt_Connect_Signal(comboK,QT_EVE_ACTIVATED, {|| lexit:= .T. }) comboK :show() oEventLoop := QEventLoop():new( comboK ) do while .t. oEventLoop:processEvents() if (lExit) i := comboK:currentIndex elegido:= comboK:itemText( i ) exit endif enddo oEventLoop:exit( 0 ) oEventLoop := 0 HB_GCALL( .T.) return { combok, elegido } /*----------------------------------------------------------------------*/ FUNCTION SpinK( ksosObj, yPos, xPos, valorTmp, altoTmp , anchoTmp, ; minTmp,maxTmp,incTmp) /* ESta funcion permite seleccionar un numero de un rango dado por minTmp hasta maxTmp en pasos de incTmp funcionada de forma similiar al combo pero solo se pasan el valor minimo y maximo del rango que se quiera. */ LOCAL spinBox,lexit #define QT_EVE_VALUECHANGED "value1Changed(int)" spinBox := QSpinBox():new( ksosObj ) spinBox : setStyleSheet(cssK(2)) spinBox : setRange(minTmp,maxTmp) spinBox : setSingleStep(incTmp) spinBox : setWrapping(.T.) spinBox : setValue(valorTmp) if (xPos <> NIL .and. yPos <> NIL)
spinBox:move( xPos, yPos )
endif
if (altoTmp <> NIL .and. anchoTmp <> NIL)
spinBox:reSize( anchoTmp, altoTmp )
endif

Qt_Connect_Signal(spinBox,QT_EVE_VALUECHANGED, {|| lexit:= .T. })

spinBox:Show()

return (spinBox)

/*----------------------------------------------------------------------*/
FUNCTION ProgressBarK(ksosObj, yPos, xPos, valorTmp, altoTmp , anchoTmp, ;
minTmp,maxTmp)

LOCAL oProgressBar

oProgressBar := QProgressBar():new( ksosObj )
oProgressBar : setStyleSheet(cssK(2))
oProgressBar : setRange( minTmp, maxTmp )
oProgressBar : setvalue( valorTmp )
if (xPos <> NIL .and. yPos <> NIL)
oProgressBar:move( xPos, yPos )
endif
if (altoTmp <> NIL .and. anchoTmp <> NIL)
oProgressBar:reSize( anchoTmp, altoTmp )
endif

oProgressBar :show()

RETURN oProgressBar

/*----------------------------------------------------------------------*/

Comentarios

Entradas populares