por MARCELOG » 12 Mai 2011 10:20
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.
Água mole em pedra dura tanto bate que até espirra!