在我的QMainWindow范围内,我有一个继承QDockWindow的类AgilentSweeper
的实例,并初始化并显示它:
sweeper = new AgilentSweeper(this);
addDockWidget(Qt::RightDockWidgetArea,sweeper);
这个类有一个Qt Creator制作的.ui形式,里面有几个小部件,构造函数如下:
AgilentSweeper::AgilentSweeper(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::AgilentSweeper)
{
ui->setupUi(this);
}
其中Ui::AgilentSweeper *ui
是公开的。
从AgilentSweeper范围内的其他功能,我可以访问AgilentSweeper小部件并正常执行double power = ui->powerSpinBox->value();
之类的操作。但是,我无法弄清楚如何从主Ui的范围内访问AgilentSweeper小部件。看起来这应该是可能的,因为清扫工是一个成员,我认为我应该能够做double power = sweeper->ui->powerSpinBox->value();
之类的事情,但是尽管我已经搞了一段时间,但我无法弄清楚如何从中获取任何东西扫地车的ui。我可以想到几种解决方法,但这看起来应该是可能的。
答案 0 :(得分:1)
ui对象默认定义为AgilentSweeper的私有成员。通常情况下,您无法访问它。 一些解决方案:
所以你可以通过
访问spinbox-value//in AgilentSweeper.h
double powerSpinBoxValue()
{
return ui->powerSpinBox->value()
}
//call from outside:
double power = sweeper->powerSpinBoxValue();
编辑 2解释
对象Ui::AgilentSweeper *ui
在AgilentSweeper.h中定义,使用前向声明。因此,在仅包含AgilentSweeper.h的文件中,没有给出任何信息,如何创建对象的实例以及它提供的方法。
此信息由自动生成的文件ui_AgilentSweeper.h提供。所以为了使用方式2,还包括ui_AgilentSweeper.h。
为什么这个解决方案不好?它看起来很灵活吗?
在第一行暴露成员公众是坏的。用户可以删除实例:例如delete sweeper->ui->powerSpinBox
。
此外,无法记录或锁定对成员对象的访问权。