我想问一下如何在屏幕上添加一些文字。 我有按钮,当我点击它时,我创建了新对象。它有一个为我提供一些数据的功能。 如何从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;
在这里我想改变你的东西。
}
答案 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将自动更新? 我应该在另一个线程中做到吗?我没有太多经验。
感谢。