Retorno de chamada para o botão no QT Designer?
-
24-09-2019 - |
Pergunta
Comecei a usar o Qtcreator hoje à noite, e parece que ele coloca todo o material da interface dentro do arquivo da interface do usuário. Segui um tutorial para criar um recurso para meus ícones e adicionei -os a uma barra de menus na parte superior.
Eu preciso fazer uma conexão quando um deles é clicado e não consigo descobrir como fazer um retorno de chamada para isso.
Vou ter que criá -los completamente através do código ou existe alguma maneira de adicionar um retorno de chamada para eles (em vez de apenas fazê -los interagir com outros objetos).
Solução
Os itens da barra de menu são objetos de ação. Para fazer algo quando eles são clicados, você precisa pegar o triggered()
sinal da ação. Leia mais sobre sinais e slots aqui.
Para fazer isso, você precisa declarar um novo slot Na sua aula de Maiorwindow. O QT também suporta fazer isso automaticamente, sem a necessidade de conectar nada, mas eu prefiro fazer isso sozinho. Se você não estiver interessado, apenas pule esta parte.
Primeiro, declaramos um novo slot em sua aula de janela:
private slots:
void clickMenuButton();
Então, no seu construtor, você precisa conectar o sinal acionado ao seu novo slot:
connect(ui.actionObject, SIGNAL(triggered()), this, SLOT(clickMenuButton()));
O primeiro argumento é o objeto que mantém o sinal que vamos ouvir (o botão do seu menu). O segundo é o nome do sinal. O terceiro é o objeto que mantém o slot de recebimento (neste caso, nossa janela). O quarto é o slot.
E assim, clickMenuButton()
será chamado sempre que a ação for clicada.
Como eu disse antes, o qt também pode conectar automaticamente sinais a slots. A desvantagem aqui parece ser que você não pode alterar o nome do slot, mas também não precisa conectá -lo.
O QT Creator suporta a criação de slots para widgets: no caso da ação do seu menu, você deve ir ao designer do formulário e verá uma lista de ações em seu formulário (se não o fizer, encontre o Editor de ação). Clique com o botão direito do mouse na ação que deseja e empurre Vá para o slot .... Lá, clique duas vezes triggered()
.
O QT Creator abrirá o novo slot no seu editor de código e você poderá fazer o que quiser aqui!
Outras dicas
Para fazer isso, você precisará adicionar um QAction
, adicione -o ao menu, associe um ícone a ele e, em seguida, crie um retorno de chamada para ele. Estou usando a integração do VS para não sei os detalhes de como fazê -lo no Criador, mas deve ser possível sem criar coisas no código.
Deve haver algum lugar um editor de ações. A partir daí, você adiciona uma ação, clique com o botão direito do mouse ou algo assim para adicionar um ícone, arrastá-lo e, em seguida, clique duas vezes para criar um slot para ele. É assim que funciona no vs integração pelo menos.