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

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

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

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

【问题讨论】:

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


    【解决方案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】:
        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);
            ...
          }
          

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-04-11
            • 2018-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-14
            • 1970-01-01
            • 2020-02-27
            • 1970-01-01
            相关资源
            最近更新 更多