Сообщение Re: Аналог MFC-шной функции CDialog::OnInitDialog в Qt от 15.09.2022 8:01
Изменено 15.09.2022 8:04 AlexGin
Re: Аналог MFC-шной функции CDialog::OnInitDialog в Qt
Здравствуйте, RussianFellow, Вы писали:
RF>В библиотеке MFC в классе CDialog есть функция OnInitDIalog, в которой выполняются действия при открытии диалогового окна.
RF>А есть ли какой-то аналог в библиотеке Qt для этого случая? Как задать диалоговому окну, открываемого в программе (например, после нажатия кнопки) сделать какие-то действия в нём (например, заполнить текстовые поля или таблицы)?
Функция OnInitDIalog в MFC — от того, что применяя C++ в технологиях MFC и WinAPI, требуется разнести два отдельных момента:
1) Создание объекта заданного C++ класса;
2) Непосредственное создание графического окна (как объекта в понятиях Windows и WinAPI).
Для Qt — всё делается по современному: в конструкторе объекта C++ класса (наследника QWidget) следует делать всё необходимое.
Делать всё то, что в рамках MFC выносилось на OnInitDIalog.
P.S. В то же время, бывают (относительно редкие) случаи, когда именно требуется разделить конструктор и инициализацию.
В этом случае я использую отложенную инициализацию по таймеру:
Делаю слот — в заголовочнике:
В конце конструктора моего виджета (диалога или главного окна) добавляю:
Ну и реализую эту самую отложенную инициализацию:
RF>В библиотеке MFC в классе CDialog есть функция OnInitDIalog, в которой выполняются действия при открытии диалогового окна.
RF>А есть ли какой-то аналог в библиотеке Qt для этого случая? Как задать диалоговому окну, открываемого в программе (например, после нажатия кнопки) сделать какие-то действия в нём (например, заполнить текстовые поля или таблицы)?
Функция OnInitDIalog в MFC — от того, что применяя C++ в технологиях MFC и WinAPI, требуется разнести два отдельных момента:
1) Создание объекта заданного C++ класса;
2) Непосредственное создание графического окна (как объекта в понятиях Windows и WinAPI).
Для Qt — всё делается по современному: в конструкторе объекта C++ класса (наследника QWidget) следует делать всё необходимое.
Делать всё то, что в рамках MFC выносилось на OnInitDIalog.
P.S. В то же время, бывают (относительно редкие) случаи, когда именно требуется разделить конструктор и инициализацию.
В этом случае я использую отложенную инициализацию по таймеру:
Делаю слот — в заголовочнике:
private slots:
void OnTimerSingleShot();
В конце конструктора моего виджета (диалога или главного окна) добавляю:
QTimer::singleShot(200, this, SLOT(OnTimerSingleShot())); // Инициализация - отложенная на 200 ms
Ну и реализую эту самую отложенную инициализацию:
void MyDlg::OnTimerSingleShot()
{
// в качестве примера:
ConnectToDataBase();
RefreshUiTree();
}
Re: Аналог MFC-шной функции CDialog::OnInitDialog в Qt
Здравствуйте, RussianFellow, Вы писали:
RF>В библиотеке MFC в классе CDialog есть функция OnInitDIalog, в которой выполняются действия при открытии диалогового окна.
RF>А есть ли какой-то аналог в библиотеке Qt для этого случая? Как задать диалоговому окну, открываемого в программе (например, после нажатия кнопки) сделать какие-то действия в нём (например, заполнить текстовые поля или таблицы)?
Функция OnInitDIalog в MFC — от того, что применяя C++ в технологиях MFC и WinAPI, требуется разнести два отдельных момента:
1) Создание объекта заданного C++ класса;
2) Непосредственное создание графического окна (как объекта в понятиях Windows и WinAPI).
Для Qt — всё делается по современному: в конструкторе объекта C++ класса (наследника QWidget) следует делать всё необходимое.
Делать всё то, что в рамках MFC выносилось на OnInitDIalog.
P.S. В то же время, бывают (относительно редкие) случаи, когда именно требуется разделить конструктор и инициализацию.
В этом случае я использую отложенную инициализацию по таймеру:
Делаю слот — в заголовочнике:
В конце конструктора моего виджета (диалога или главного окна) добавляю:
Ну и реализую эту самую отложенную инициализацию:
Такое требуется достаточно редко, но иногда это может оказаться полезно.
RF>В библиотеке MFC в классе CDialog есть функция OnInitDIalog, в которой выполняются действия при открытии диалогового окна.
RF>А есть ли какой-то аналог в библиотеке Qt для этого случая? Как задать диалоговому окну, открываемого в программе (например, после нажатия кнопки) сделать какие-то действия в нём (например, заполнить текстовые поля или таблицы)?
Функция OnInitDIalog в MFC — от того, что применяя C++ в технологиях MFC и WinAPI, требуется разнести два отдельных момента:
1) Создание объекта заданного C++ класса;
2) Непосредственное создание графического окна (как объекта в понятиях Windows и WinAPI).
Для Qt — всё делается по современному: в конструкторе объекта C++ класса (наследника QWidget) следует делать всё необходимое.
Делать всё то, что в рамках MFC выносилось на OnInitDIalog.
P.S. В то же время, бывают (относительно редкие) случаи, когда именно требуется разделить конструктор и инициализацию.
В этом случае я использую отложенную инициализацию по таймеру:
Делаю слот — в заголовочнике:
private slots:
void OnTimerSingleShot();
В конце конструктора моего виджета (диалога или главного окна) добавляю:
QTimer::singleShot(200, this, SLOT(OnTimerSingleShot())); // Инициализация - отложенная на 200 ms
Ну и реализую эту самую отложенную инициализацию:
void MyDlg::OnTimerSingleShot()
{
// в качестве примера:
ConnectToDataBase();
RefreshUiTree();
}
Такое требуется достаточно редко, но иногда это может оказаться полезно.