Jump to content

log in [ajuda/conselhos]


Iron_Cobra
 Share

Recommended Posts

Boa noite pessoal,

tenho uma tela de login com 4 imagens que sao estrelas (*) com visibilidade escondida:

* * * *

o que pretendo é

quando carrego numa tecla qualquer, a 1ª Estrela ficar visivel e assim sucessivamente até á quarta estrela.

que tipo de codigo é que posso implementar?

ja andei com eventos do genero keypressed e keyevent, mas só consigo apresentar cada imagem associando uma tecla especifica tipo:

carregando na tecla (N) a 1ª * aparece.

obrigado pela vossa atençao.  👍

Link to comment
Share on other sites

Guardas a password numa variável e imprimes os asteriscos do tamanho da password por exemplo:

  - string pass="password";

  - imprimir "********";

  - Se for premida uma tecla imprime outra vez os asteriscos mas agora substitui um asterisco pela letra da string;

      - Tecla X foi premida então imprimir "*a******";

      - etc;

  - Depois basta fazer isso para as outras;

Isto é uma solução simples.

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

1º ... não sei porque queres fazer um login desta forma ... parece o jogo da corda mas isso é opção tua

2º - podes muito bem aplicar o que o pikax te disse com um bocado de imaginação:

- tens um array de 0 do tamanho da tua palavra passe

- tens um segundo array/string com a palavra passe

- quando o utilizador carregar numa tecla verificas para cada elemento do segundo array/string se o caracter é igual ao selecionado

-  se sim, alterar o valor do primeiro array para 1

- para todos os elementos do primeiro array,

-  se for 0 não apresenta nada

-  se for 1 apresenta o asterisco

esta solução é válida para os dois sistemas de apresentação das imagens

- com limpeza de conteúdos em todos os frames (como nas aplicações gráficas tipo jogos)

- com actualização da informação apresentada após ateração dos dados devido a eventos (como nos ambientes de janelas)

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

vivas,

obrigado pelos vossos conselhos,

entretanto ontem ja consegui fazer aparecer cada asterisco e limpar todos de uma vez so atraves dest codigo:

void login::keyPressEvent(QKeyEvent* p)
{

    if (p->key() == Qt::Key_1 || p->key() == Qt::Key_2 || p->key() == Qt::Key_3 || p->key() == Qt::Key_4 || p->key() == Qt::Key_5 ||
        p->key() == Qt::Key_6 || p->key() == Qt::Key_7 || p->key() == Qt::Key_8 || p->key() == Qt::Key_9 || p->key() == Qt::Key_0)
    {

        switch(c){

          case 0:
          ui->primeiro_digito->setVisible(true);
          c++;
         
          break;

            case 1:
            ui->segundo_digito->setVisible(true);
            c++;
            break;

                case 2:
                ui->terceiro_digito->setVisible(true);
                c++;
                break;

                    case 3:
                    ui->quarto_digito->setVisible(true);
                    c++;
                    break;
                }
        }


    if(p->key() == Qt::Key_Backspace)
    {
        ui->primeiro_digito->setVisible(false);
        ui->segundo_digito->setVisible(false);
        ui->terceiro_digito->setVisible(false);
        ui->quarto_digito->setVisible(false);
        c=0;
    }

    if(p->key() == Qt::Key_E)
    {

        m_MainWindow->show();
    }

}

agora estou a tentar capturar o valor das teclas que sao premidas e guardar o valor numa variavel para depois compar com a variavel password.

essa dos dois arrays é uma boa ideia mas nao tou a ver pra ja como vou capturar as teclas e guardar o valor no 1º array. vou fazer umas tentativas 🙂

mais uma vez obrigado pela vossa ajuda  😉

Link to comment
Share on other sites

Estou desactualizado no C++ mas acho que poderias fazer isto :

void login::keyPressEvent(QKeyEvent* p)
{
    // Aproveito o facto de Key_0..Key_9 ser uma sequência de inteiros contigua
    if (p->key() >= Qt::Key_0 && p->key() <= Qt::Key_9)
    {
      logtext += p->text();

      ui->primeiro_digito->setVisible(logtext.size() >= 1);
      ui->segundo_digito->setVisible(logtext.size() >= 2);
      ui->terceiro_digito->setVisible(logtext.size() >= 3);
      ui->quarto_digito->setVisible(logtext.size() == 4);
    } else if(p->key() == Qt::Key_Backspace)
    {
      ui->primeiro_digito->setVisible(false);
      ui->segundo_digito->setVisible(false);
      ui->terceiro_digito->setVisible(false);
      ui->quarto_digito->setVisible(false);
      logtext.clear();
    } else if(p->key() == Qt::Key_E)
    {
      m_MainWindow->show();
    }
}

Tens de incluir na classe 'login' a variável 'QString logtext;'. Assim quando sair do método KeyPressEvent terás nessa variável as teclas carregadas até agora, em Unicode.

Link to comment
Share on other sites

Boas a todos,

no dia em que respondi pela ultima vez consegui resolver o problema e fiquei de postar o meu código.

hoje vi a resposta do user bsccara e é mais ou menos igual ao que tenho mas ainda mais simples 😛

mas obrigado pelos vossos conselhos  ?

void login::keyPressEvent(QKeyEvent* p){

if(p->key() == Qt::Key_0)
    {
     log[pos_vect_digitos]=0;
     pos_vect_digitos++;
     switch(contador_digitos){

       case 0:
        ui->primeiro_digito->setVisible(true);
        ui->lcdpin_lbl->setVisible(false);
        contador_digitos++;
        break;

       case 1:
        ui->segundo_digito->setVisible(true);
        ui->lcdpin_lbl->setVisible(false);
        contador_digitos++;
        break;

       case 2:
        ui->terceiro_digito->setVisible(true);
        ui->lcdpin_lbl->setVisible(false);
        contador_digitos++;
        break;

       case 3:
        ui->quarto_digito->setVisible(true);
        ui->lcdpin_lbl->setVisible(false);
        contador_digitos++;
        break;
      }
    }
else

if(p->key() == Qt::Key_1)
{
log[pos_vect_digitos]=1;
pos_vect_digitos++;
switch(contador_digitos){

  case 0:
   ui->primeiro_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;

  case 1:
   ui->segundo_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;

  case 2:
   ui->terceiro_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;

  case 3:
   ui->quarto_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;
}
}
else

if(p->key() == Qt::Key_2)
{
log[pos_vect_digitos]=2;
pos_vect_digitos++;
switch(contador_digitos){

  case 0:
   ui->primeiro_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;

  case 1:
   ui->segundo_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;

  case 2:
   ui->terceiro_digito->setVisible(true);
   ui->lcdpin_lbl->setVisible(false);
   contador_digitos++;
   break;

case 3:
  ui->quarto_digito->setVisible(true);
  ui->lcdpin_lbl->setVisible(false);
  contador_digitos++;
  break;
}
}
else

if(p->key() == Qt::Key_3)
{
  log[pos_vect_digitos]=3;
  pos_vect_digitos++;
  switch(contador_digitos){
   case 0:
    ui->primeiro_digito->setVisible(true);
    ui->lcdpin_lbl->setVisible(false);
    contador_digitos++;
    break;

   case 1:
    ui->segundo_digito->setVisible(true);
    ui->lcdpin_lbl->setVisible(false);
    contador_digitos++;
    break;

   case 2:
    ui->terceiro_digito->setVisible(true);
    ui->lcdpin_lbl->setVisible(false);
    contador_digitos++;
    break;

   case 3:
    ui->quarto_digito->setVisible(true);
    ui->lcdpin_lbl->setVisible(false);
    contador_digitos++;
    break;
  }
}
else

if(p->key() == Qt::Key_4)
  {
   log[pos_vect_digitos]=4;
   pos_vect_digitos++;
   switch(contador_digitos){

    case 0:
     ui->primeiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 1:
     ui->segundo_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 2:
     ui->terceiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 3:
     ui->quarto_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;
  }
}
else

if(p->key() == Qt::Key_5)
  {
   log[pos_vect_digitos]=5;
   pos_vect_digitos++;
   switch(contador_digitos){

    case 0:
     ui->primeiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 1:
     ui->segundo_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 2:
     ui->terceiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 3:
     ui->quarto_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;
  }
}
else

if(p->key() == Qt::Key_6)
  {
   log[pos_vect_digitos]=6;
   pos_vect_digitos++;
   switch(contador_digitos){

    case 0:
     ui->primeiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 1:
     ui->segundo_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 2:
     ui->terceiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 3:
     ui->quarto_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;
   }
}
else

if(p->key() == Qt::Key_7)
  {
   log[pos_vect_digitos]=7;
   pos_vect_digitos++;
   switch(contador_digitos){

    case 0:
     ui->primeiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 1:
     ui->segundo_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 2:
     ui->terceiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 3:
     ui->quarto_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;
   }
}
else

if(p->key() == Qt::Key_8)
  {
   log[pos_vect_digitos]=8;
   pos_vect_digitos++;
   switch(contador_digitos){

    case 0:
     ui->primeiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 1:
     ui->segundo_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 2:
     ui->terceiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 3:
     ui->quarto_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;
   }
}
else

if(p->key() == Qt::Key_9)
  {
   log[pos_vect_digitos]=9;
   pos_vect_digitos++;
   switch(contador_digitos){

    case 0:
     ui->primeiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 1:
     ui->segundo_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 2:
     ui->terceiro_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;

    case 3:
     ui->quarto_digito->setVisible(true);
     ui->lcdpin_lbl->setVisible(false);
     contador_digitos++;
     break;
   }
}
else

if(p->key() == Qt::Key_Backspace)
  {
   ui->primeiro_digito->setVisible(false);
   ui->segundo_digito->setVisible(false);
   ui->terceiro_digito->setVisible(false);
   ui->quarto_digito->setVisible(false);
   ui->autenticado_lbl->setVisible(false);
   ui->lcdpin_lbl->setVisible(true);
   contador_digitos = 0;
   log[pos_vect_digitos]=0;
   PIN=0;
}

if(p->key() == Qt::Key_Space)
  {
   PIN = (log[3]*1)+(log[2]*10)+(log[1]*100)+(log[0]*1000);

   if(PIN == password)
     {
      ui->autenticado_lbl->setVisible(true);
      ui->autenticado_lbl->setText("Autenticado");
      this->close();
      m_menu = new menu;
      m_menu->setGeometry(300,200,800,480);
      m_menu->setStyleSheet("menu { background-color: rgb(255, 255, 255); }");
      m_menu->show();
      delete ui;
     }
else
if(PIN != password)
   {
       contador_digitos = 0;
       log[pos_vect_digitos]=0;
       PIN=0;
       this->close();
       m_inicio = new inicio;
       m_inicio->setGeometry(300,200,800,480);
       m_inicio->setStyleSheet("inicio { background-color: rgb(255, 255, 255); }");
       m_inicio->show();
       delete ui;
   }
}
}

Problema resolvido, mais uma vez obrigado por tudo.  🙂

Link to comment
Share on other sites

Clica em "Topic Solved" no lado inferior do ultimo post

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

posso perguntar para que serve algo tão estranho como o teu código ?

agora que falas nisso, tive a ler o código dele, e poderia estar muito melhor para se ler, tantos if-else e mal identado.

era mais facil e mais bonito fazer algo assim

void login::keyPressEvent(QKeyEvent* p)
{
  switch(p->key())
  {
    case Qt::Key_0:
    case Qt::Key_1:
  //case etc....
    case Qt::Key_9:
               switch(contador_digitos)
               {
                 //switch que tens lá em cima
               }
               break;
    case Qt::Key_Space:
          //etc....
  }
}

acho que ficava melhor e mais organizado

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.