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

时间:2015-09-14 00:26:44

标签: c++ qt function user-interface qt-creator

来自班级mainWindows"校长"。我可以完美地运行此代码:

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

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

3 个答案:

答案 0 :(得分:0)

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

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

mainWindows:

instanceConfigurations.setMainUI(ui);

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

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

答案 1 :(得分:0)

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

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

MainWindow::UI* MainWindow::getUi()
{
    return ui;
}

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

之后,任何带有指向主窗口实例的指针的代码(我在这里称之为mainWindow)可以做类似......

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

答案 2 :(得分:0)

  1. 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); }
      ...
    };
    
  2. 外部函数需要传递窗口的实例:

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