Qt dynamiczny QLabel

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

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.

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

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

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