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.
  • A Offline
    A Offline
    anselmolsm
    wrote on 28 Jun 2011, 13:10 last edited by
    #6

    "Respondido":http://developer.qt.nokia.com/forums/viewthread/7240/

    (/me pensando se não seria o caso de unir os 2 tópicos...)

    EDIT: link acima apontava para o tópico que foi unido a este.

    Anselmo L. S. Melo (anselmolsm)

    1 Reply Last reply
    0
    • 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

                          15/17

                          28 Jun 2011, 18:00

                          • Login

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