Teste de desenvolvimento para vaga C++/Qt na empresa Qmob, por Raphael Sauer. Ambas atividades foram desenvolvidas utilizando Ubuntu 20.04, e compiladas utilizando o CMake > 3.6.
Foi desenvolvido um método que constroi um formulário para editar um objeto do tipo Q_GADGET
, desde que tal objeto esteja resgistrado no sistema de meta objetos fornecidos pelo Qt. A entrada para o código consiste em um ponteiro e o nome da classe do Q_GAGDET
. O ponteiro é utilizado para que os valores descritos no formulário possam ser armazenados depois que o formulário é fechado. O nome da classe é utilizado para que se possa acessar as informações do objeto a partir do sistema meta objetos.
O formulário é construído pela iteração nas propriedades do meta objeto. Para cada propriedade, são adicionadas uma QLabel
com o nome e um editor de valores conforme definidos no .pdf:
enum
são definidos por umQComboBox
que contém os nomes definidos noenum
float
são definidos por umaQDoubleSpinBox
quint16
equint8
são definidos por umaQSpinBox
bool
são definidos por umaQCheckBox
struct
são definidos por umQFrame
que contém os tipos dastruct
para serem editados. Só é possível se astruct
também estiver registrada no sistema de meta objetos.- Ponteiros são editados reproduzindo seu conteúdo n vezes, de forma similar à
struct
O resultado final pode ser visto na imagem a seguir:
As alterações feitas no objeto são armazenadas no ponteiro enviado. Não consegui, porém, armazenar alterações que ocorrem em algum Q_GAGDET
interno ao Q_GADGET
principal. Fiz pesquisas intensivas mas ainda não encontrei uma forma de acessar o ponteiro para um Q_GADGET
mais interno, para que seja possível gravar os valores e alocar memória para seus parâmetros.
Foi desenvolvida um método que adiciona objetos do tipo Player
a uma tabela feita em QML. O script recebe uma QVariantList
, onde elementos do tipo Player
estão armazenados. Quando o componente está sendo carregado, essa lista é iterada de forma a adicionar as propriedades dos Players
na tabela. O script adiciona primeiro uma ScrollView
, para que a tabela seja rolável. Dentro dessa ScrollView
foi adicionada uma TableView
. Na TableView
, aTableModel
foi definida com TableModelColumn
correspondentes as propriedades do Player
.
O resultado final pode ser visto na imagem a seguir:
Meu objetivo era fazer as propriedades de forma dinâmica, porém não encotrei como acessar as informações das propriedades de um QVariant
dentro do QML. Caso tivesse acesso a essas propriedades, poderia montar a tabela com o cabeçalho customizado.
Agradeço a Qmob pela entrevista e pela oportunidade de concorrer a vaga. Também agradeço ao Sandro, que tirou algumas dúvidas que eu tinha a respeito da atividade.