Partage
  • Partager sur Facebook
  • Partager sur Twitter

line edit sur plusieurs ligne

c++ qt

Sujet résolu
    13 janvier 2021 à 20:12:21

    bonjour 

    ma question peut paraitre co... bête mais comment avoir un line edit sur plusieurs ligne:

     j'ais déjà vue des logicielle (whatsap destop, microsoft teams ...) qui permette en faisant maj+entrer de  faire un retour a la ligne dans le ligne edit comment fond ces logicielle?

    mette t'il d'autre widgets plus appropriée?

    merci d'avance

    -
    Edité par unel 14 janvier 2021 à 11:19:04

    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2021 à 20:45:45

      QLineEdit : édition d'une ligne

      QTextEdit : édition de texte

      (en résumé)

      -
      Edité par Martin BDF 13 janvier 2021 à 20:46:02

      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2021 à 9:09:37

        Question très spécifique. Je n'ai jamais vu ça ni dans Qt ni dans une application. as tu un exemple d'application qui fait ça ? Honnêtement je pense que partir directement sur un QTextEdit est la meilleure chose plutôt que s'embêter à faire du code compliqué.
        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          14 janvier 2021 à 11:19:13

          whatsap destop, microsoft teams...
          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2021 à 12:44:52

            Si ce que tu veux est utiliser une zone de texte qui va réagir d'une certaine manière (envoyer un signal par exemple) en appuyant sur entrée lorsque sélectionnée et faire un saut de ligne en faisant maj+entrée, il te suffit de te créer une classe héritant de QTextEdit et en bricolant avec la surcharge des fonctions types keyPressEvent.

            Je te renvoie à la documentation de QTextEdit pour plus d'infos

            • Partager sur Facebook
            • Partager sur Twitter
              14 janvier 2021 à 18:17:49

              bonjour je voudrais fair comme sur la capture :

              • Partager sur Facebook
              • Partager sur Twitter
                14 janvier 2021 à 18:48:07

                oui mais on ne peut pas faire un retour a la ligne dans un line edit ?

                -
                Edité par unel 14 janvier 2021 à 20:06:02

                • Partager sur Facebook
                • Partager sur Twitter
                  14 janvier 2021 à 20:47:14

                  Et bien tu prends un contrôle multi-lignes (de la taille d'une ligne et tu fais en sorte qu'il change sa taille quand une nouvelle ligne est crée !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 janvier 2021 à 7:43:09

                    J'ai fait ça avec un texte édit mais il ne se réduit pas assez 

                    Avez vous un exemple de code

                    bonjour j'ai trouver comment faire : un texte édit avec un minimum size a 1!

                    mais un truc gênant comment enlever les flèche pour la sélection de ligne

                    -
                    Edité par unel 15 janvier 2021 à 11:33:20

                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 janvier 2021 à 15:31:29

                      Je n'ai pas la solution sur QT, car je n'utilise pas (j'y ai juste vu par curiosité). Je pourrai te le faire sur .Net mais on n'est pas sur le bon forum. Aussi en API Windows, mais c'est pas très bien vu sur le forum C++ et ça fait des débats sans fin. Mais ils te conseilleront QT, soit patient, ils vont surement t'apporter une réponse dès qu'ils viendront !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 janvier 2021 à 16:02:09

                        ok apres je ne sait pas si c'est posible mais ca ne pause pas un très grand problème

                        il vaut mieux quoi pour des apli .net ou qt?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 janvier 2021 à 21:20:36

                          Dans tous les cas, si tu attends un code tout fait, c'est pas ici que tu l'auras. On t'a donné des pistes, il suffit juste de coder ce que tu veux (ce qui ne me semble pas complexe a priori)

                          rouloude a écrit:

                          Aussi en API Windows, mais c'est pas très bien vu sur le forum C++ et ça fait des débats sans fin.

                          Just do it.

                          On va te la déconseiller, parce qu'on estime que c'est une mauvaise solution. Mais tu es libre de faire ce que tu veux. On te regarde.

                          -
                          Edité par gbdivers 23 janvier 2021 à 21:21:10

                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 janvier 2021 à 11:12:32

                            gbdivers a écrit:

                            On te regarde.

                            Il faut pas croire que c'est si compliqué que cela :

                            Voici un code basique qui le fait trés bien, bon c'est vite fait sans graphisme sophistiqué, désolé c'est en C :

                            #include <windows.h>
                            
                            #define IDM_QUIT 1
                            
                            LRESULT APIENTRY EditProc(HWND, UINT, WPARAM, LPARAM);
                            
                            HINSTANCE hinst;
                            WNDPROC wpOrigEditProc;
                            int height;
                            int iheight;
                            int posEdit;
                            
                            LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
                            
                            int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                                            LPSTR lpCmdLine, int nCmdShow)
                            {
                                HWND hwnd_m;
                                MSG msg;
                                WNDCLASS wc;
                                HMENU hMenu, hSousMenu;
                            
                                hinst = hinstance;
                            
                                wc.style = 0 ;
                                wc.lpfnWndProc = MainWndProc;
                                wc.cbClsExtra = 0;
                                wc.cbWndExtra = 0;
                                wc.hInstance = hinstance;
                                wc.hIcon = NULL;
                                wc.hCursor = LoadCursor(NULL, IDC_ARROW);
                                wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
                                wc.lpszMenuName =  NULL;
                                wc.lpszClassName = "MaWinClass";
                            
                                RegisterClass(&wc);
                            
                                hSousMenu = CreateMenu();
                                AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter");
                                hMenu  = CreateMenu();
                                AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Fichier");
                            
                                hwnd_m = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW,
                                                               CW_USEDEFAULT, CW_USEDEFAULT, 400, 800,
                                                                              NULL, hMenu, hinstance, NULL);
                            
                                ShowWindow(hwnd_m, nCmdShow);
                            
                                while (GetMessage(&msg, NULL, 0, 0))
                                {
                                    TranslateMessage(&msg);
                                    DispatchMessage(&msg);
                                }
                                return msg.wParam;
                            }
                            /******************************************************************************/
                            
                            LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                            {
                                static HWND hEdit;
                                switch (uMsg)
                                {
                                    case WM_CREATE:
                                        {
                                         hEdit = CreateWindow("edit", "Texte",
                                           WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN ,
                                                                       0, 0, 0, 0, hwnd, NULL, hinst, NULL);
                                         TEXTMETRIC tm;
                                         GetTextMetrics(GetDC(hEdit), &tm);
                                         iheight = tm.tmHeight;
                                         height = tm.tmHeight+3;
                                         wpOrigEditProc = (WNDPROC)SetWindowLong(hEdit,
                                                                               GWL_WNDPROC, (LONG)EditProc);
                                         return 0;
                                        }
                            
                                    case WM_CLOSE :
                                        DestroyWindow(hwnd);
                                        return 0;
                            
                                    case WM_COMMAND :
                                        if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
                                        return 0;
                            
                                    case WM_SIZE :
                                        posEdit = HIWORD(lParam);
                                        MoveWindow(hEdit, 50, posEdit-height-50, 300, height, TRUE);
                            
                                        return 0;
                            
                                    case WM_DESTROY :
                                        PostQuitMessage(0);
                                        return 0;
                            
                                    default :
                                        return DefWindowProc(hwnd, uMsg, wParam, lParam);
                                }
                            }
                            
                            LRESULT APIENTRY EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                            {
                               if (uMsg == WM_CHAR && wParam==VK_RETURN)
                               {
                                    height += iheight;
                                    MoveWindow(hwnd, 50, posEdit-height-50, 300, height, TRUE);
                               }
                               return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam);
                            }


                            Et sur QT, ça donnerait quoi ?

                            -
                            Edité par rouloude 24 janvier 2021 à 12:05:07

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 janvier 2021 à 19:35:27

                              Ne sois pas désolé. Si cela convient au PO, ça me va aussi :D
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 janvier 2021 à 21:52:26

                                Histoire de clore le sujet pour Qt, voici quelques pistes un peu plus précises :

                                - Trouver un moyen de redimensionner le textEdit à un certain nombre de lignes. (Littéralement 2min chrono, temps de recherche google et copié-collé de stackoverflow compris) (à noter que cette solution comporte des problèmes sous certaines formes)

                                - Créer une classe custom héritant de QTextEdit

                                - surcharge des fonction protégées  et  pour savoir quand le textEdit est focus ou non et le redimensionner à la bonne taille en fonction.

                                - surcharge de la fonction keyPressEvent pour faire en sorte que lorsque la touche Entrée est appuyé, un signal soit envoyé sans aucune autre action et que lorsque Ctrl+Enter est appuyé, QTextEdit::keyPressEvent soit appelée comme si une simple touche Entrée avait était pressée.

                                - Utiliser ce nouveau widget tout neuf.

                                On peut avoir un résultat satisfaisant en quelques minutes.

                                Ceci dit ce n'est probablement pas parfait, si vous avez des remarques, n'hésitez pas.

                                -
                                Edité par Cypher__ 24 janvier 2021 à 21:52:54

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 janvier 2021 à 21:57:50

                                  Ou QFontMetric::height pour connaître la taille théorique du texte + connect sur le signal textChanged pour changer la taille du widget en fonction du contenu.

                                  Mais ta solution est valide aussi.

                                  -
                                  Edité par gbdivers 24 janvier 2021 à 21:58:13

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 janvier 2021 à 11:32:32

                                    d'acors je vais voir tout ca merci pour vos réponse
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 janvier 2021 à 12:15:26

                                      petit problème comment fair pour que quand on fasse entré ca clique sur un bouton au lieux de faire un retour a la ligne
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        27 janvier 2021 à 4:04:15

                                        EneeDiIorio1 a écrit:

                                        petit problème comment fair pour que quand on fasse entré ca clique sur un bouton au lieux de faire un retour a la ligne


                                        Création d'un signal personnalisé dans ta nouvelle classe.

                                        Tu connectes ce signal à un slot que tu as créé qui va performer une action de ce style.

                                        Pour en savoir plus sur les signaux/slots

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          31 janvier 2021 à 18:50:26

                                          problème de pc je vais essayer ca quand il sera réparée
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            1 février 2021 à 8:52:14

                                            Il y a un super exemple dans la doc de qt poir qtextedit qui sert a ce que vous voulez. Voici l url. 

                                            https://doc.qt.io/qt-5/qtwidgets-layouts-basiclayouts-example.html

                                            Creer simplement un qtextedit a lanplace de votre lineedit

                                            utiliser les qactions pour les actionS. Etant debutant je sait pas aider ++

                                            -
                                            Edité par MichasMoi 1 février 2021 à 8:56:19

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            for ( size_t nbMembre  :  membreForum )   { std::cout << "Bonjour ! \n"; }

                                              18 février 2021 à 10:21:57

                                              merci a tous tous fonctionne nickel

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              line edit sur plusieurs ligne

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown