Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. Definindo ToolTip para menus e itens de menus
Forum Update on Monday, May 27th 2025

Definindo ToolTip para menus e itens de menus

Scheduled Pinned Locked Moved Portuguese
17 Posts 2 Posters 7.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    Exotic_Devel
    wrote on 28 Jun 2011, 13:19 last edited by
    #7

    Tb uso linux aqui, opensuse

    Não! Estou usando em um código com mais menus, Estou usando o ModQMenu para todos os menus.

    @#ifndef WINDOWMAIN_H
    #define WINDOWMAIN_H

    #include <QMainWindow>
    #include <QMdiArea>
    #include <QList>
    #include "ModQMenu.h"

    class WindowMain : public QMainWindow
    {
    Q_OBJECT

    public:
        WindowMain(QWidget *parent = 0);
    
        ~WindowMain();
    
    private:
    
        QList <QAction *> listarquivos, listredunt, listconfig, listfiscal, listajuda, listrelatori,
                listrelgerenci, listmoviment, listferrament;
    
        // Area MDI
        QMdiArea *mdiarea;
    
        // Menus
        ModQMenu *arquivos;
        ModQMenu *relatorios;
        ModQMenu *ferramentas;
        ModQMenu *fiscal;
        ModQMenu *moviment;
        ModQMenu *configura;
        ModQMenu *ajuda;
        ModQMenu *redundantes;
        ModQMenu *relgerencias;
    
        // QActions de menus
        QAction *clientes;
        QAction *produtos;
        QAction *forneced;
        QAction *represen;
        QAction *usuarios;
        QAction *medicos;
        QAction *sair;
        QAction *enderecos;
        QAction *marclente;
        QAction *matelente;
        QAction *tipopgto;
        QAction *tipolente;
        QAction *tratament;
        QAction *restricoes;
        QAction *autobackup;
        QAction *bdconexao;
        QAction *impressdoc;
        QAction *leiturax;
        QAction *reducaoz;
        QAction *configicms;
        QAction *manual;
        QAction *queisso;
        QAction *sobre;
        QAction *relvenda;
        QAction *relcaixa;
        QAction *relespelhos;
        QAction *relos;
        QAction *partmedica;
        QAction *partfuncio;
        QAction *fatumensal;
        QAction *fatudiario;
        QAction *ranklentes;
        QAction *rankfornec;
        QAction *orcamentos;
        QAction *devolucoes;
        QAction *movicaixa;
        QAction *ordemservic;
        QAction *vendas;
        QAction *contapagar;
        QAction *contarecebe;
        QAction *calcula;
        QAction *callenbord;
        QAction *compatarmlen;
        QAction *backup;
    
        void creatQMenus();
        void creatQActions();
    

    private slots:
    void evoqueSubWind();

    };

    #endif // WINDOWMAIN_H
    @

    1 Reply Last reply
    0
    • E Offline
      E Offline
      Exotic_Devel
      wrote on 28 Jun 2011, 13:25 last edited by
      #8

      Estou postando o código da aplicação, ainda está crua mesmo

      @#include <QApplication>
      #include <QTextCodec>
      #include <QDesktopWidget>
      #include <QRect>
      #include <QMenuBar>
      #include <QToolBar>
      #include <QStatusBar>

      #include "WindowMain.h"

      WindowMain::WindowMain(QWidget *parent):QMainWindow(parent)
      {
      creatQActions();
      creatQMenus();
      }

      void WindowMain::creatQActions()
      {
      clientes = new QAction(QIcon(":/icoclientes"), "Clientes", this);
      connect(clientes, SIGNAL(triggered()), this, SLOT(evoqueSubWind()));
      listarquivos << clientes;

      produtos = new QAction(QIcon(":/icoprodutos"), "Produtos", this);
      listarquivos << produtos;
      
      forneced = new QAction("Fornecedores", this);
      listarquivos << forneced;
      
      represen = new QAction("Representantes", this);
      listarquivos << represen;
      
      usuarios = new QAction("Usuários", this);
      listarquivos << usuarios;
      
      medicos = new QAction("Médicos", this);
      listarquivos << medicos;
      
      sair = new QAction(QIcon(":/icosair"), "Sair", this);
      sair->setShortcut(tr("CTRL+S"));
      connect(sair,SIGNAL(triggered()), qApp, SLOT(quit()));
      
      enderecos = new QAction("Endereços", this);
      listredunt << enderecos;
      
      marclente = new QAction("Marcas de Lente", this);
      listredunt << marclente;
      
      matelente = new QAction("Metariais de Lente", this);
      listredunt << matelente;
      
      tipopgto = new QAction("Tipos de Pagamento",this);
      listredunt << tipopgto;
      
      tipolente = new QAction("Tipos de Lente", this);
      listredunt << tipolente;
      
      tratament = new QAction("Tratamentos", this);
      listredunt << tratament;
      
      restricoes = new QAction(QIcon(":/icorestricoes"), "Restrinções", this);
      restricoes->setToolTip("Configura o acesso dos usuários ao sistema");
      listconfig << restricoes;
      
      autobackup = new QAction(QIcon(":/icoautoback"), "Backup Automático", this);
      autobackup->setToolTip("Configura o backup automático do sistema");
      listconfig << autobackup;
      
      bdconexao = new QAction(QIcon(":/icoconecbd"), "Conexão com o BD", this);
      bdconexao->setToolTip("Configura a conexão com o banco de dados");
      listconfig << bdconexao;
      
      impressdoc = new QAction("Impressão de Documentos", this);
      impressdoc->setToolTip("Define quais documentos terão impressão automática");
      listconfig << impressdoc;
      
      leiturax = new QAction("Leitura &X", this);
      listfiscal << leiturax;
      
      reducaoz = new QAction("Redução &Z", this);
      listfiscal << reducaoz;
      
      configicms = new QAction("Configurar &ICMS", this);
      listfiscal << configicms;
      
      manual = new QAction(QIcon(":/icomanual"),"Manual", this);
      listajuda << manual;
      
      queisso = new QAction("O que é isso?", this);
      listajuda << queisso;
      
      sobre = new QAction("Sobre o QtOpitca", this);
      listajuda << sobre;
      
      relvenda = new QAction("Relatório de Vendas", this);
      listrelatori << relvenda;
      
      relcaixa = new QAction("Relatório de Caixa", this);
      listrelatori << relcaixa;
      
      relespelhos = new QAction("Relatórios de Espelhos", this);
      listrelatori << relespelhos;
      
      relos = new QAction("Relatório de OS's", this);
      listrelatori << relos;
      
      ranklentes = new QAction("Ranking de Lentes", this);
      listrelatori << ranklentes;
      
      rankfornec = new QAction("Ranking de Fornecedores", this);
      listrelatori << rankfornec;
      
      fatumensal = new QAction("Faturameto Mensal", this);
      listrelgerenci << fatumensal;
      
      fatudiario = new QAction("Faturamento Diário", this);
      listrelgerenci << fatudiario;
      
      partmedica = new QAction("Participação Médica", this);
      listrelgerenci << partmedica;
      
      partfuncio = new QAction("Participação de Funcionários", this);
      listrelgerenci << partfuncio;
      
      orcamentos = new QAction(QIcon(":/icoorcament"), "Orçamentos", this);
      listmoviment << orcamentos;
      
      devolucoes = new QAction(QIcon(":/icodevoluc"), "Devoluções", this);
      listmoviment << devolucoes;
      
      ordemservic = new QAction(QIcon(":/icoos"), "Ordens de Serviço", this);
      listmoviment << ordemservic;
      
      vendas = new QAction(QIcon(":/icovendas"), "Vendas", this);
      listmoviment << vendas;
      
      movicaixa = new QAction("Movimento do Caixa", this);
      listmoviment << movicaixa;
      
      contapagar = new QAction(QIcon(":/icocontaspg"), "Contas a Pagar", this);
      listmoviment << contapagar;
      
      contarecebe = new QAction(QIcon(":/icocontasrc"), "Contas a Receber", this);
      listmoviment << contarecebe;
      
      calcula = new QAction(QIcon(":/icocalculator"), "Calculadora", this);
      listferrament << calcula;
      
      backup = new QAction(QIcon(":/icobackup"), "Backup", this);
      listferrament << backup;
      
      callenbord = new QAction("Calcular borda de lentes", this);
      listferrament << callenbord;
      
      compatarmlen = new QAction("Compatibilidade LENTE x ARMAÇÂO", this);
      listferrament << compatarmlen;
      

      }@

      1 Reply Last reply
      0
      • E Offline
        E Offline
        Exotic_Devel
        wrote on 28 Jun 2011, 13:26 last edited by
        #9

        Cont......

        @void WindowMain::creatQMenus()
        {

        redundantes = new ModQMenu("Redundantes", this);
        redundantes->addActions(listredunt);
        
        arquivos = new ModQMenu("&Arquivos", this);
        menuBar()->addMenu(arquivos);
        arquivos->addActions(listarquivos);
        arquivos->addSeparator();
        arquivos->addMenu(redundantes);
        arquivos->addSeparator();
        arquivos->addAction(sair);
        
        moviment = new ModQMenu("&Movimentação", this);
        menuBar()->addMenu(moviment);
        moviment->addActions(listmoviment);
        
        ferramentas = new ModQMenu("&Ferramentas", this);
        menuBar()->addMenu(ferramentas);
        ferramentas->addActions(listferrament);
        
        fiscal = new ModQMenu("Fisca&l", this);
        menuBar()->addMenu(fiscal);
        fiscal->addActions(listfiscal);
        
        relgerencias = new ModQMenu("Relatórios Gerenciais", this);
        relgerencias->addActions(listrelgerenci);
        
        relatorios = new ModQMenu("&Relatórios", this);
        menuBar()->addMenu(relatorios);
        relatorios->addActions(listrelatori);
        relatorios->addSeparator();
        relatorios->addMenu(relgerencias);
        
        configura = new ModQMenu("&Configurações", this);
        configura->addActions(listconfig);
        menuBar()->addMenu(configura);
        
        ajuda = new ModQMenu("A&juda", this);
        menuBar()->addMenu(ajuda);
        ajuda->addActions(listajuda);
        

        }

        void WindowMain::evoqueSubWind()
        {
        }

        WindowMain::~WindowMain()
        {
        delete mdiarea;
        }
        @

        1 Reply Last reply
        0
        • E Offline
          E Offline
          Exotic_Devel
          wrote on 28 Jun 2011, 13:29 last edited by
          #10

          hehe pode ser, se tiver como vc fazer pode unir

          1 Reply Last reply
          0
          • A Offline
            A Offline
            anselmolsm
            wrote on 28 Jun 2011, 13:32 last edited by
            #11

            [quote author="matheusssilva_BR" date="1309267199"]
            Não! Estou usando em um código com mais menus, Estou usando o ModQMenu para todos os menus.
            [/quote]

            Para você não precisar por o código inteiro da sua aplicação aqui, talvez seja mais fácil fazer o seguinte: criar um exemplo menor, usando suas classes de menu e que consiga reprodizir o problema.

            Anselmo L. S. Melo (anselmolsm)

            1 Reply Last reply
            0
            • E Offline
              E Offline
              Exotic_Devel
              wrote on 28 Jun 2011, 13:36 last edited by
              #12

              Resolvi tb postar o código inteiro pois acredito que fazendo um teste com apenas 1 ou 2 menus o problema não aparece, pois logo começo eu testei com apenas 3 menus e funcionou perfeitamente, depois que eu passei a usar em todos os menus da app, foi que começou a apresentar esse problema.

              Talvez eu teria que criar a mesma quantidade de menus para o problema poder aparecer.

              1 Reply Last reply
              0
              • E Offline
                E Offline
                Exotic_Devel
                wrote on 28 Jun 2011, 13:41 last edited by
                #13

                Acabei de testar apenas no menu 'configura', normal, normal. Mas se eu usar em todos os menus ai dá pau. Isso ta cheirando a sobrecarga de memória, será que não ?

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  anselmolsm
                  wrote on 28 Jun 2011, 15:31 last edited by
                  #14

                  OK, aqui dá segmentation fault.

                  Uma forma de reproduzir o problema: Abra um menu ("Arquivo", por exemplo), deixe-o aberto e mova o mouse para fora dele. Deixe o mouse imóvel por alguns instantes, ou seja, gere um evento de tooltip e.... crash.

                  Esse dá pra reproduzir com apenas 1 menu. O que acontece quando você tem mais menus é que fica mais fácil reproduzir, embora não saiba exatamente como.

                  Se você rodar num debugger, verá logo de cara que ao fazer o que descrevi acima você terá o ponteiro act nulo, o que quebra seu

                  @
                  if(act->toolTip() != act->text()))
                  @

                  Mudar para

                  @
                  if(act&&(act->toolTip() != act->text()))
                  @

                  resolve esse problema. Ainda não consegui reproduzir outros casos em que seu código dá crash, quem sabe mais tarde.

                  Anselmo L. S. Melo (anselmolsm)

                  1 Reply Last reply
                  0
                  • E Offline
                    E Offline
                    Exotic_Devel
                    wrote on 28 Jun 2011, 18:00 last edited by
                    #15

                    ummm analisando agora fica óbvio helpevt->pos() retorna a posição do mouse se actionAt() receber uma posição que não tenha nenhum QAction nela ele vai retornar Null. Eu tentei usar o debugger do Qt Creator, mas fica impossivel analisar pq aqui o sistema todo para, tendo que dar reset na máquina para voltar.

                    Vc disse que além desse caso ainda tem outros que gera null pointer ?

                    p.s Saudades do Java nessa hora em... Em java ele dispararia uma exceção null pointer exception e me indicaria a linha que estava gerando. :-) , mas.... é c++ então vamos nessa...

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      anselmolsm
                      wrote on 28 Jun 2011, 18:28 last edited by
                      #16

                      [quote author="matheusssilva_BR" date="1309284041"]
                      Mas o que está retornando nulo é act->toolTip() ou act->text() ?
                      [/quote]

                      act chega nulo nesse if. O passo anterior está retornando nulo nesse cenário identificado.
                      O segmentation fault acontece quando da tentativa de chamar os métodos text() e toolTip() de um objeto que não está lá.

                      [quote author="matheusssilva_BR" date="1309284041"]
                      O que if(act) testa?
                      Testa se o ponteiro é nulo?
                      [/quote]

                      Sim. Equivale a fazer if (act != 0).

                      [quote author="matheusssilva_BR" date="1309284041"]ummm, eu tentei usar o debugger do Qt Creator, mas fica impossivel analisar pq aqui o sistema todo para, tendo que dar reset na máquina para voltar.
                      [/quote]

                      Bom, pode ser pouca RAM... foi exatamente o que eu fiz aqui (e olha que os 2GB de RAM que tenho aqui já não é tanta coisa hj em dia) :-P

                      [quote author="matheusssilva_BR" date="1309284041"]
                      Vc disse que além desse caso ainda tem outros que gera null pointer ?
                      [/quote]

                      Disse que consegui identificar como reproduzir 1 dos casos, se tem mais precisa procurar ;)

                      Anselmo L. S. Melo (anselmolsm)

                      1 Reply Last reply
                      0
                      • E Offline
                        E Offline
                        Exotic_Devel
                        wrote on 28 Jun 2011, 18:40 last edited by
                        #17

                        Desculpe por remover as perguntas mas é que estudando o código consegui as respostas.

                        Bem pouca RAM não é, tenho 4 giga DDR3, não sei pq então.

                        Bem eu só tinha identificado esse erro até o momento.

                        Meu debugger tb não ta legal quando rodo em debugger gera um warning na saída

                        warning: GDB: Failed to Set terminal de controle: Argumento inv \ 303 \ 241lido \ n

                        1 Reply Last reply
                        0

                        16/17

                        28 Jun 2011, 18:28

                        • Login

                        • Login or register to search.
                        16 out of 17
                        • First post
                          16/17
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved