Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. QTextEdit funziona con .append e non con .settext
Qt 6.11 is out! See what's new in the release blog

QTextEdit funziona con .append e non con .settext

Scheduled Pinned Locked Moved Solved Italian
8 Posts 4 Posters 3.4k 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.
  • B Offline
    B Offline
    bvox123
    wrote on last edited by
    #1

    Buonasera.
    Ho una classe con un campotext = new QTextEdit ed una funzione per inserire dati nel campo.
    Mi succede una cosa strana: se nella funzione per l'aggiornamento scrivo campotext->append("QQQ\n") mi accoda QQQ al campo sul video, mentre se provo a sostituirlo completamente con campotext->settext("AAA\n") mi va in errore in esecuzione col seguente messaggio: QObject: Cannot create children for a parent that is in a different thread.
    Cosa dovrei fare per evitare l'errore ? Grazie.

    1 Reply Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by VRonin
      #2

      Puoi postare un po' piu' del tuo codice? in particolare, stai usando qualche multithread (QThread, Qt::Concurrent, QRunnable, std::thread, std::async), etc?

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      0
      • yuvaramY Offline
        yuvaramY Offline
        yuvaram
        wrote on last edited by VRonin
        #3

        Hi @bvox123

        Share a sample code,
        This code may help you.

        #include "widget.h"
        
        Widget::Widget(QWidget *parent)
            : QWidget(parent)
        {
            m_VBlyt = new QVBoxLayout(this);
            m_PB1    = new QPushButton("ClicK");
            m_TE1    = new QTextEdit();
            m_TE1->setText("ASDFQWERTY");
            m_TE1->append("ppppppppppp");
            m_VBlyt->addWidget(m_TE1);
            m_VBlyt->addWidget(m_PB1);
            connect(m_PB1,SIGNAL(clicked(bool)),this,SLOT(SLT_AddNewData()));
        }
        
        Widget::~Widget()
        {
        
        }
        
        void Widget::SLT_AddNewData()
        {
            m_TE1->clear();
            m_TE1->setText("poiuytrlkjh");
        }
        

        Yuvaram Aligeti
        Embedded Qt Developer
        : )

        1 Reply Last reply
        1
        • B Offline
          B Offline
          bvox123
          wrote on last edited by
          #4

          Scusate il ritardo.
          Sì VRonin, sto usando (o meglio tentando di usare) QThread. Mi sono riferito in particolare all'esempio che si può generare col Qt Creator, ovvero queuedcustomtype. La mia esigenza era la seguente. Voglio avere un thread che si avvia all'inizio del programma e prosegue sempre in un loop infinito finché non si chiude il programma. All'inizio di questo thread c'è il controllo di uno switch per verificare se deve o meno aggiornare il form a video. Bene, quando porto lo switch in on e quindi il modulo che visualizza una matrice dovrebbe esporre nuovi dati, ho le seguenti istruzioni:

          la dichiarazione è questa:    QTextEdit *qt5TabellaEsposizioni [18];
          
              stringstream arco1;
              switch (combinazione) {
              case 0:
          //        cout << "Questo è progrestratto: " << HRvbl::progrestratto << endl;
                  arco1 << HRvbl::progrestratto << "\n";
          //        cout << "Questo è arco1: " << arco1.str() << " " << endl;
                  arco1 << arco1.str() << qt5TabellaEsposizioni[combinazione]->toPlainText().toStdString();
                  break;
          .....
              arco1 << arco1.str() << qt5TabellaEsposizioni[combinazione]->toPlainText().toStdString();
              QString arco2 = QString::fromStdString(arco1.str());
          //    qt5TabellaEsposizioni[combinazione]->setText(arco2);
              qt5TabellaEsposizioni[combinazione]->setText("QQQ\n");
          //    qt5TabellaEsposizioni[combinazione]->append("QQQ\n");
          

          Ho verificato che se inverto la disattivazione delle ultime due istruzioni mi va in errore. Ho verificato che funziona anche con insertPlainText(arco2) e forse potrebbe andare bene, ma non riesco a capire perché in arco2 ci va a finire "1\n1\n1n\1\n", ma questo è un altro problema che devo cercare di capire.

          1 Reply Last reply
          0
          • P Offline
            P Offline
            patrik08
            wrote on last edited by
            #5

            @bvox123 said in QTextEdit funziona con .append e non con .settext:

            qt5TabellaEsposizioni

            Scusa non capisco bene cosa sia "qt5TabellaEsposizioni" una sorta di QSettings dove ti salvi i valori?
            con il cursore di QTextEdit puoi scrivere ovuque senza complicarti la vita con il QTextCursor

            qtexteditXX->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
            

            http://doc.qt.io/qt-4.8/qtextcursor.html#insertHtml

            1 Reply Last reply
            0
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #6

              Alcuni sistemi operativi (Widows in testa) non supportano la modifica della GUI da thread "secondari". In Qt questo si traduce in una restrizione che dice che solo il thread in cui vive QApplication puo' modificare la GUI

              Per fare cio' che stai tentando devi emettere un segnale dal secondo thread con i dati necessari e il thread principale poi lo intercetta e aggiorna la GUI

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              0
              • B Offline
                B Offline
                bvox123
                wrote on last edited by
                #7

                Grazie. Era tutto piuttosto ingarbugliato, ho risolto (credo) sostituendo i QTextEdit con dei semplici QLabel.

                1 Reply Last reply
                0
                • VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by
                  #8

                  Purtroppo non e' ok comunque. Hai una race condition che prima o poi ti torna a mordere il posteriore

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  1 Reply Last reply
                  0

                  • Login

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