Qt klikanie w zdjecie QLabel

0

Witam Wszystkich,
Chce zrobić zdjecia które będą reagowały na kilknięcie w Qt. Wiem jak zrobić zdjęcie w QLabel ale na QLabel nie ma sygnału kliknięcia. Szukając trochę w internecie znalazłem takie coś:
https://wiki.qt.io/Clickable_QLabel
Jednak po stworzeniu dwóch plików source i cpp, wkeljeniu w/w zawartosci i po dodaniu do pliku cpp include "mylabel.h" a do pliku .h include <QLabel>, include <QMouseEvent> oraz do pliku main.cpp #include"mylabel.h" program się nie kompiluje (dużo błędów wyskakuje). Biorąc pod uwage że kod kopiuje z oficjalnego wiki na pewno coś robię źle, czy mógłby ktoś wytłumaczyć krok po korku jak dojść do sygnału clicekd w QLabel ?
Dziękuję za pomoc : ).

1

Jest prosty sposób. Po prostu rozszerz klasę QLabel: https://wiki.qt.io/Clickable_QLabel
A nie kompiluje się, bo prawdopodobnie w GUI nadal korzystasz ze starego QLabel zamiast z rozszerzonej klasy... ale bez konkretów od Ciebie to tylko mogę się domyślać.

0

Nie ma konkretów, nowy pusty projekt i tylko dodane te 2 pliki ( cpp i h )

Zmieniam w ui, klikam prawym -> zastap -> myqlabel

Dzięki temu filmikowi : doszedłem do tego że Mouse Area reguje na każde kliniecie, ale chce żeby reagowalo tylko na left click, czyli zrobiłem tak :

 void MainWindow::Mouse_Pressed()
{
    if(Qt::LeftButton)
    {
          ui->lblMouse_Current_Event->setText("Mouse Left Click");
    }
    else{
    ui->lblMouse_Current_Event->setText("Mouse Pressed");
    }
}

ale waunek nie działa : |

0

Dzięki temu filmikowi : doszedłem do tego że Mouse Area reguje na każde kliniecie, ale chce żeby reagowalo tylko na left click, czyli zrobiłem tak :

 void MainWindow::Mouse_Pressed()
{
    if(Qt::LeftButton)
    {
          ui->lblMouse_Current_Event->setText("Mouse Left Click");
    }
    else{
    ui->lblMouse_Current_Event->setText("Mouse Pressed");
    }
}

ale waunek nie działa : |

edit3:

poradziłem sobie zmienijąc w innym miejscu sprawdzenie przycisku:

void my_qlabel::mousePressEvent(QMouseEvent *ev)
{
   if(ev->button() == Qt::LeftButton){
    emit Mouse_Pressed();
   }
}
0

Q co nie tak jest z QPushButton?

0

chce żeby reagowło na kliknięcie w obrazek : ). Z tą częścią programu sobie poradziłem, ale nie wiem co oznacza taki zapis:

     
Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);

może ktoś wytłumaczyć "łopatologicznie" ? : D

0

Cóż,jak to zasugerował Marek możesz użyć klasy QPushButton bez tekstu,ale za to z ikonką.Co prawda,to ma swoje minusy,np trzeba będzie wygląd tego przycisku dopieścić poprzez pochowanie cieni,no i wszelakie QStyle aplikacji będą brały te od QPushButtona.

Jeśli chcesz się oprzeć na klasie QLabel,to sposób A:

  1. dziedziczysz ją do swojej klasy i przeimplementowywujesz to
    http://doc.qt.io/qt-4.8/qwidget.html#mouseReleaseEvent
    z parametru *event wyciągniesz sobie różne przydatne rzeczy,jak np który przycisk myszy został wciśnięty.
    Możesz użyć też mousePressEvent,wtedy Twój kod zareaguje od razu po wciśnięciu przycisku bez czekania na zwolnienie.
  2. W Qt Designerze używasz opcji 'Promote Widget' na tych QLabelach,którym chcesz dodać Twoje zachowanie się na kliknięcie.

Sposób B:
Użyć http://doc.qt.io/qt-4.8/qobject.html#installEventFilter
Polega to na tym,iż tworzysz sobie oddzielny obiekt do obsługi logiki kliknięcia w QLabela tudzież inszy QWidget.
Zaletą rozwiązania B jest to,iż te filtry eventów można podpinać (i usuwać) pod obiekty dynamicznie,w trakcie działania programu.Poza tym będą działały nie tylko z QLabelem,ale każdym QWidgetem.

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