klasa na bazie QPushButton

klasa na bazie QPushButton
Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

witam, potrzebowalem podczas tworzenia przyciskow aby kazdy mial dodatkowy atrybut true/false. Postanowiłem że utworze nowa klase (przycisk) na bazie QPushButton i dodam jej zmienna bool i bedzie dzialac. W naglowku mam:

Kopiuj
 
private:
    przycisk* buton;

w pliku .cpp mam:

Kopiuj
   buton = new przycisk(); 

błędy podczas kompilacji:

Kopiuj
In constructor 'przycisk::przycisk(QObject*)':
invalid conversion from 'QObject*' to 'QWidget*'
initializing argument 1 of 'QPushButton::QPushButton(QWidget*)'
 

z góry dzięki za odpowiedź

SZ
  • Rejestracja: dni
  • Ostatnio: dni
0

Pokarz definicję konstruktor klasa przycisk.

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

przycisk.cpp

Kopiuj
 #include "przycisk.h"

przycisk::przycisk(QObject *parent) :
    QPushButton(parent)
{

}

przycisk.h

Kopiuj
#ifndef PRZYCISK_H
#define PRZYCISK_H

#include <QPushButton>

class przycisk : public QPushButton
{
    Q_OBJECT
public:
    explicit przycisk(QObject *parent = 0);

signals:

public slots:

};

#endif // PRZYCISK_H
 
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

parametrem konstruktora powinien być QWidget a nie QObject.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Ja tylko od siebie podpowiem,że Ci się przydać Bracie zainteresować QObject::setProperty,tak na przyszłość ;)

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

A możesz konkretniej wyjaśnić? Bo przeglądnięciu dokumentacji nie wiem jak by się to u mnie przydało ;)

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Przydaje się do dodawania nowych pól do klas pochodzących od QObject w trakcie działania programu.W Twoim wypadku będzie to nowe property boolowskie dodawane do QPushButtona.
A w dokumentacji szukaj Qt's property system,tam jest pełen opis featursa

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

Ok dzięki wielkie, a czy program jest wydajniejszy jeśli użyję tego setProperty? czy nie ma różnicy czy ręcznie dodam do klasy?

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Zależy co przez to rozumiesz-jeśli masz na myśli szybkość działania,to nie.Jeśli łatwość użycia,to wyobraź sobie sytuację,że tego swojego boola chciałbyś dodać do jakiegoś wypasionego pushButtona który ktoś inny zrobił,ale nie udostępnił źródeł,albo do całkiem innego widgeta.
W takiej sytuacji dobrze jest wiedzieć,że nie trzeba zaraz koniecznie dziedziczyć i dodawać swoją zawartość,tylko można skorzystać z alternatywy jaką dają dynamiczne q_property.
No i to co napisałem wyżej,najlepsze w tej sztuczce jest to,że działa w trakcie działania programu ;)

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

ok stary dzięki wielkie za to wyjaśnienie. Nie chce zakładać nowego tematu więc zapytam tutaj, mam tablice 5x5 obiektów typu przycisk, każdy ładnie ułożony na formie, wszystko pięknie. Tylko jak zrobić żeby po naciśnięciu był uruchamiany jeden slot który sprawdza tą wartość bool danego buttona, jeśli chodzi o połączenie to domyślam się że trzeba to connectami wszystkie przyciski do jednego slota, ale jak w slocie sprawdzić który element tej tablicy był naciśnięty?

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Są na to 2 sposoby-QSignalMapper lub (prostszy,który ja stosuję) nadawanie każdemu z buttonów unikatowej nazwy i w slocie z podpiętymi sygnałami od kilku obiektów używanie konstrukcji typu:

Kopiuj
QString s=sender()->objectName();
if(s=="someIdentifier") doSomething;
else if(s=="otherIdentifer") doSomething;

Dla zupełnego wypasu możesz używać indentyfikatorów zawierajacych liczbę,nastęnie używając QString::toInt zmieniać go na liczbę i zamiast drabinki ifów dać switcha

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

Ok ten prostszy sposób sprawdza się świetnie! dzięki za pomoc

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.