【发布时间】:2015-09-14 00:26:44
【问题描述】:
来自类 mainWindows“校长”。我可以完美运行这段代码:
ui->label1->setText("texto");
我需要从另一个外部函数运行相同的代码。
【问题讨论】:
标签: c++ qt function user-interface qt-creator
来自类 mainWindows“校长”。我可以完美运行这段代码:
ui->label1->setText("texto");
我需要从另一个外部函数运行相同的代码。
【问题讨论】:
标签: c++ qt function user-interface qt-creator
如果它的外部函数放在其他类中。 您可以将链接分配给您的 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");
}
【讨论】:
(虽然您没有指定,但看起来您使用的是 C++,所以我认为这是正确的。)
ui 变量很可能是主窗口类的私有成员,因此您可以使用各种标准方法从该类外部访问它。如果您不担心破坏封装,最简单的方法之一是向您的类添加一个返回ui 成员的方法。我不记得所涉及的确切类型,所以这会稍微不完整,但它应该看起来像这样(MainWindow 是你的类):
MainWindow::UI* MainWindow::getUi()
{
return ui;
}
<main window class> 是您班级的实际名称。
之后,任何具有指向您的主窗口实例的指针的代码(这里我称之为mainWindow)都可以执行类似...
mainWindow->getUi()->label1->setText("texto");
【讨论】:
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);
...
}
【讨论】:
您可以在“外部课程”中使用connect()。这意味着:在“外部函数”开始时在类的构造函数上声明连接,然后发出信号,将其附加到 rmain 窗口中的插槽。
然后你只需要在你的主窗口中声明一个插槽ui->label1->setText("texto");inside
【讨论】: