从c++中GUI中创建的对象修改GUI

Modify GUI from object created inside the gui in c++

本文关键字:GUI 对象 修改 创建 c++      更新时间:2023-10-16

我想问一下如何在屏幕上添加一些文本。我有一个按钮,当我点击它时,我创建了一个新对象。它有一个功能,为我提供一些数据。我如何从gui访问这些数据?我不能有getter,因为它在一段时间后(在连接到服务器之后)给我数据。是否有可能把文本texttedit内的gui类中创建的对象?

感谢

我添加了代码,解释了一点,很抱歉让人困惑,谢谢你的帮助:

我在gui类中创建了EchoClient对象:

void Comunication::startListening(){
    if (this->client == NULL)
       {
           this->client = new EchoClient(QUrl(QStringLiteral("ws://localhost:1234")), 0);
           QObject::connect(client, &EchoClient::closed, this,  &QApplication::quit);
    }
       else
           qWarning() << "Carefull, the client is already running";
   }

然后在我的EchoClient我有功能

  void EchoClient::onTextMessageReceived(QString message)
{
    if (!m_debug)
        qDebug() << "Message received:" << message;

这里我想改变ui的东西

}

是的,有可能。但你的问题目前似乎太宽泛或不清楚(至少)对我来说。我假设您正在使用Qt Creator及其设计器。因此您应该能够访问ui对象(在您的MainWindow类中)。有了这个对象,你可以随时随地修改UI。

因此,首先为该文本框(即QLineEdit)分配一个id(例如myLineEdit)。现在,ui->myLineEdit给你一个QLineEdit *,它实际上是对那个文本框的引用。无论你想在哪更新UI,你都应该有那个引用。例如,如果你正在使用TCP套接字编程来联系远程服务,在QTcpSocketonReadyRead信号中,你可以用你刚刚收到的数据更新文本框:

QLineEdit *textbox = ui->myLineEdit;
textbox->setText("updated data");

我用getter, setter和另一个按钮解决了这个问题

第一个按钮:开始收听…创建EchoClient对象,打开websocket,连接到websocket服务器。如果消息已经从服务器到达,它会从EchoClient类调用ontextmessagerreceived的方法,在那里它将属性消息设置为传入消息的值。

void EchoClient::onTextMessageReceived(QString message)
{
    if (!m_debug)
        qDebug() << "Message received:" << message;
    setData(message); //setting atribute message
}

第二个按钮: get data…这将从EchoClient类调用get方法。通信是我的gui类。

void Comunication::on_getData_clicked()
{
    ui->textEdit_2->setText(this->client->getData());
}

但是这个解决方案还不够好,你能告诉我如何使我的textEdit一有新消息就自动更新吗?我应该在另一个线程中做吗?我没有多少经验。

谢谢。