Argumenty wenątrz konstruktora <not available>

0

Witam serdecznie, piszę mały projekt w Qt i napotkałem pewien problem, mianowicie:

posiadam pewną klasę "MainItem", w której implementuję między innymi dwie metody niemodyfikujące klasy oraz zwracające stałe referencje do pól tejże klasy:

class MainItem {
    public:
        (...)
        const QDateTime& from() const { return dtFrom; }
        const QDateTime& to() const { return dtTo; }
    private:
        QDateTime dtFrom;
        QDateTime dtTo;
        (...)
};

klasa ta jest dużo bardziej rozbudowana jednak pozostałe jej składowe nie mają wpływu w tej kwestii.

Pobieram obiekt powyższej klasy z QTableView (obecnie zaznaczony w tabeli) przy pomocy napisanej przeze mnie metody.

MainItem* selectedRow() const;

Działa ona dobrze gdyż używam jej bezproblemowo w innych miejscach w programie, więc nie będę podawał jej implementacji.

Próbuję utworzyć QDialog'a, który posiada między innymi konstruktor przedstawiony poniżej:

explicit HoursForm(const QDateTime&, const QDateTime&, QWidget *parent = 0);

Następnie tworzę go w pewnej metodzie (głównej klasy programu) i wywołuje tenże konstruktor:

void MainWindow::_slEdit()
{
    MainItem* item = mainItemTableView->selectedRow();
    Q_CHECK_PTR(item);

    HoursForm hoursForm(item->from(), item->to(), this);
    (...)
}

Jednak argumenty przekazane do konstruktora (czyli item->from(), oraz item->to()) są w nim "niedostępne"(debugger: <not available="available">) co w praktyce wygląda tak, że przechowują one jakieś śmieciowe dane i nie mam pojęcia dlaczego. Sprawdzałem przy pomocy debuggera dołączonego do QtCreatora zawartość tych obiektów i do momentu utworzenia "HoursForm" dokładniej jeszcze przed nim wskaźnik "item" oraz elementy na jakie wskazuje przechowują prawidłowe dane, natomiast wewnątrz konstruktora dane te nie są już prawidłowe. Czy mógłbym w związku z tym prosić was o podanie możliwych powodów takiego zachowania? Za wszelkie odpowiedzi będę bardzo wdzięczny.

pozdrawiam.

0

rozumiem, że nie masz problemu z samym kodem, ale z debuggerem.

0
MarekR22 napisał(a)

rozumiem, że nie masz problemu z samym kodem, ale z debuggerem.

Podczas testowania programu również to występuje. Dostaje Segmentation fault'a - przez te argumenty jak mniemam.

0

A użycie tych funkcji gdzieś indziej także powoduje błąd?Bo to są jakieś kurde czary,sprawdzałem Twój kod na VS2003 z integratorem i działa bez dąsów

0

Coś musi być z tym konstruktorem, bo posiadam w tej klasie (po QDialog) inny konstruktor jeszcze:

explicit HoursForm(QWidget *parent = 0, const QDate& = QDate());

i wywołuje go tak (w tej samej metodzie co wyżej, zmieniłem po prostu wcześniejsze wywołanie:

    
    MainItem* item = mainItemTableView->selectedRow();
    Q_CHECK_PTR(item);

    HoursForm hoursForm(this, item->from().date());
   // HoursForm hoursForm(item->from(), item->to(), this);
    hoursForm.exec();

zaznaczam ten sam item w QTableView i wszystko działa. Próbowałem również przekazać zamiast "item->from()", "item->to()" i również działa. Nie mam pojęcia dlaczego w tym wypadku ten obiekt jest poprawnie przekazywany, a w drugim mam problem :] No trudno pokombinuje jeszcze, jak dojdę do tego to napisze. Dzięki :)

0

nie wierzę... wyczyściłem projekt, przebudowałem na nowo i działa. Nie mam pojęcia dlaczego wcześniej nie śmigało, może wcześniejsze próby coś napsociły i od pewnego momentu kompilowało mi nie to co chciałem? Nie wiem. W każdym razie dziękuje za zainteresowania i odpowiedzi :)
pozdrawiam serdecznie.

0

Jeśli piszesz pod Qt Creatorem, to mogło się zdarzyć, że Twojemu IDE coś się pochrzaniło z shadow buildem -- Qt Creator ostatnio ma często z tym problemy.

0

korzystałem z QtCreatora i rzeczywiście budowałem w osobnym katalogu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1