Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ConConovaloff от Март 07, 2013, 03:59



Название: [решено] Инициализация виджетов не указателем
Отправлено: ConConovaloff от Март 07, 2013, 03:59
Добрый день.

Я только учу C++, но думал, что между инициализацией объекта в виде переменной или указателя не имеет отличий.
На деле, у меня не получается работать с виджетами инициализированными переменной.

К примеру, в приложение ниже будет показана только кнопка с надписью Text2.
Неужели есть разница как инициализировать? Или я просто допустил ошибку?

main.cpp
Код:
#include <QApplication>
#include "testwindow.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TestWindow win;
    win.show();
    return a.exec();
}
testwindow.h
Код:
#ifndef TESTWINDOW_H
#define TESTWINDOW_H

#include <QWidget>

class TestWindow : public QWidget
{
    Q_OBJECT
public:
    explicit TestWindow(QWidget *parent = 0);
};

#endif // TESTWINDOW_H

testwindow.cpp
Код:
#include <QtGui>
#include "testwindow.h"
#include <typeinfo>

// для вывода
#define PRINT_NAME(x) qDebug() << #x << " - " << typeid(x).name() << " - " << x


TestWindow::TestWindow(QWidget *parent) :
    QWidget(parent)
{
    QHBoxLayout *mainLayout = new QHBoxLayout;
    QPushButton pushButtonExample("Text");
    QPushButton *pushButtonExample2 = new QPushButton("Text2");

    PRINT_NAME(&pushButtonExample);
    PRINT_NAME(pushButtonExample2);

    mainLayout->addWidget(&pushButtonExample);
    mainLayout->addWidget(pushButtonExample2);
    setLayout(mainLayout);
}

вывод
&pushButtonExample  -  P11QPushButton  -  QPushButton(0xbfc7d240)
pushButtonExample2  -  P11QPushButton  -  QPushButton(0x9a60b58)


Название: Re: Инициализация виджетов не указателем
Отправлено: carrygun от Март 07, 2013, 05:17
При выходе из конструктора кнопка, объявленная на стеке (та, что "Text"), будет уничтожена.


Название: Re: Инициализация виджетов не указателем
Отправлено: ConConovaloff от Март 07, 2013, 05:26
При выходе из конструктора кнопка, объявленная на стеке (та, что "Text"), будет уничтожена.

Спасибо.
Извиняюсь, за невнимательность.