C++ 从函数访问父小部件
c++ accessing parent widgets from a function
我是C++和Qt的新手,我正在尝试从父类访问小部件。
这是我的主窗口.cpp
MainWindow::MainWindow( QWidget *parent )
: QMainWindow( parent )
, ui( new Ui::MainWindow )
{
ui->setupUi(this);
}
我有另一个类,我正在尝试从该类中的"ui"访问小部件。这样:
DashBoard::DashBoard( MainWindow *parent ) : QObject( parent )
{
}
void DashBoard::select( )
{
parent->ui->menuSL->setCurrentIndex(0);
}
这给了我一个错误,指出无法解析方法和字段。但是当我把行parent->ui->menuSL->setCurrentIndex(0);
放在构造函数中时,没有问题。
有人可以指出我的错误吗?
从代码中可以推断出类DashBoard
继承QObject
。QObject
的parent
字段被定义为指向QObject
的指针,因此当您在类DashBoard
的方法中调用parent->ui->menuSL->setCurrentIndex(0);
时,您假设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
的构造函数。
不要忘记公开ui
并在DashBoard
cpp 文件中使用 Qt 设计器(在您的情况下可能"ui_mainwindow.h"
)中包含自动生成的 UI 标头。
注意:我只是想回答你的问题,但我鼓励你回顾一下你这样做的方式。有几种方法可以通过更一致的 OO 设计来实现相同的目标。
在选择方法中,尝试使用名为 parent
的变量。但是你需要QObject::parent()
方法。
此外,您需要将父级转换为QMainWindow
。
void DashBoard::select( ) {
QMainWindow* parent = qobject_cast<QMainWindow>(this->parent());
if (parent == 0) { return; } // or some other error handling
parent->ui->menuSL->setCurrentIndex(0);
}
您只能访问ui
是公共的。
总之,我认为你应该在类MainWindow
中提供一个方法来执行你想要的操作。
相关文章:
- 在C++中循环访问自定义结构列表的小问题
- Qt小部件中的摄像头访问
- 我们如何准备小内存池,其中每个线程可以独立访问某些位置范围?
- Qt:如何访问继承的小部件?
- QT访问表小部件从单独的线程项目
- QT:类的访问功能,该功能使用构造函数外的GUI小部件
- 几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
- 从类外部访问小部件
- 从函数访问QTEXTEDIT小部件
- 访问QT小部件线程安全
- 如何从另一个窗口访问窗口的小部件
- 访问QStackWidget中的小部件
- C++ 创建小部件数组
- 从另一个小部件访问主窗口中的文本框
- C++ 从函数访问父小部件
- 从Windows*访问小部件
- 通过按钮访问父窗口小部件的变量
- Qt-如何从另一个子窗口或小工具访问主窗口
- 无法从Qt中的另一个小部件访问小部件中的控件
- 当单击视图中的项时,从另一个小部件访问自定义模型数据