【问题标题】:QPlainTextEdit() ->setPlainText() keeps crashingQPlainTextEdit() ->setPlainText() 不断崩溃
【发布时间】:2017-11-29 23:40:40
【问题描述】:

我正在尝试通过单击按钮、线程等来更新 QPlainTextEdit()。在 MainThread 之外的某个地方,在 Qt 文档中它说它必须使用信号,但我不知道如何。如果我尝试执行 CreateThread() 或使用 std::thread 更新

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");  
}

如您所见,我想要一种从主线程外部更新此 QPlainTextEdit 而不会崩溃的方法。我怎样才能做到这一点?谢谢。

【问题讨论】:

  • 如果您希望我们帮助您,您必须提供minimal reproducible example
  • 这有什么无法验证的?
  • 可验证。
  • verifiable 意味着我可以复制您的代码并重现您的相同错误,但您的代码不能。

标签: c++ qt


【解决方案1】:

你不能做 UI 操作,比如从主线程外部更新 QTextEdit 的文本。解决方案是从非主线程发出一个信号,并将其连接到主线程中的一个槽,该槽负责 UI 工作。

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 2015-08-08
    • 2018-05-24
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多