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

时间:2016-09-19 08:22:44

标签: java c++ qt oop user-interface

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

感谢

我添加了代码,解释了一点,sry混淆,thx试图帮助:

我在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;

在这里我想改变你的东西。

}

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。但是你现在的问题对我来说似乎过于宽泛或不明确。我假设你正在使用Qt Creator和它的设计师。因此,您应该能够访问ui对象(在MainWindow类中)。拥有此对象,您可以随时随地更改UI。

因此,首先为该文本框(即QLineEdit)分配一个id(例如myLineEdit)。现在,ui->myLineEdit为您提供了QLineEdit *,它实际上是对该文本框的引用。因此,无论您何时想要更新UI,都应该有这样的参考。例如,如果您正在使用TCP套接字编程来联系远程服务,则在onReadyRead的{​​{1}}信号中,您可以使用刚收到的数据更新文本框:

QTcpSocket

答案 1 :(得分:0)

我用getter和setter以及另一个按钮

解决了这个问题

第一个按钮:开始监听...创建EchoClient对象,这将打开websocket,连接到websocket服务器。如果消息从服务器到达,它将从名为onTextMessageRecieved的EchoClient类转到方法,在那里它将属性消息设置为传入消息的值。

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

    setData(message); //setting atribute message
}

第二个按钮:获取数据...这将从EchoClient类调用get方法。通讯是我的gui课程。

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

但是这个解决方案还不够好,请问如何建议如果有新消息我的textEdit将自动更新? 我应该在另一个线程中做到吗?我没有太多经验。

感谢。