Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с конструктором при создании формы
Форум на CrossPlatform.RU > Разработка > С\С++
Delphist
Я хочу в своем классе создать два конструктора:
/******MyClass.h********/

class MyClass : public QMainWindow
{
    Q_OBJECT

public:
    MyClass(QWidget *parent = 0, Qt::WFlags flags = 0);                             //конструктор №1
    MyClass(CSharedV &v, QWidget *parent = 0, Qt::WFlags flags = 0);  //конструктор №2
...
}

    
/******MyClass.cpp******/

MyClass::MyClass(QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
{
    sharedDataModel = new SharedDataModel(this);
    ui.setupUi(this);    
    ui.treeView->setModel(sharedDataModel);
    ui.treeView->header()->setResizeMode(0, QHeaderView::Stretch);
    ui.treeView->header()->setResizeMode(1, QHeaderView::Stretch);
}

MyClass::MyClass(CSharedV &v, QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
{
     MyClass(parent, flags);
    setShared(v);
}


Прикол в том что если я вызываю конструктор№2, то почему форма создается без
дерева, почему это происходи и как сделать чтобы все нормально заработало?
Litkevich Yuriy
это скорее вопрос по С++
Вынеси всю инициализацию в отдельную функцию:
void MyClass::Init()
{
    sharedDataModel = new SharedDataModel(this);
    ui.setupUi(this);    
    ui.treeView->setModel(sharedDataModel);
    ui.treeView->header()->setResizeMode(0, QHeaderView::Stretch);
    ui.treeView->header()->setResizeMode(1, QHeaderView::Stretch);
}

и ее вызывай в обоих кострукторах
Delphist
Цитата(Litkevich Yuriy @ 14.8.2008, 9:57) *
это скорее вопрос по С++
Вынеси всю инициализацию в отдельную функцию:

А почему нельзя так как я привел, у нас Delphi без проблем это делает, а тут что за ассемблер
zamnach
Цитата(Delphist @ 14.8.2008, 10:46) *
Я хочу в своем классе создать два конструктора:
/******MyClass.cpp******/
MyClass::MyClass(CSharedV &v, QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
{
     MyClass(parent, flags);
    setShared(v);
}


Присоединюсь к Юрию и добавлю, что во втором конструкторе создается экземпляр класса MyClass (с помощью конструктора№1).
По выходу из конструктора №2 этот экземпляр благополучно прибивается.
AD
Цитата(Delphist @ 14.8.2008, 11:05) *
А почему нельзя так как я привел, у нас Delphi без проблем это делает, а тут что за ассемблер

Насколько я знаю: в С++ в конструкторе можно вызывать конструктор предка, а не другой свой же конструктор. Поэтому следует сделать, как описал Litkevich Yuriy
Litkevich Yuriy
Цитата(Delphist @ 14.8.2008, 14:05) *
у нас Delphi без проблем это делает

А ты не путаешь конструктор с обработчиком события типа OnCreate ?
void*
Delphist, учи матчасть :)
тебе все правильно объяснили zamnach и AD
Andrew Selivanov
Обобщим? :)
1) Конструктор это не функция, его нельзя вызвать.
2) Это ограничение есть в C++, в Java его нет (можно использовать такие штуки как this(), super() )
3) Может быть ограничение уберут в upcoming стандарте.

А вообще это вопрос из замечательного FAQ:
http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3
Litkevich Yuriy
на русском http://quirks.chat.ru/cpp/faq/#s10p3
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.