Página 1 de 1

hbqt - contextmenu

Enviado: 05 Mai 2011 15:21
por MARCELOG
Olá pessoal,
estou começando com a hbqt (e gostando).
Alguém tem exemplo de como criar um menu de contexto e associá-lo a um controle?
Obrigado.

MarceloG

hbqt - contextmenu

Enviado: 09 Mai 2011 22:03
por sygecom
Olá Dr.Marcelo,
Como está a briga com esse hbqt ? ta valendo a pena ?

hbqt - contextmenu

Enviado: 12 Mai 2011 10:20
por MARCELOG
Com alguns exemplos da internet e a velha técnica da tentativa e erro.
Consegui...
Se alguém precisar...

MarceloG

#INCLUDE 'hbqtgui.ch'

#DEFINE W(n) INT(n/800*QApplication():DESKTOP():WIDTH)
#DEFINE H(n) INT(n/600*QApplication():DESKTOP():HEIGHT)


//****************************************************************************

INIT PROCEDURE INICIAR()

QAPPLICATION()

RETURN

//****************************************************************************

EXIT PROCEDURE FINALIZAR()

QAPPLICATION():QUIT()

RETURN

//****************************************************************************

PROCEDURE MAIN()

LOCAL oMain, oPag1, oPag2, oTabX, oLbl1, oCmb1,oLbl2, oCmb2,oLbl3, oCmb3

oMain:=QMAINWINDOW()
oMain:SETWINDOWTITLE('DiviMoney(r)')

oMain:RESIZE(W(400),H(300))

oPag1:=QWIDGET()
oPag2:=QWIDGET()

oTabX:=QTABWIDGET(oMain)
oTabX:RESIZE(W(400),H(400))
oTabX:MOVE(W(5),H(5))
oTabX:ADDTAB(oPag1,'Controle Financeiro')
oTabX:ADDTAB(oPag2,'Controle de Bens')

oLbl1:= QLABEL(oPag1)
oLbl1:MOVE(W(5),H(5))
oLbl1:RESIZE(W(200),H(20))
oLbl1:SETSTYLESHEET('color:white;background-color:blue;')
oLbl1:SETTEXT(' Conta')

oCmb1 := QCOMBOBOX(oPag1)
oCmb1:MOVE(W(5),H(25))
oCmb1:RESIZE(W(200),H(20))
oCmb1:CONNECT('customContextMenuRequested(QPoint)',{|p|oCmb1Context(p)})
oCmb1:SETCONTEXTMENUPOLICY(Qt_CustomContextMenu)

oCmb1:SETEDITABLE(.T.)
oCmb1:SETINSERTPOLICY(0)

oCmb1:ADDITEM('Brasil1')
oCmb1:ADDITEM('Crasil2')
oCmb1:ADDITEM('Drasil3')
oCmb1:ADDITEM('Erasil4')
oCmb1:ADDITEM('Frasil5')
oCmb1:ADDITEM('Grasil6')
oCmb1:ADDITEM('Hrasil7')

oLbl2:= QLABEL(oPag1)
oLbl2:MOVE(W(5),H(55))
oLbl2:RESIZE(W(200),H(20))
oLbl2:SETSTYLESHEET('color:white;background-color:blue;')
oLbl2:SETTEXT('Receita/Despesa')

oCmb2 := QCOMBOBOX(oPag1)
oCmb2:MOVE(W(5),H(75))
oCmb2:RESIZE(W(200),H(20))

oLbl3:= QLABEL(oPag1)
oLbl3:MOVE(W(5),H(105))
oLbl3:RESIZE(W(200),H(20))
oLbl3:SETSTYLESHEET('color:white;background-color:blue;')
oLbl3:SETTEXT('Entidade')

oCmb3 := QCOMBOBOX(oPag1)
oCmb3:MOVE(W(5),H(125))
oCmb3:RESIZE(W(200),H(20))

oMain:SHOWMAXIMIZED()

oMain:SHOW()

QAPPLICATION():EXEC()

return

//****************************************************************************

FUNCTION oCmb1Context(p)

LOCAL oMenu

oMenu:=QMENU()

oMenu:ADDACTION('iTem1')
oMenu:ADDACTION('iTem2')
oMenu:ADDACTION('iTem3')

SWITCH oMenu:EXEC(QCURSOR():POS()):TEXT()

CASE 'iTem1' ; MESSAGE('A') ; EXIT

CASE 'iTem2' ; MESSAGE('B') ; EXIT

CASE 'iTem3' ; MESSAGE('C') ; EXIT

ENDSWITCH

RETURN p

//****************************************************************************

PROCEDURE MESSAGE(c)

LOCAL oBox

oBox := QMESSAGEBOX()

oBox:SETINFORMATIVETEXT(c)
oBox:SETWINDOWTITLE('TESTE')
oBox:EXEC()

RETURN

Ps: Retirei o code para realçar os detalhes.
O "p" enviado para função do menu de contexto é um QPOINT da QT, e ele serve como referência para o objeto chamador (QWIDGET).
Eu não estou usando o mesmo, já que a exibição do menu está ocorrendo na posição do mouse com QCURSOR():POS().
Desculpe se está muito enxuto, é que não gosto de escrever muitas linhas de código.

hbqt - contextmenu

Enviado: 12 Mai 2011 12:59
por sygecom
E no mais, o que você está achando da QT ?achou alguma limitação ? alguma dificuldade ?

hbqt - contextmenu

Enviado: 12 Mai 2011 13:48
por MARCELOG
Olá Leonardo,
a promessa QT é a portabilidade gráfica.
Nesse contexto, acho válido o esforço de aprendizagem.
Os princípios são quase os mesmos da hwgui ou minigui, cuja versão 4.0 já utiliza a QT.
Não consegui utilizar (ainda) arquivo resource.
Todavia, como o controle é quase absoluto sobre os objetos criados, vou dispensar algum tempo para aprender e ver a perfomance.

MarceloG

hbqt - contextmenu

Enviado: 20 Jun 2011 14:44
por chrissoares
Eu estou voltando a estudar a QT e me lembro que no exemplo do Stanis Luksys, ele faz o uso de resource (Qresource), da uma olhada que você deve conseguir descobrir algo.
Exemplo de QT do Stanis Luksys

Abraços e sucesso com a QT!