Запустите QWidget из окна QMain - PullRequest
2 голосов
/ 11 апреля 2010

Я делаю свое первое приложение на C ++ - Qt4, и у меня возникают проблемы с "подключением" моих различных пользовательских интерфейсов. У меня есть главное окно с несколькими кнопками, и когда я нажимаю на одну, я хочу открыть другое окно.

MyMainWindowClass наследуется от QMainWindow, а другой от QWidget.

Вот код, который я написал до сих пор:

<code>
#include <iostream>
#include "MyWidgetClass.hpp"
#include "MyMainWindowClass.hpp"
#include "ui_MyMainWindowClassUi.h"</p>

<p>MyMainWindowClass::MyMainWindowClass(QWidget *parent) :
    QMainWindow(parent),
    m_ui(new Ui::MyMainWindowClassUi)
{
    m_ui->setupUi(this);
    initConnect();
}</p>

<p>void    MyMainWindowClass::initConnect()
{
  QObject::connect(m_ui->SomeBtn,
                   SIGNAL(clicked()),
                   this,
                   SLOT(SomeBtnClicked()));
  // Some other QObject::connect calls
  return;
}</p>

<p>void    MyMainWindowClass::SomeBtnClicked()
{
  std::cout << "Some Btn has been clicked" << std::endl;
  this->setEnabled(false);
  MyWidgetClass mwc(this);
  mwc.show();
  return;
}

Это вызывает Ctor и Dtor из MyWidgetClass, отключает MyMainWindowClassUi, но не показывает мой другой графический интерфейс. Чего мне не хватает, чтобы при нажатии на кнопку отображалось окно?

1 Ответ

3 голосов
/ 11 апреля 2010

Попробуйте это вместо вашего SomeBtnClicked метода:

MyWidgetClass *mwc;

void MyMainWindowClass::SomeBtnClicked()
{
    std::cout << "Some Btn has been clicked" << std::endl;
    this->setEnabled(false);

    if (!mwc)
        mwc = new MyWidgetClass(this);
    mwc->show();
    mwc->raise();
    mwc->setActiveWindow();  // Qt 4: activateWindow()

    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...