crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QMdiArea и закрытие по close
maint
  опции профиля:
сообщение 22.3.2011, 16:06
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


При переходе с QWorkspace обнаружил неприятную штуку. Если в виджете вызвать close(), то виджет закрывается, а subwindow остается. В какую сторону рыть, не подскажете ?
в хедере
QMdiArea *mdiArea;

Вызов
    fWidget *w;
    w = new fWidget;
    mdiArea->addSubWindow(w);
    w->setAttribute(Qt::WA_DeleteOnClose);
    w->show();


Сообщение отредактировал maint - 22.3.2011, 16:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 22.3.2011, 16:26
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


ну, если QWorkspace не родитель subwindow, то автоматического закрытия subwindow не жди
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 22.3.2011, 16:28
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(abc @ 22.3.2011, 21:26) *
ну, если QWorkspace не родитель subwindow, то автоматического закрытия subwindow не жди

я перешел от QWorkspace на QMdiAria. В workspace у меня все нормально было
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 22.3.2011, 16:46
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


не знаю, попробовал - закрывается

w->show();
тебе не нужно, покажется MdiArea, покажется и сабвиндоу

Сообщение отредактировал abc - 22.3.2011, 16:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 22.3.2011, 16:55
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(abc @ 22.3.2011, 21:46) *
не знаю, попробовал - закрывается

можно код глянуть ? Я уже чистый пример создал. Нифига.
namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QMdiArea *mdiArea;


private slots:
    void on_Exit_triggered();

    void on_action_MDI_triggered();

private:
    Ui::MainWindow *ui;
};

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "fwidget.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    resize(600, 600);
    mdiArea = new QMdiArea;
    mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setCentralWidget(mdiArea);
}

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

void MainWindow::on_Exit_triggered()
{
    close();
}

void MainWindow::on_action_MDI_triggered()
{
    fWidget *w;
    w = new fWidget;
    mdiArea->addSubWindow(w);
    w->setAttribute(Qt::WA_DeleteOnClose);
    w->show();
}

сам виджет
#include "fwidget.h"
#include "ui_fwidget.h"

fWidget::fWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::fWidget)
{
    ui->setupUi(this);
    this->setMinimumSize(350, 350);
}

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

void fWidget::on_pushButton_clicked()
{
    close();
}

негде запутаться !

Цитата(abc @ 22.3.2011, 21:46) *
не знаю, попробовал - закрывается

w->show();
тебе не нужно, покажется MdiArea, покажется и сабвиндоу

не покажется. Это вызов виджета по кнопке

Сообщение отредактировал maint - 22.3.2011, 16:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 22.3.2011, 17:01
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


ты зыкрываешь мэйнвиндоу и остаётся эта мдиэрия? или именно сабвиндоу?

mdiArea = new QMdiArea;

здесь точно не нужно так?

mdiArea = new QMdiArea(this);


проверил, не нужно...пишу быстрее мысли)

Сообщение отредактировал abc - 22.3.2011, 17:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 22.3.2011, 17:11
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(abc @ 22.3.2011, 22:01) *
ты зыкрываешь мэйнвиндоу и остаётся эта мдиэрия? или именно сабвиндоу?

mdiArea = new QMdiArea;

здесь точно не нужно так?

mdiArea = new QMdiArea(this);


проверил, не нужно...пишу быстрее мысли)

subwindow остается, хотя виджет с него удаляется
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 22.3.2011, 21:54
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


удаляя виджет, не удаляешь сабвиндоу, которое является его родителем
вместо close():
this->parent()->deleteLater();


Сообщение отредактировал abc - 22.3.2011, 22:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 22.3.2011, 22:58
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(abc @ 23.3.2011, 2:54) *
удаляя виджет, не удаляешь сабвиндоу, которое является его родителем
вместо close():
this->parent()->deleteLater();

более чем благодарен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 13:38