Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Вызов окна от QMainWindow

Автор: KLIF 24.10.2010, 12:39

У меня проект от QMainWindow в нем вызываю еще одно окно если оно наследуется от QDialog я делаю так :

void DemAstPro::on_action_10_stvor_faile_triggered()
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
        Create_f_DemAsT w;
        w.setParent(this,Qt::Dialog);
        w.setWindowModality(Qt::ApplicationModal);
        w.show();
        w.exec();
        return;
}

и в этом случае все ок и все вполне реагирует нормально...
Мне нужно наследовать его от QMainWindow то так у меня не получается.....
И я не знаю как мое окно вызвать....

Автор: Litkevich Yuriy 24.10.2010, 13:15

Цитата(KLIF @ 24.10.2010, 15:39) *
w.show();
w.exec();
за чем два метода вызываешь? метод exec() и так показывает диалог.

Цитата(KLIF @ 24.10.2010, 15:39) *
Мне нужно наследовать его от QMainWindow то так у меня не получается.....
QMainWindow не наследник QDialog и у него нет метода exec()

Автор: KLIF 24.10.2010, 14:04

Цитата(Litkevich Yuriy @ 24.10.2010, 13:15) *
Цитата(KLIF @ 24.10.2010, 15:39) *
w.show();
w.exec();
за чем два метода вызываешь? метод exec() и так показывает диалог.

Цитата(KLIF @ 24.10.2010, 15:39) *
Мне нужно наследовать его от QMainWindow то так у меня не получается.....
QMainWindow не наследник QDialog и у него нет метода exec()


КАК сделать чтобы мое окно которое мне нужно вызвать наследовалось от QMainWindow ????

Автор: Алексей1153 24.10.2010, 15:23

KLIF, произвести класс от него :)

Автор: KLIF 24.10.2010, 17:39

Цитата(Алексей1153 @ 24.10.2010, 15:23) *
KLIF, произвести класс от него :)

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

Автор: Litkevich Yuriy 24.10.2010, 17:52

Цитата(KLIF @ 24.10.2010, 20:39) *
вернее появляется на пол секунды и закрывается... я не успеваю даже увидеть что оно отображает...
Цитата(Litkevich Yuriy @ 24.10.2010, 16:15) *
QMainWindow не наследник QDialog и у него нет метода exec()
соответственно и нет собственного цикла обработки событий.
Твой код:
void DemAstPro::on_action_10_stvor_faile_triggered()
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
        Create_f_DemAsT w;
        w.setParent(this,Qt::Dialog);
        w.setWindowModality(Qt::ApplicationModal);
        w.show();
        // w.exec(); - такого метода нет
        return;
}
Объект w, был создан, что-то ещё, затем вызван метод show(), этот метод отработал. Дальше написано return т.е. функция завершается. А раз функция завершается, то объект, созданный на стеке, тут же удаляется.

П.С.
Класс QMainWindow придуман для вполне очевидной цели, зачем пытаться сделать из него диалоговое окно?

Автор: KLIF 26.10.2010, 22:31

Цитата(KLIF @ 24.10.2010, 12:39) *
У меня проект от QMainWindow в нем вызываю еще одно окно если оно наследуется от QDialog я делаю так :
void DemAstPro::on_action_10_stvor_faile_triggered()
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
        Create_f_DemAsT w;
        w.setParent(this,Qt::Dialog);
        w.setWindowModality(Qt::ApplicationModal);
        w.show();
        w.exec();
        return;
}

и в этом случае все ок и все вполне реагирует нормально...
Мне нужно наследовать его от QMainWindow то так у меня не получается.....
И я не знаю как мое окно вызвать....



надо было сделать примерно так :
void DemAstPro::on_action_10_stvor_faile_triggered()
{

    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    Create_f_demast w;

    QDialog *ter = new QDialog (this);

    QGridLayout *nb = new QGridLayout (ter);
    nb->addWidget(&w);
    ter->show();
    ter->showMaximized();
    ter->exec();
    return;


}

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)