gpt4 book ai didi

c++从函数访问父小部件

转载 作者:可可西里 更新时间:2023-11-01 17:56:10 25 4
gpt4 key购买 nike

我是 C++ 和 Qt 的新手,我正在尝试从父类访问小部件。

这是我的主窗口.cpp

MainWindow::MainWindow( QWidget *parent )
: QMainWindow( parent )
, ui( new Ui::MainWindow )
{
ui->setupUi(this);
}

我有另一个类(class),我正试图从那个类(class)的“ui”访问一个小部件。像这样:

DashBoard::DashBoard( MainWindow *parent ) : QObject( parent ) 
{
}

void DashBoard::select( )
{
parent->ui->menuSL->setCurrentIndex(0);
}

这给了我一个错误,指出无法解析方法和字段。但是当我将 parent->ui->menuSL->setCurrentIndex(0); 行放在构造函数中时,就没有问题了。

有人能指出我的错误吗?

最佳答案

从代码可以推断类DashBoard继承了QObjectQObjectparent 字段定义为指向 QObject 的指针,因此当您调用 parent->ui->menuSL->setCurrentIndex(0);DashBoard 类的方法中,您假设 QObject 定义了一个名为 ui 的成员,它不是真的。

以这种方式转换父对象:

((MainWindow*)(parent()))->ui->menuSL->setCurrentIndex(0);

或者这个:

MainWindow* parent = qobject_cast<MainWindow*>(this->parent());
// check parent is not null
parent->ui->menuSL->setCurrentIndex(0);

在构造函数中您看不到错误,因为 parent 被定义为指向类 MainWindow 的对象的指针,然后传递给 QObject 的构造函数。

如果使用 Qt Designer(在您的情况下可能是 "ui_mainwindow.h"),请不要忘记公开 ui 并包含自动生成的 UI header 仪表板 cpp 文件。

注意:我只是想回答你的问题,但我鼓励你回顾一下你这样做的方式。有多种方法可以通过更一致的 OO 设计实现相同的目标。

关于c++从函数访问父小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18649707/

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