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).

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top