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
Moderador: Moderadores
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
hbqt - contextmenu
Olá Dr.Marcelo,
Como está a briga com esse hbqt ? ta valendo a pena ?
Como está a briga com esse hbqt ? ta valendo a pena ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
hbqt - contextmenu
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.
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!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
hbqt - contextmenu
E no mais, o que você está achando da QT ?achou alguma limitação ? alguma dificuldade ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
hbqt - contextmenu
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
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
Água mole em pedra dura tanto bate que até espirra!
-
chrissoares
- Usuário Nível 1

- Mensagens: 45
- Registrado em: 23 Dez 2009 14:35
- Localização: Belo Horizonte/MG
- Contato:
hbqt - contextmenu
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!
Exemplo de QT do Stanis Luksys
Abraços e sucesso com a QT!
Christiano R. Soares
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24