Q指向主窗口

QPointer to MainWindow

本文关键字:窗口      更新时间:2023-10-16

我正在创建一个对话框窗口,想知道如何将指向MainWindow的指针传递给它?

比方说,我需要在对话框中访问MainWindow的getter方法。

MainWindow声明直接来自向导:

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

在我的对话框中。h:

QPointer <MainWindow> mainwindow;

在构造函数中:

MyDialog::MyDialog(MainWindow *mw_ptr, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SceneDialog)
..
mainwindow = mw_ptr;

这给了我错误:从类型"MainWindow*"到类型"QPointer::QObjectType*{aka QObject*}"的static_cast无效

我不知道为什么。

使用object_cast将指针强制转换为MainWindow类型,由于文档中没有说明用空指针构造QPointer是安全的,因此可以执行更安全的

MainWindow* ptr = qobject_cast<MainWindow*>(mw_ptr);
if(ptr != 0)
    mainwindow = ptr;

或者,另一种方法是使用信号和插槽在主窗口和对话框之间进行通信。