Continuando,
Programar com a Qt não fica bom se não for orientado a objetos.
Sempre que uso a Qt, eu utilizo o recurso de
herança, para criar os meus objetos. Eu tive que vasculhar muito como os caras lá do harbour fizeram essa gambi com a Qt, mas o resultado é muito bom.
Vou dar um exemplo bem rápido de como eu crio uma Janela principal com um grid dentro:
CREATE CLASS TMainWindow FROM HB_QMainWindow // Crio uma classe que herda tudo da QMainWindow()
DATA meuGrid //meu grid passa a ser um obj que nada mais é do que uma propriedde da minha janela
METHOD create()
METHOD buildGrid()
ENDCLASS
/* create ***************************/
METHOD TMainWindow:create( )
::setWindowTitle(_APP_NAME)
::setWindowIcon( QIcon(_MEU_ICO) )
::setMouseTracking(.t.)
::setMinimumSize( 500, 530 )
::setMaximumSize( 500, 530 )
::resize( 500, 530 )
::buildGrid() // aqui cria o grid
RETURN SELF
/* buildGrid ***************************/
METHOD TMainWindow:buildGrid()
LOCAL x, y, gridItem
::grid := QTableWidget( 9, 9, SELF )
::grid:move( 25, 50 )
::grid:setEditTriggers(0)
::grid:setFont( ::fontUser )
::grid:verticalHeader:setDefaultSectionSize(50)
::grid:verticalHeader:setMinimumSectionSize(50)
::grid:horizontalHeader:setDefaultSectionSize(50)
::grid:horizontalHeader:setMinimumSectionSize(50)
::grid:setHorizontalScrollBarPolicy(1)
::grid:setVerticalScrollBarPolicy(1)
::grid:verticalHeader:hide()
::grid:horizontalHeader:hide()
::grid:setMinimumSize(454,454)
::grid:setMaximumSize(454,454)
::grid:setFrameStyle(QFrame_NoFrame)
::grid:setStyleSheet("border: 2px solid #000; gridline-color:#000; color:#4040C0; background-color:white; selection-background-color:#69c; selection-color:#fff")
::grid:setSelectionMode(1)
::grid:setContextMenuPolicy(3)
::grid:setMouseTracking(.t.)
::grid:setIconSize(qsize(44,44))
RETURN NIL
Bom, qual a vantagem de trabalhar assim com a herança?
É o seguinte, além de eu ter todos os métodos normais que a janela principal tem por padrão, eu posso adicionar novos métodos, então digamos que estou numa tela de PDV.
Eu posso fazer:
JanelaPDV:setMinimumSize( 500, 530 ) // um metodo padrao da qt
JanelaPDV:adicionarItemNoCupom(params) // eu que inventei este metodo
JanelaPDV:exibirMsg(params) // eu que inventei este metodo
Entendeu?