Qt -- Klasa pochodna po QListWidgetItem

Qt -- Klasa pochodna po QListWidgetItem
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:55
0

Potrzebuje obiekty, które będę mógł wyświetlić w QListWidget.

Najlepszym sposobem powinno być stworzenie klasy dziedziczącej po QListWidgetItem rozszerzając ją o pola właściwe dla danego typu maszyny (pasażerski/transportowy) . Potrzebne mi są jako obiekty maszyn, które obsługuje program lotniska/pasu startowego.

Kopiuj
#ifndef CPASAZERSKI_H
#define CPASAZERSKI_H
#include "csamolot.h"
#include <QListWidgetItem>
#include <QString>


class CPasazerski : public QListWidgetItem
{
public:
    CPasazerski(QListWidget*);
    CPasazerski(const QString&, QListWidget*, int type);

private:
    qint32 iloscPasazerow;
    QString miejsceDocelowe;
    QString liniaLotnicza;
};

#endif // CPASAZERSKI_H 
Kopiuj
#include "cpasazerski.h"
#include <QListWidgetItem>

CPasazerski::CPasazerski(QListWidget * parent = 0) : QListWidgetItem(parent)
{}

CPasazerski::CPasazerski(const QString &text, QListWidget *parent = 0, int type = Type) : QListWidgetItem(&text)
{}
 

Mam problem już z samymi konstruktorami. Nie mogę stworzyć obiektu np:. "CPasazerski samolot("luthansa")" wyskakuje że nie ma matching function, chociaż tak na oko jest przecież QString &text.

Czego tu brakuje?

_13th_Dragon
Spróbuj: CPasazerski samolot(QString("luthansa"))
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:55
0

tak wyglądają konstruktory dziedziczonej klasy QListWidgetItem:

Kopiuj
QListWidgetItem(QListWidget * parent = 0, int type = Type)
QListWidgetItem(const QString & text, QListWidget * parent = 0, int type = Type) 
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
1

Problemem nie jest przypadkiem to, że próbujesz przekazać adres tutaj w konstruktorze klasy bazowej zamiast samej zmiennej CPasazerski::CPasazerski(const QString &text, QListWidget *parent = 0, int type = Type) : QListWidgetItem(&text) ? Powinno być bez & (konstruktor bazowy).


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
edytowany 3x, ostatnio: xeo545x39
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:55
0

faktycznie chodzi o to. Choć wcześniej próbowałem już bez tego ampersanda, ale musiałem mieć jeszcze inny błąd gdzie indziej.

Natomiast pojawiło się teraz takie ustrojstwo:

Kopiuj
błąd:duplicate section `.rdata$_ZTI11CPasazerski[__ZTI11CPasazerski]' has different size 

jak kliknę w ten błąd to otwiera mi plik cpasazerski.o a w nim wszystko zapisane cyferkami.. :?

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Czy to się tylko pojawia gdy zmieniasz z referencji na zmienną?


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:55
0

No to już jest przesada. Po usunięciu ampersanda skompilowało się z tym błędem co wkleiłem. Spróbowałem zastosować się do rady Dragona i dopisałem Qstring("luthansa") co niestety spowodowało powrót do tego samego co wcześniej. Ale co najlepsze, kiedy cofnąłem tą zmianę, (czyli wersja tylko bez ampersana) to teraz pojawia się

Kopiuj
błąd:no matching function for call to 'CPasazerski::CPasazerski(const char [8])' 

, którego wcześniej nie było!

I teraz to już nie wiem.

Ale na trzeźwo, poprawka Dragona musi być słuszna, bo same cudzysłowy to faktycznie jest char[], chociaż z drugiej strony konstruktor konwertujący chyba powinien zadziałać w tym momencie? No ale ta postać:

Kopiuj
CPasazerski samolot(QString("samolot"));

wywala : no matching function for call to 'CPasazerski::CPasazerski(QString)' , tak więc pytanie jest, jak zrobić żeby przekazać tego QStringa w formie referencji??

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
1

Problem jest śmiesznie prosty. Wartości domyślne funkcji powinny się znajdować w pliku nagłówkowym, a nie w pliku źródłowym.
Twój plik nagłówkowy powinien wyglądać tak:

Kopiuj
#ifndef CPASAZERSKI_H
#define CPASAZERSKI_H

#include <QListWidgetItem>
 
class CPasazerski : public QListWidgetItem
{
public:
    explicit CPasazerski(QListWidget *parent=0); //  tu musi  być słowo explicit
    CPasazerski(const QString&, int type = 0, QListWidget* parent=0); // wlasciciel powinien byc na koncu
 
private:
    qint32 iloscPasazerow;
    QString miejsceDocelowe;
    QString liniaLotnicza;
};
 
#endif // CPASAZERSKI_H 

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
N0
Ale dlaczego właściciel na końcu? W dokumentacji, type jest ostatni, a parent w środku) <QListWidgetItem(const QString & text, QListWidget * parent = 0, int type = Type)>
MasterBLB
Ścisłego rygoru na to nie ma,ale ot w Qt utarła się taka konwencja,że parent jest ostatnim parametrem konstruktora.
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:55
0

A podpowiecie mi, gdzie umieścić główną pętle programu, nie GUI tylko własną pętlę programu? Konstruktor obiektu MainWindow to chyba nie jest to miejsce?

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Jeżeli własną która coś tam ma robić innego to w oddzielnym wątku.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.