Я пытаюсь прочитать HWND диалога, который я подклассифицировал из QDialog, но я (думаю, что я) запущен в Memory Access Error
, что приводит к возврату нулевого указателя в клиентский код.Как получить HWND для QDialog в Windows 10
Заголовочный файл - Я отказался пытается получить HWND как я не могу даже получить WID ...
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
WId getWindowHandle (void);
private:
Ui::Dialog *ui;
QGraphicsScene *scene;
QGraphicsTextItem *text;
};
#endif // DIALOG_H
Реализация:
WId Dialog::getWindowHandle() {
WId id = this->effectiveWinId(); // debugger says id = 0
return id;
}
Я также попытался это:
WId Dialog::getWindowHandle() {
QWidget *parent = this->nativeParentWidget(); // debugger says parent = 0
WId id = parent->effectiveWinId(); // so this crashes
return id;
}
Я новичок в Qt. Надеюсь, что-то очевидное, что мне не хватает.
Что такое канонический способ получения WID QDialog?
Toolchain: Windows 10 Anniversary, Qt 5.7, оба 64-разрядных, Visual Studio 14 C++-компилятор, отладчик Windows SDK.
Попробуйте 'this-> window() -> winId()' –
** Для чего вам нужен HWND? ** Почему вы предполагаете, что есть HWND для начала? Современный пользовательский интерфейс не будет использовать собственные окна для создания интерфейса. Qt этого не делает, WPF этого не делает, GTK не делает и т. Д. –