2017-11-29 6 views
-4

QPlainTextEdit()をボタンのクリック、スレッドなどから更新しようとしています。MainThreadの外側とQtのドキュメントのどこかから、方法を理解することはできません。私はのCreateThreadを(行う)、またはあなたが見ることができるようにQPlainTextEdit() - > setPlainText()がクラッシュを続ける

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
    ... 

    private slots: 
     handleButtonClick(); 
     Thread(); 
    ... 
    private: 

    QPlainTextEdit *TextView; 
} 



MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),    ui(new Ui::MainWindow) 
{ 
    ... 
    TextView = new QPlainTextEdit(); 
    TextView->setReadOnly(true); 
    TextView->setCursorWidth(0); 

    QPUshButton *UpdateButton = new QPushButton(); 


      connect(UpdateButton, SIGNAL(released()), this, SLOT(handleButtonClick())); 

    .... 
} 


MainWindow::handleButtonClick() 
{ 
    // eventually this will cause a crash, usually not imemdiately 
    TextView->insertPlainText("test"); 
} 

MainWindow::Thread() 
{ 
    TextView->insertPlainText("test"); 
} 

を更新するためのstd ::スレッドを使用しようとすると、私はクラッシュすることなく、メインスレッド外からこのQPlainTextEditを更新するための方法をしたいです。これどうやってするの?ありがとう。

+1

私たちがあなたを助けてくれるようにするには、[mcve] – eyllanesc

+0

を提供する必要があります。 –

+0

それは検証可能です。 –

答えて

1

QTextEditのテキストをメインスレッド外から更新するなど、UIの操作は許可されていません。これに対する解決策は、非メインスレッドから信号を発信し、UI作業を行うメインスレッドのスロットに接続させることです。

関連する問題