gpt4 book ai didi

c++ - 从 QMainWindow 中访问 QDockWidget 的小部件

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:56 25 4
gpt4 key购买 nike

在我的 QMainWindow 作用域中,我有一个 AgilentSweeper 类的实例,它继承了 QDockWindow,并初始化并显示它:

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 小部件。看起来这应该是可能的,因为 sweeper 是一个成员我认为我应该能够做类似 double power = sweeper->ui->powerSpinBox->value(); 的事情,但尽管搞砸了有一段时间我不知道如何从清扫器的用户界面访问任何东西。我可以想到几种解决方法,但这似乎应该可行。

最佳答案

ui 对象默认定义为 AgilentSweeper 的私有(private)成员。所以通常情况下,您无法访问它。一些解决方案:

  1. 非常糟糕:将 QMainWindow 声明为友元
  2. 差:更改 AgilentSweeper.h 私有(private):公开:用于 Ui::AgilentSweeper
  3. 我更喜欢一个:对于您想要公开的 UI 小部件的每个方法,在 AgilentSweeper.h 中创建一个公共(public)方法

因此您可以通过

访问旋转框值
//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。

为什么这个解决方案不好?看起来很灵活吧?

在第一行将成员公开是不好的。用户可以删除实例:例如删除清扫器->ui->powerSpinBox

此外,无法记录或锁定对成员对象的访问。

关于c++ - 从 QMainWindow 中访问 QDockWidget 的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com