QTextEdit funziona con .append e non con .settext
-
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. -
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"); }
-
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.
-
@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 QTextCursorqtexteditXX->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
-
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