首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从外部函数访问UI组件?

如何从外部函数访问UI组件?
EN

Stack Overflow用户
提问于 2015-09-14 08:26:44
回答 4查看 250关注 0票数 0

来自类mainWindows“校长”。我可以完美地运行这段代码:

代码语言:javascript
运行
复制
ui->label1->setText("texto");

从另一个外部函数中,我需要运行相同的代码。

EN

回答 4

Stack Overflow用户

发布于 2015-09-14 09:18:19

如果它的外部函数被放在其他类中。您可以指定指向ui的链接。

代码语言:javascript
运行
复制
Ui::MainWindowUI *MainUi=0;
...
void Configurations::setMainUI(Ui::MainWindowUI* u){
    if (u){
        MainUi=u;
    }
}

mainWindows:

代码语言:javascript
运行
复制
instanceConfigurations.setMainUI(ui);

然后可以通过以下方式访问ui

代码语言:javascript
运行
复制
void Configurations::setLabel(){
       MainUi->label1->setText("texto");
}
票数 0
EN

Stack Overflow用户

发布于 2015-09-14 09:48:02

(尽管您没有指定,但看起来您使用的是C++,所以我假设这是正确的。)

ui变量很可能是主窗口类的私有成员,因此可以使用各种标准方法从该类外部访问它。如果您不担心破坏封装,那么最简单的方法之一就是向类中添加一个返回ui成员的方法。我记不起涉及的确切类型,所以这将是稍微不完整的,但它应该看起来像这样(其中MainWindow是您的类):

代码语言:javascript
运行
复制
MainWindow::UI* MainWindow::getUi()
{
    return ui;
}

其中<main window class>是您的类的实际名称。

在此之后,任何具有指向您的主窗口实例的指针的代码(我在这里将其称为mainWindow )都可以执行如下操作:

代码语言:javascript
运行
复制
mainWindow->getUi()->label1->setText("texto");
票数 0
EN

Stack Overflow用户

发布于 2015-09-14 10:09:33

  1. MainWindow需要在其API中公开文本。您永远不应该直接公开像ui实例这样的实现细节:

类MainWindow ... { Q_OBJECT Q_PROPERTY (QString someText READ someText WRITE setSomeText) ...public: QString someText() const { return ui.label1->text();} void setSomeText(const QString & text) { ui.label1->setText(text);} ... };

  • 外部函数需要传入窗口的实例:

空函数(MainWindow* w) { w->setSomeText("Hello");} int main(int argc,char ** argv) { ...MainWindow窗口;window.show();...函数(窗口);... }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32555846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档