如何从外部函数访问 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 组件?的主要内容,如果未能解决你的问题,请参考以下文章