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 MainWindow 和 friend 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();
这样你可以在不违反封装规则的情况下访问你需要的信息,但是你需要一个MainWindow
的instance来做到这一点,并且一定要在你的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 对象的主要内容,如果未能解决你的问题,请参考以下文章