Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
buratina
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 9
1

Получить указатель на окно верхнего уровня из другого класса

27.02.2018, 14:09. Просмотров 223. Ответов 4
Метки нет (Все метки)

Всем привет!
Могу путаться в терминологии, поправьте если что-)
Необходимо получить указатель на главное окно (toplevel window) приложения.
Для чего это: в классе будут обрабатываться события, которые ловятся главным окном. Для регистрации событий от определенных устройств необходимо мспользовать функцию

C++
1
2
3
4
5
HDEVNOTIFY WINAPI RegisterDeviceNotification(
  _In_ HANDLE hRecipient,
  _In_ LPVOID NotificationFilter,
  _In_ DWORD  Flags
);
где первым параметром идет указатель на окно.

Пробовал через topLevelWidgets(), но наверное это неправильно, так как надо указывать от какого класса происходит окно и тогда получаемый класс будет не совсем универсальный. И пока еще не в курсе-), возможно, у приложения может быть несколько окон верхнего уровня, тогда тоже что-то надо делать будет.

Какими еще способами можно получить указатель на главное окно. Спасибо!

main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyDialog w;
    w.show();
 
    return a.exec();
}
myclass.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
class MyClass : public QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject *parent = 0);
 
signals:
 
public slots:
};

mydialog.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace Ui {
class MyDialog;
}
 
class MyDialog : public QDialog
{
    Q_OBJECT
 
public:
    explicit MyDialog(QWidget *parent = 0);
    ~MyDialog();
 
private:
    Ui::MyDialog *ui;
    MyClass *myclass;
};

myclass.cpp
C++ (Qt)
1
2
3
4
MyClass::MyClass(QObject *parent) : QObject(parent)
{
    // вот здесь нужен указатель на главное окно приложения
}

mydialog.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
MyDialog::MyDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyDialog)
{
    ui->setupUi(this);
    myclass = new MyClass();
}
 
MyDialog::~MyDialog()
{
    delete ui;
    delete myclass;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2018, 14:09
Ответы с готовыми решениями:

Указатель на функцию из другого класса
Добрый день! Есть класс Frame, который в конструкторе принимает указатель на...

Получить переменную из другого класса
Помогите разобраться, как можно получить переменную которая объявлена в другом...

Как получить доступ к переменным одного класса из методов другого
Есть класс MainWindow с переменными в pablic, и кьютешный QGraphicsView. Нужно...

Новое окно+виджет. Как получить доступ к переменной из другой функции (метода) этого же класса?
QMainWindow* secondWindow = new QMainWindow(this); ...

Ошибка при обращении из одного класса к методу другого класса
Структура проекта, 2 класса: класс графики MainWindow класс логики Сannibals...

4
nmcf
6276 / 5578 / 2538
Регистрация: 14.04.2014
Сообщений: 23,468
27.02.2018, 17:58 2
Ну и передавай this через конструктор.
1
buratina
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 9
28.02.2018, 00:10  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
передавай this через конструктор
Спасибо, вроде получилось-)
Если не сложно, посмотрите, правильно? Спасибо!
mydialog.cpp
C++ (Qt)
1
2
3
...
myclass = new MyClass(this);
...
myclass.cpp
C++ (Qt)
1
2
3
4
...
QWidget* p = qobject_cast<QWidget *>(parent);
...(HWND)p->winId() // получаем хендл окна
...
0
nmcf
6276 / 5578 / 2538
Регистрация: 14.04.2014
Сообщений: 23,468
28.02.2018, 00:17 4
Ну если работает.
0
buratina
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 9
28.02.2018, 00:27  [ТС] 5
Ок, спасибо!
0
28.02.2018, 00:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2018, 00:27

Вызов функции из одного класса кнопкой из другого класса
Доброго времени суток. Помогите разобраться с сигналами и слотами. Уже устал...

Определить текущий каталог другого окна верхнего уровня WinApi
Есть программа на С++, которая мониторит действия пользователя в Windows. ...

Можно ли получить только дочерний текст(верхнего уровня) элемента
Есть такой кусок HTML: &lt;div class=&quot;price&quot;&gt; 13 200 руб. &lt;div...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru