Russian Qt Forum
Ноябрь 25, 2024, 15:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Функция init () не обрабатывается  (Прочитано 3550 раз)
taifun
Гость
« : Январь 18, 2010, 11:34 »

Здраствуйте! Создал новый проект:
Код:
#include <QtGui>

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "readrecmut.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //init ();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::init()
{

    QObject::connect(ui->LoadFile, SIGNAL(clicked()), this, SLOT(ReadRecord()));
    QObject::connect(ui->Exit, SIGNAL(clicked()), this, SLOT(close()));


}

void MainWindow::ReadRecord()
{
    msgBox.setWindowTitle(trUtf8("Внимание!"));
    msgBox.setText(trUtf8("Уведомление об открытие файла:"));
    msgBox.setInformativeText(trUtf8("файл был успешно открыт."));
    msgBox.setIcon(QMessageBox::Information);
    msgBox.exec();

    OpenFileDialog = new QFileDialog(this);
    OpenFileDialog->exec();

    QString fileName = OpenFileDialog->getOpenFileName(this, trUtf8("Открыть"));

}
и теперь что бы обработать функцию init(), ее необходимо вызывать в конструкторе класса диалогового окна. А раньше я делал так :
Код:
#include <QtGui>
#include <QDebug>
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "gltest.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    wgOpenGL = new glTest(ui->ViewOpenGl);
    qDebug() << "ViewOpenGl have focus1 - " << ui->ViewOpenGl->hasFocus();
//    ui->ViewOpenGl->setFocusPolicy(Qt::TabFocus);
//    ui->ViewOpenGl->setFocus(Qt::TabFocusReason);
    wgOpenGL->setFocusPolicy(Qt::TabFocus);
    wgOpenGL->setFocus(Qt::TabFocusReason);
    qDebug() << "ViewOpenGl have focus2 - " << ui->ViewOpenGl->hasFocus();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::init()
{
     QObject::connect(qApp, SIGNAL(focusChanged()), this, SLOT(findFW()));
}

void MainWindow::findFW()
{
    qDebug() << "Widget have focus - " << qApp->focusWidget()->objectName();
}
и все работало. Это, конечно, не критично, но все же хотелось бы разобраться ...
Записан
Akaiten
Гость
« Ответ #1 : Январь 18, 2010, 11:43 »

Вообще ничего не понятно Строит глазки
В первом случае init() закамментена и не вызывается, да и втором случае тоже не вызывается. При чём здесь функция init()?
Записан
DS_tm
Гость
« Ответ #2 : Январь 18, 2010, 12:20 »

Сдаеться мне, что вы раньше использовали класс, наследованный от класса, в котором операция init была виртуальной и запускалась в конструкторе. Соответсвенно переопределив ее в своем классе, и вызвав конструктор родительского класса вы вызывали init().
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Январь 18, 2010, 13:01 »

мне казалось виртуалки в конструкторе не вызываются... по крайней мере я ухирился так вызвать pure virtual
Записан
taifun
Гость
« Ответ #4 : Январь 18, 2010, 13:05 »

Цитировать
Вообще ничего не понятно Строит глазки
В первом случае init() закамментена и не вызывается, да и втором случае тоже не вызывается. При чём здесь функция init()?
закоментировал, потому что проверял так как раньше не надо было вызывать в конструкторе эту функцию она сама каким-то "чудом" (хотелось бы выяснить каким) вызывалась, а теперь не вызывается, вот я ее принудительно вызвал - проверил - заработало и потом закоментировал не работает  Непонимающий

Сдаеться мне, что вы раньше использовали класс, наследованный от класса, в котором операция init была виртуальной и запускалась в конструкторе. Соответсвенно переопределив ее в своем классе, и вызвав конструктор родительского класса вы вызывали init().

Хммм...  все время ее не вызывал, а тут на те приехали ...

Вот прикрепил файлик (в нем я инит не вызываю), если кто-то может разъясните ситуацию.
Записан
DS_tm
Гость
« Ответ #5 : Январь 18, 2010, 13:27 »

Сдаеться мне, что вы раньше использовали класс, наследованный от класса, в котором операция init была виртуальной и запускалась в конструкторе. Соответсвенно переопределив ее в своем классе, и вызвав конструктор родительского класса вы вызывали init().

Хммм...  все время ее не вызывал, а тут на те приехали ...

Вот прикрепил файлик (в нем я инит не вызываю), если кто-то может разъясните ситуацию.

Может дело вот в чем: "This is one of two special slots added by Qt Designer to avoid the old (Qt version 2.x) approach when it was necessary to sub-class each dialog to add a constructor or destructor. The protected slots init() and destroy() save you from this approach."

На данный момент никаких слотов или виртуалок с именем init в иерархии QMainWindow нету.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 23.