Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 Ui 对象

Posted

技术标签:

【中文标题】Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 Ui 对象【英文标题】:Qt5 ui, multiple windows: how can I access the Ui objects in Window 2 from Window 1 【发布时间】:2020-01-08 11:17:54 【问题描述】:

我知道这很笨拙,而且我可能做错了很多事情,但到目前为止,我在网上看到的所有内容都返回相同的错误:非静态数据成员 ui 的使用无效。

所以在 MainWindow 中,我有一个名为 hometeam 的组合框,我想在名为 label 的 Qlabel 上显示 currentText,该 Qlabel 位于另一个名为 对话框

我认为他们都是私人成员,所以我在各自的标题中添加了 friend class MainWindowfriend class dialog(我知道这是非常错误的,但这是最后一个我试过的东西),我在 .cpp 文件中包含了“ui_mainwindow”和“ui_dialog”,这是我正在尝试的代码:

   ui->label->setText(MainWindow::ui->hometeam->currentTex());

请记住,我不想要一个 QDialog,第二个窗口将做的不仅仅是显示,我只想从不同的窗口访问对象。插槽和信号给出相同的错误。

谢谢!

【问题讨论】:

你有一个类可以将它们连接到 MainWindow 和 Dialog 吗??? 【参考方案1】:

我认为正确的方法是在 MainWindow 类中添加一个函数:

QString hometeamText() const

    return ui->hometeam->currentTex();

这样你可以在不违反封装规则的情况下访问你需要的信息,但是你需要一个MainWindowinstance来做到这一点,并且一定要在你的Dialog中保留一个指向它的指针类:

class Dialog

private:
    MainWindow * mainwindow;
public:
    void setMainWindow(MainWindow * w)  mainWindow = w; 

然后在某个地方(例如在main),您可以执行以下操作:

MainWindow mainwindow;
Dialog dialog;
dialog.setMainWindow(&mainWindow);

在您的 Dialog 班级内,无论您需要什么:

ui->label->setText(window->hometeamText());

【讨论】:

是的,就是这样,现在我只是觉得很愚蠢,因为上个月我们在课堂上做了类似的事情,哈哈。无论如何,干杯人!

以上是关于Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 Ui 对象的主要内容,如果未能解决你的问题,请参考以下文章

Qt5从另一个类访问ui [重复]

如何在 ui 窗口中创建草图区域

跨多个窗口访问项目和属性

Python3 Qt5 主窗口

几个ui显示在一个窗口里

在 Qt5 中的多个弹出窗口小部件上接收鼠标 EnterEvent 和 LeaveEvent