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 Tuesday, May 27th 2025

Definindo ToolTip para menus e itens de menus

Scheduled Pinned Locked Moved Portuguese
17 Posts 2 Posters 7.5k Views 1 Watching
  • 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:00 last edited by
    #4

    Pois é anselmo, só que infelizmente estou tendo problemas com ela, quando usa essa solução para criar os menus, a aplicação trava e junto com ela todo o sistema operacional, só retornando com reset na máquina. Acabei de abrir um tópico sobre esse problema.

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

                              13/17

                              28 Jun 2011, 13:41

                              • Login

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