Qt dynamiczny QLabel

Odpowiedz Nowy wątek
2017-08-11 11:49
Bosaty Jeleń
0

Jak zrobić aby po kliknięciu w dynamiczny QLabel wywoływał okienko że kliknięto mam taki kod ale to nie działa

void GameInst::slotClicked()
{
    MessageBoxA(0 , "Clicked!" , "Clicked!" , 0);
}
 
void GameInst::mouseReleaseEvent(QMouseEvent * event)
{
    emit clicked();
}
 
QLabel *Label[11];
void LoadImg(Window *const window, QString label, QString image, int width, int height, int i)
{
    Label[i] = new QLabel(window);
    Label[i]->setObjectName(label);
    Label[i]->setGeometry(width, height, 191, 281);
    Label[i]->setPixmap(image);
    QObject::connect(Label[i], SIGNAL(clicked()), window, SLOT(slotClicked())); // <- tutaj to nie działa, jeśli zamiast Label[i] podstawić window to po kliknięciu w okno jest wywoływany checkbox a mi chodzi o kliknięcie w utworzony Label
}

Pozostało 580 znaków

2017-08-11 13:30
0

QLabel nie ma sygnału clicked, więc musisz sam go sobie dodać:

class MyLabel : public QLabel
{
  Q_OBJECT
 
  signals:
    void clicked();
 
  protected:
    void mousePressEvent( QMouseEvent* event ) override {
      if ( event->button() == Qt::LeftButton ) {
        emit clicked();
      }
      QLabel::mousePressEvent( event );
    }
 
  public:
    /* ... konstruktory etc. ... */
};
 

Druga możliwość to utworzenie filtru zdarzeń (szukaj: event filters ) i podłączenie go do QLabel

Pozostało 580 znaków

2017-08-11 14:57
0

Nie lepiej użyć po prostu guzika do tego?
Albo skorzystać ze sygnału http://doc.qt.io/qt-4.8/qlabel.html#linkActivated oczywiście musisz ustawić odpowiednią zawartość QLabel, żeby tam był link.


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

Pozostało 580 znaków

2017-08-11 20:05
Bosaty Jeleń
0

@MarekR22
Coś chyba nie wychodzi bo mam taki problem:
i.imgur. com/LWmsYPb.jpg

kod:

    QLabel *Label = new QLabel(window);
    Label->setObjectName(label);
    Label->setGeometry(width, height, 191, 281);
    Label->setCursor(QCursor(Qt::PointingHandCursor));
    Label->setText("<a href=\"#browse_output\">lnk</a>");
    Label->setTextInteractionFlags(Qt::TextBrowserInteraction);
    Label->setOpenExternalLinks(true);
    QObject::connect(Label, SIGNAL(linkClicked(QUrl)), window, SLOT(slotClicked()));

Pozostało 580 znaków

2017-08-11 21:55
0

Czytać dokumentacji nie umiesz? Gdzie tak jest napisane linkClicked? Stoi jak byk linkActivated!
Na dodatek argument to QString, a nie QUrl.
Jakby to była literowa to rozumiem jakaś dysleksja, mimo że Qt creator auto uzupełnia nazwy sygnałów i slotów.

Jeszcze sposób wklejania błędu do wiadomości to jakaś porażka.
Po pierwsze nie mogłeś zrobić copy-paste zwykłego tekstu (preferowane najprostsze rozwiązanie)?
Po drugie wkleiłeś nie klikalny link do obrazka, a ile się musiałeś naklikać by zrobić obrazek i gdzieś go wgrać!
Tak się zastanawiam, czy celowo rzucasz kłody pod nogi ludziom, którzy mogli by ci pomóc?
Bo, trzeba włożyć spory wysiłek, by tak popsuć tak prostą rzecz jak wklejenie logów aplikacji.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22, 2017-08-11 22:14

Pozostało 580 znaków

2017-08-12 11:59
Bosaty Jeleń
0

Udało się i klikanie w link działa.
Ale jeśli dodać setPixmap to klikanie nic nie daje da się to razem jakoś połączyć?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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