Qt klikanie w zdjecie QLabel

Odpowiedz Nowy wątek
2015-12-03 14:05

Rejestracja: 6 lat temu

Ostatnio: 3 lata temu

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 : ).

Pozostało 580 znaków

kq
2015-12-03 14:13
kq
Moderator C/C++

Rejestracja: 7 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Szczecin

0

http://4programmers.net/Pomoc[...]e_odpowiada_w_moim_w%C4%85tku pkt. 2


edytowany 1x, ostatnio: kq, 2015-12-03 14:13

Pozostało 580 znaków

2015-12-03 14:24

Rejestracja: 6 lat temu

Ostatnio: 3 godziny temu

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ć.

edytowany 1x, ostatnio: grzesiek51114, 2015-12-03 14:27

Pozostało 580 znaków

2015-12-03 15:00

Rejestracja: 6 lat temu

Ostatnio: 3 lata temu

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 : |

edytowany 2x, ostatnio: Joker1309, 2015-12-03 16:28

Pozostało 580 znaków

2015-12-03 16:57

Rejestracja: 6 lat temu

Ostatnio: 3 lata temu

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

Pozostało 580 znaków

2015-12-03 19:28

Rejestracja: 12 lat temu

Ostatnio: 39 sekund temu

0

Q co nie tak jest z QPushButton?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2015-12-03 19:40

Rejestracja: 6 lat temu

Ostatnio: 3 lata temu

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

edytowany 2x, ostatnio: Joker1309, 2015-12-03 19:41
Przycisk może mieć obrazek. Ten fragment zaś to deklaracja konstruktora klasy MainWindow. - Pebal 2015-12-03 20:08
Jak chciałem zrobić przycisk i robiłem na nim obrazek (ikonę) to była mała, a obrazek jest cały i duży : ). W c++ kontruktorem klasy np. pies jest pies(), a tutaj jest jeszcze "otoczka" w postaci Q_OBJECT (QWidget *parent = 0); i o tą otoczke pytam : ) - Joker1309 2015-12-03 20:19
Obrazek był mały bo nie zmieniłeś właściwości IconSize. "Otoczką" jest tylko Q_OBJECT, który dodaje do klasy metadane, wykorzystywane przez Meta-Object Compiler. (QWidget *parent = 0) to nie otoczka a zwyczajny parametr konstruktora. - Pebal 2015-12-03 20:28
Ok dziękuję za pomoc : ) - Joker1309 2015-12-03 20:37

Pozostało 580 znaków

2015-12-05 02:29

Rejestracja: 14 lat temu

Ostatnio: 10 godzin temu

Lokalizacja: Warszawa

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.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

Odpowiedz

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