crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Создание простого окнаа с кнопкой.
Antrix
  опции профиля:
сообщение 28.2.2009, 12:49
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 18
Регистрация: 25.9.2008
Пользователь №: 300

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




Репутация:   0  


Возможно глупый вопрос, НО почему так не отображается кнопка:

Раскрывающийся текст
Test.cpp
#include <QMainWindow>

class Test : public QMainWindow {
    Q_OBJECT
public:
    Test(QWidget* parent = 0);
    void cr();
};


main.cpp
#include <QtGui> 
#include "Test.h"

Test::Test(QWidget* parent) : QMainWindow(parent) {
}

void Test::cr() {
    QPushButton b("TEXT", this);
    b.show();
}

int main(int argc, char *argv[])  {
    QApplication app(argc, argv);
    Test t;
    t.cr();
    t.show();
    return app.exec();
}



А вот если так писать:
Раскрывающийся текст
void Test::cr() {
    QPushButton* b = new QPushButton("TEXT", this);
    b->show();
}


То все работает пучком.
Неужели в методах класса виджеты нужно создавать только через указатель?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 28.2.2009, 12:58
Сообщение #2


Дмитрий Трошин
****

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

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




Репутация:   6  


Цитата
void Test::cr() {
    QPushButton b("TEXT", this);
    b.show();
}

ты создаешь кнопку в стеке, а после выхода из функции она у тебя благополучно тут же и умирает.
а тут:
void Test::cr() {
    QPushButton* b = new QPushButton("TEXT", this);
    b->show();
}

живет, пока жив предок (поскольку передаешь парента в конструкторе, без этого была бы утечка...).
Кури области видимости переменных.

Сообщение отредактировал trdm - 28.2.2009, 14:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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