来自班级mainWindows"校长"。我可以完美地运行此代码:
ui->label1->setText("texto");
从另一个外部函数我需要运行相同的代码。
答案 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)
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);
...
}