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:02 last edited by
    #5

    Para travar o sistema inteiro deve ser algo mais sério e como você disse que com QMenu padrão o problema não acontece, pode ser algum passo da sua reimplementação.

    Qual SO você usa? Aqui (Linux) eu tentaria achar o problema utilizando ferramentas como valgrind, gdb.

    Para tentar reproduzir o erro aqui, você usou ModQMenu junto com o código que postou "nessa thread":http://developer.qt.nokia.com/forums/viewthread/7150/?

    Anselmo L. S. Melo (anselmolsm)

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

                            14/17

                            28 Jun 2011, 15:31

                            • Login

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