QPointer to MainWindow

Я создаю диалоговое окно и хочу знать, как передать указатель на MainWindow к этому?

Скажем, мне нужен доступ к методу получения MainWindow в моем диалоге.

MainWindow Декларация прямо от мастера:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

В моем dialog.h:

QPointer <MainWindow> mainwindow;

В конструкторе:

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

Это дает мне ошибку: недопустимый static_cast от типа 'MainWindow*' до типа 'QPointer::QObjectType* {aka QObject*}'

И я не знаю почему.

1 ответ

Решение

Используйте object_cast для приведения указателя в тип MainWindow, и поскольку в документации не сказано, что безопасно создавать QPointer с нулевым указателем, вы можете сделать это безопаснее.

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

Или альтернативный способ - использовать сигналы и слоты для связи между главным окном и диалогом.

Другие вопросы по тегам