【发布时间】:2015-04-13 13:23:17
【问题描述】:
我有两个带有相关 .cpp 文件的“表单”:mainwindow.cpp 和 settings.cpp
我在“MainWindow”中有一个标签“TitleLabel”,当我按下“设置”中的按钮时,我想修改它。
文件的结构是这样的(为了简化,我删除了大部分不相关的代码):
//MainWindow
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "settings.h"
//...
void MainWindow::on_Settings_clicked() //Opens settings
{
Settings settings;
settings.setModal(true);
settings.exec();
}
和设置:
//Settings
#include "settings.h"
#include "ui_settings.h"
#include "mainwindow.h"
//...
void Settings::on_ChangeMain_clicked()
{
//what to do here?
}
首先我尝试这样做:
void Settings::on_ChangeMain_clicked()
{
MainWindow.ui->TitleLabel->setText("OK");
}
但它给了我一个我无法解决的语法错误,大致翻译为:
\settings.cpp:75: error: C2143: syntax error: ';' missing before '.'
我尝试添加一个';'之前 '。'但它仍然给我同样的错误。
然后我尝试创建一个指向 MainWindow 的指针并使用它,如下所示:
void Settings::on_ChangeMain_clicked()
{
MainWindow *mw = new MainWindow();
mw->ui->TitleLabel->setText("OK");
}
这一次它告诉我不可能访问 MainWindow 类的私有成员。我不知道我是否应该甚至如何授予设置访问这些成员的权限。我真的很失落,我该怎么办?
编辑:
我能够通过使用 Qt 的 SIGNAL 和 SLOT 来解决这个问题。
【问题讨论】:
-
重复:stackoverflow.com/questions/7585050/… 和许多其他相关问题
-
@SaZ 谢谢,所以我想我应该学习使用信号和插槽。
-
第一:学习一些OOP基础知识。
-
@SaZ 我以为我已经足够理解它们了,但显然我需要重新审视它们。
-
我认为在 2 个类之间共享 1 个变量 - 是编程基础。我在stackoverflow上发现了很多类似的问题和答案。你应该从搜索和研究开始,而不是问这些常见的事情。见这篇文章:stackoverflow.com/help/how-to-ask
标签: c++ qt inheritance widget