LINUX.ORG.RU

[Qt] Родительские/дочерние widget-ы и отношения между ними

 


0

0

Скажите, а в чём для Qt эти отношения проявляются? Делаю так:

QApplication app(argc,argv);

QWidget wdg1;

wdg1.resize(200,200);

wdg1.setWindowTitle("Qt parent window");

wdg1.show();

QWidget wdg2(&wdg1,Qt::Window);

wdg2.resize(800,600);

wdg2.setWindowTitle("Qt child window");

wdg2.show();

return app.exec();

а при закрытии родительского окна дочернее продолжает висеть. В документации написано, что "The new widget is deleted when its parent is deleted". Или-же закрытие окна в этом примере не будет означать его уничтожение?

Qt::Window

0x00000001

Indicates that the widget is a window, usually with a window system frame and a title bar, irrespective of whether the widget has a parent or not.

--

QDialog and QMainWindow widgets are by default windows, even if a parent widget is specified in the constructor. This behavior is specified by the Qt::Window flag.

alex_custov ★★★★★
()
Ответ на: комментарий от kitov

куча тут ни при чём, проблема во флаге Qt::Window :

When a widget accepts the close event, it is hidden (and destroyed if 
it was created with the Qt::WA_DeleteOnClose flag)

#include <QApplication>
#include <QWidget>
#include <QLabel>

class S : public QLabel
{
    public:
        S(QWidget *p) : QLabel("Label", p)
        {
            qDebug("+S");
        }

        ~S()
        {
            qDebug("-S");
        }
};

int main(int argc, char ** argv)
{
    QApplication app(argc,argv);

    QWidget wdg1;

    wdg1.resize(200,200);
    wdg1.setWindowTitle("Qt parent window");

    S wdg2(&wdg1);

    wdg1.show();

    int r = app.exec();

    qDebug("Event loop stopped");

    return r;
}

# make
# ./q
+S
Event loop stopped
-S

alex_custov ★★★★★
()

Спасибо всем, вроде понятно стало.

one_more_hokum ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.