Qt从其他小部件调用QMainWindow方法的最佳方式

Qt best way to invoke methods of QMainWindow from other widget

本文关键字:方法 最佳 方式 QMainWindow 调用 其他 小部 Qt      更新时间:2023-10-16

我有一个类型为QMainWindow的主窗口,然后我设置了一些小部件,并在其构造函数中将QMainWindow作为父窗口,QMainWindow作为Object传递。现在我需要从这个小部件调用QMainWindow中的方法。最好的方法是什么?

这个小部件是这样的:

DataListModel::DataListModel( QObject *parent ) :
             QStandardItemModel( 0, 0, parent ) 
{
// here I like to invoke some QMainWindow method? 
//can I cast somehow the parent ? or use some pointer ?
}

如果主窗口是DataListModel的父窗口,则可以强制转换它:

MainWindow *w = qobject_cast<MainWindow*>(parent);
if(w == 0) {
 //error handling here
}

编辑

例如:

#include "mainwindow.h"
#include <QStatusBar>
ScrollBar::ScrollBar(QWidget *parent) :
    QScrollBar(parent)
{
    MainWindow *w = qobject_cast<MainWindow*>(parent);
   if(w != 0) {
       qDebug() << Q_FUNC_INFO;
       QStatusBar *bar = w->statusBar();
       bar->hide();
   }
}

运行良好