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

Posted

技术标签:

【中文标题】如何从外部函数访问 UI 组件?【英文标题】:How can I access to UI components from an external function? 【发布时间】:2015-09-14 00:26:44 【问题描述】:

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

ui->label1->setText("texto");

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

【问题讨论】:

【参考方案1】:

如果它的外部函数放在其他类中。 您可以将链接分配给您的 ui

Ui::MainWindowUI *MainUi=0;
...
void Configurations::setMainUI(Ui::MainWindowUI* u)
    if (u)
        MainUi=u;
    

主窗口:

instanceConfigurations.setMainUI(ui);

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

void Configurations::setLabel()
       MainUi->label1->setText("texto");

【讨论】:

【参考方案2】:

(虽然您没有指定,但看起来您使用的是 C++,所以我认为这是正确的。)

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

MainWindow::UI* MainWindow::getUi()

    return ui;

<main window class> 是您班级的实际名称。

之后,任何具有指向您的主窗口实例的指针的代码(这里我称之为mainWindow)都可以执行类似...

mainWindow->getUi()->label1->setText("texto");

【讨论】:

【参考方案3】:

    MainWindow 需要在其 API 中公开文本。你不应该直接暴露像 ui 实例这样的实现细节:

    class 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); 
      ...
    ;
    

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

    void function(MainWindow * w) 
      w->setSomeText("Hello");
    
    
    int main(int argc, char ** argv) 
      ...
      MainWindow window;
      window.show();
      ...
      function(&window);
      ...
    
    

【讨论】:

【参考方案4】:

您可以在“外部课程”中使用connect()。这意味着:在“外部函数”开始时在类的构造函数上声明连接,然后发出信号,将其附加到 rmain 窗口中的插槽。

然后你只需要在你的主窗口中声明一个插槽ui->label1->setText("texto");inside

【讨论】:

以上是关于如何从外部函数访问 UI 组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在组件外部访问React Context?

如何从外部函数渲染组件

如何使用 react-native 从外部函数返回组件

如何访问组件外部的 react-redux 存储

如何从嵌套组件发出,同时保持引用函数外部变量的能力

如何从外部函数 C++ 访问动态结构?