https://pastebin.com/gcr50KNq

Gdy dochodzi do linijki -> table_model = new QSqlTableModel(this, mydb)
Debuger wyrzuca:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is MainWindow(0x86d68ffaa0), parent's thread is QThread(0x1a15e3c62c0), current thread is QThread(0x1a15e3cb1f0)
Wątek 0x1b64 zakończył działanie z kodem 0 (0x0).

Co robię źle?
#naukaprogramowania #programowanie #qt #cpp #glupiepytaniametoksyfenidyny
@Metoksyfenidyna9: Po prostu robisz to new w innym wątku niż ten, w którym stworzyłeś this, którego przekazujesz jako rodzic do QSqlTableModel. Ponieważ QObject potrzebuje być na jakiś wątku, by odbierać zakolejkowane sygnały, przypisuje mu się obecne. Jednak ze względu na sposób usuwania dzieci rodziców, wątek rodzica musi być taki sam. U ciebie widocznie okno tworzysz w innym wątku niż główny wątek GUI.
Hej bawię się w GUI QT i mam taką sytuację z pytankiem!

Posiadam dwa buttony (ui.addButton/ui.sumButton), chciałbym aby obydwa kierowały do tej samej funkcji getAndshowResult() jednakże z tym, aby każde z nich dodawało "od siebie" argument najlepiej znak '+'/'-' i na podstawie tego znaku wywoływana była dalsza część funkcji. Jednakże żaden ze sposobów mi nie zadziałał.

Pomyślałem o takim rozwiązaniu -> https://pastebin.com/Uq1vZXRg ale NIE działa (cptn Obvious), jakieś pomysły?

#glupiepytaniametoksyfenidyny #cpp #
@Metoksyfenidyna9: Zazwyczaj nie musisz tego robić, bo się automatycznie usuwać, gdy jeden z obiektów połączenia się usunie. Tutaj ui->sumButton raczej nie będzie obsługiwać wciśnięć dłużej niż życie this, czyli zgaduje, że twojego okna.
Jednak gdy masz w lambdzie jakiś inny obiekt, który zostanie zniszczony, to trzeba usunać też połączenie:

QMetaObject::Connection connection = connect(ui.sumButton, &QPushButton::clicked,

                                       [my_qobject]() { my_qobject->getAndshowResult(z));});
connect(my_qobject, &QObject::destroyed, [connection]() { QObject::disconnect( connection ); });

Pamiętaj też że wywolnie
delete myqobject
Macie coś dobrego do nauki tworzenia projektu?
W sensie, mam pomysł super. Jednak szukam, jakiejś pomocy odnoście "projektowania" tego pomysłu (schematy, UML, dokumentacja). Jest coś fajnego co pomoże mi to wszystko ogarnąć od początku do końca (przeprowadzi za rączkę - najlepiej, albo da pewne wytyczne).
Mocno też zależy mi na poradach odnośnie projektowania tego mojego pomysłu (jak za to zabrać się, na co zwracać uwagę, itp.) anyone?
( ͡° ͜ʖ
Hej, wiem że pewnie dla was debilne pytanie, ale...

Zakładając że chcialbym, aby mój projekt w C++ korzystał z uroków bazy danych (nie ładował całego pliku, uproszczone wyciąganie danych itp.) to jak wyglądają moje opcje? Na myśl przychodzą mi tylko takie:

1. Server bazodanowy w necie i łączenie do niego
2. Instalacja serwera bazodanowego wraz z programem, aby ten mógł z niego korzystać?

Jest jeszcze jakaś opcja?

Dodatkowe pytanie:

Do konkretnych projektów
@marcineckixx: Jeździsz na jakieś konferencje gdzie słuchasz o nowościach, template metaprogramming, rozmyślasz nad jakimiś abstrakcjami, w pracy utrzymujesz jakiś system napisany w C++ 98 (albo jeszcze lepiej, w części C++ wspieranej przez jakiś dziki kompilator z disclaimerami w stylu "nie używamy STL, bo nasze środowisko ma ch** implementację") przez programistów C którzy przeczytali jakąś książkę o obiektowości, a zarabiasz mniej niż gdybyś walił CRUDy w Springu ( ͡° ͜ʖ
@Metoksyfenidyna9: Ten 3 sposób jest prostszy w wytłumaczeniu. Działa tylko przy założeniu, że tablica jest posortowana. Bierzesz pierwszy i ostatni element, jeżeli suma jest za duża, to odrzucasz ten większy na końcu, jeżeli za mała, to ten mniejszy na początku i tak lecisz, dopóki nie znajdziesz szukanej sumy lub nie zostanie ci jeden element.
Co do 2 to musisz wiedzieć, co to jest wyszukiwanie binarne. Więc bierzesz pierwszy element i szukasz
Hej, takie szybkie pytanko ;)
Kombinuję w jaki sposób mogę użyć funktora aby policzyć ilość liter w stringu. Utknąłem w takim momencie. Ktoś pomoże, rozjaśni czy dobrze kombinuję?

Wiem, że ostatni argument count_if powinien być wywołany inaczej to na pewno.
W jaki sposób ma być wywołany, i czy jako argument ma może przyjmować zadeklarowany wskaźnik do iteratora?

https://pastebin.com/c67RcKwN
#naukaprogramowania #cpp #glupiepytaniametoksyfenidyny
@Metoksyfenidyna9: Stwórz obiekt tej struktury ischar i ten obiekt podaj jako ostatni argument w count_if. Poza tym w tych wszystkich funkcjach z argument powinno się rzutować na unsigned char żeby uniknąć UB.
cpp.sh/2ubfbl


@Metoksyfenidyna9: elementy w std::set są posortowane według operatora<, w przypadku std::string jest to porządek leksykograficzny https://pl.wikipedia.org/wiki/Porz%C4%85dek_leksykograficzny . Set przydaję się, gdy nie chcesz duplikatów oraz, gdy nie obchodzi cię porządek w jakim elementy są wkładane. Inne zastosowana to szybkie wyszukanie elementu/sprawdzenie czy istnieje (log N, w zwykłym nieposortowanym wektorze jest to N). Inny ficzer: set posiada metodę count, która mówi ile razy wsadziłeś ten sam element, co może byc przydatne,
set posiada metodę count, która mówi ile razy wsadziłeś ten sam element, co może byc przydatne, jak chcesz licznik


@Saly: objection, w secie count zwraca tylko 1(jak jest) i 0(jak nie ma)

dla takiego licznika używa się std::map z operatorem []++
@JakTamCoTam: tak chcę bez inicjalizacji nowego obiektu Konto, móc wypisać imie i nazwisko wlasciciela KOnto Plus. Czy to możliwe w ogóle przy takim zapisie? , bo nie chce mi się tyle scrollować do nauki

//edit
Zmienić zmienne klasy bazowej z private na protected?
@kebab-case: Typowy błąd programisty w pierwszej fazie fascynacji wzorcami obiektowymi. Sranie wszędzie abstrakcyjnymi fabrykami i strategiami. A potem i tak się okazuje, że to, co miało się zmieniać razem - zmienia się oddzielnie, a to, co miało być od siebie niezależne - musi teraz być zależne. I zamiast skasować 10-linijkowego if-then-else, którego możesz przeczytać i zrozumieć w całości w 5 minut, i napisać innego, którego też możesz zrozumieć w całości w
@kebab-case: widzisz, to są problemy do rozwiązania. Niektóre z nich wymagają wzorców. Większość nie :)

Np. sensowna implementacja sortowania nie wymaga wzorca strategii, tylko lambd (funkcji anonimowych, domknięć, jak zwał, tak zwał). Nawet powiedziałbym, że stosowanie wzorca strategii w tym przypadku to błąd.

Wzorzec strategii to zwykle rozwiązanie problemu domknięć w języku programowania. Ale w c++ już są, więc wzorzec strategii powoli odchodzi do lamusa.

Fabryka abstrakcyjna to kolejny przykład -
Jak co wieczór #glupiepytaniametoksyfenidyny ( ͡° ͜ʖ ͡°)

Chciałbym przypisać wskaźnik do adresu podanego przeze mnie. Gdzie mogę znaleźć/ustawić zakres pamięci na jakiej ten program będzie operował? Konkretnie chodzi mi o podgląd na żywca w debugerze jak ten kod będzie śmigać ( ͡° ͜ʖ ͡°)

int *loca;
loca = reinterpret_cast(0xTuWpisacAdres);
std::cout << *loca << " " << loca << std::endl;
delete loca;`

#naukaprogramowania #
Jaka jest różnica dla konstruktora klasy w C++ czy przekaże mu dane przez referencję czy przez wartość?


@Metoksyfenidyna9: taka sama jak w każdej innej funkcji lub metodzie ¯\_(ツ)_/¯

Czy działanie destruktora opisuję tylko gdy stricte zwracam się w konstruktorze o przydzielenie pamięci chociażby przez new?


@Metoksyfenidyna9: w destruktorze klasa powinna zwolnić zasoby które wcześniej pozyskała, czyli np.: zaalokowaną pamięć, otworzone pliki, zablokowane mutexy itd. To oczywiście kwestia konwencji, możesz tam
Czym mogę podglądnąć "na żywo" zmiany zachodzące w pamięci? Przy inicjalizacji itp zmiennych, takie podstawy.


@Metoksyfenidyna9: najprosciej chyba dowolnym debuggerem. Nic innego nie przychodzi mi do glowy
@Metoksyfenidyna9: Ach, czyli instance.

Różnica jest prosta - konkretyzacja to utworzenie funkcji lub typu odpowiadającego zdefiniowanym metatypom. Jest to najczęściej automatyczne i dokonuje tego kompilator, ale można to wymusić jak w przypadku w książce. Dla przykładu, kompilowanie dużych bibliotek jest szablonów jest czasochłonne i w bibliotekach numerycznych dokonuje się konkretyzacji wprost dla typów zmiennoprzecinkowych, gdyż nikt nigdy nie będzie stosować tego dla innych typów.
Krótko: z szablonu tworzysz nowy typ
@Metoksyfenidyna9:
1. w przypadku double, lepiej zawsze przez wartość. ale jak masz jakiś duży obiekt, to lepiej przez referencję dowiadywać się o jego stanie (const Object& obj), bo wtedy nie zachodzi potrzeba kopiowania go całego. chyba, że chcesz jakoś zaznaczyć, że ten double może być opcjonalny(chociaż pointer to nie najlepszy pomysł).

2. struct to to samo co class, tylko ma domyślnie publiczne dziedziczenie i domyślny publiczny dostęp do składowych