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

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

Форум на CrossPlatform.RU _ Qt Общие вопросы _ QMdiArea. Не понятное поведение

Автор: MishaUA 10.3.2014, 12:23

h:

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QMdiArea    *ar;
    void contextMenuEvent(QContextMenuEvent* pe) {add();}

public slots:
    void add();
private:
    Ui::MainWindow *ui;
};

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

    ar = new QMdiArea(this);
    setCentralWidget(ar);

    add();

    QTimer    *t    = new QTimer(this);
    connect(t, SIGNAL(timeout()), this, SLOT(add()));
    t->start(100);
}

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

void MainWindow::add()
{
    qDebug("add");
    ar->addSubWindow(new QWidget());
}

Алгоритм должен быть такой: При запуске создается Mdi, после чего на него добавляется окно, так же, окно должно создаваться по таймеру и при левом клике, но реально создается только при запуске.
Где мой косяк?
PS: Qt 5.2.1

Автор: MishaUA 10.3.2014, 23:35

Нужно делать так:

    QWidget *child = new QWidget();
    ar->addSubWindow(child);

    child->show();

Автор: Litkevich Yuriy 12.3.2014, 4:37

Цитата(MishaUA @ 11.3.2014, 1:35) *
 child->show();
к стати говоря, чтобы не было глюков, лучше манипуляции делать через экземпляр QMdiSubwindow, т.е.:

QMdiSubWindow *sub = ar->addSubWindow(child);
sub->show(); // командуем субокну, а не виджету


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