从 C++ 中的 gui 内创建的对象修改 GUI
Posted
技术标签:
【中文标题】从 C++ 中的 gui 内创建的对象修改 GUI【英文标题】:Modify GUI from object created inside the gui in c++ 【发布时间】:2016-09-19 08:22:44 【问题描述】:我想问一下如何在屏幕上添加一些文字。 我有按钮,当我点击它时,我创建了新对象。它具有为我提供一些数据的功能。 如何从 gui 访问该数据?我不能有吸气剂,因为它会在一段时间后(连接到服务器后)给我数据。 是否可以在 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;
这里我想更改 ui 的东西。
【问题讨论】:
你能说得更准确点吗?我无法帮助您,因为我没有有价值的信息可以帮助您。从 GUI 访问数据?你什么意思 ?能否请您也提供一些代码? 【参考方案1】:是的,这是可能的。但目前你的问题对我来说似乎太宽泛或不清楚[至少]。我假设您将 Qt Creator 与它的设计器一起使用。所以你应该能够访问一个ui
对象(在你的MainWindow
类中)。有了这个对象,您就可以随时随地更改 UI。
因此,首先为该文本框(即QLineEdit
)分配一个ID(例如myLineEdit
)。现在,ui->myLineEdit
为您提供了一个 QLineEdit *
,它实际上是对该文本框的引用。所以无论你想更新 UI,你都应该有那个参考。例如,如果您使用 TCP 套接字编程来联系远程服务,则在 QTcpSocket
的 onReadyRead
信号中,您可以使用刚刚收到的数据更新文本框:
QLineEdit *textbox = ui->myLineEdit;
textbox->setText("updated data");
【讨论】:
【参考方案2】:我用 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 就会自动更新? 我应该在另一个线程中做吗?我没有太多经验。
谢谢。
【讨论】:
而不是setData()
发出带有消息的信号。如果 Communication
类也无法访问 UI,那么只需在此处添加相同的信号并使其转发来自 EchoClient
的信号(信号/信号连接)。在某个地方,您将可以访问 UI 元素和“数据源”,然后您可以将信号连接到 UI 插槽,例如QTextEdit::append()
通讯是 gui 类,我怎样才能发出带有消息的信号?我不知道如何把这两个放在一起。以上是关于从 C++ 中的 gui 内创建的对象修改 GUI的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?