klasa na bazie QPushButton

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:

 
private:
    przycisk* buton;

w pliku .cpp mam:

   buton = new przycisk(); 

błędy podczas kompilacji:

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ź

0

Pokarz definicję konstruktor klasa przycisk.

0

przycisk.cpp

 #include "przycisk.h"

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

}

przycisk.h

#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
 
1

parametrem konstruktora powinien być QWidget a nie QObject.

1

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

0

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

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

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?

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 ;)

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?

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:

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

0

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

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