Название: сигнал нажатия на label
Отправлено: mishanja1988 от Апрель 26, 2009, 07:13
Мне нужно, что бы при нажатии на Label, в котором картинка вызывался метод, я писал вот так: connect(m_ui->label, SIGNAL(mousePressEvent), this, SLOT(close()));
Название: Re: сигнал нажатия на label
Отправлено: uriel от Апрель 26, 2009, 10:31
По-умолчанию QLabel не раздаёт подобные сигналы, но можно сделать двумя способами. Во-первых, если хочется всё-таки на сигналах и слотах, то можно отнаследоваться от QLabel, ловить mousePressEvent и высылать самодельный сигнал. Во-вторых, можно повесить на этот QLabel eventFilter, в нём ловить то же самое событие и напрямую вызывать метод close() нужного объекта.
Название: Re: сигнал нажатия на label
Отправлено: SABROG от Апрель 27, 2009, 17:47
Чтобы не быть голословными приведу оба варианта: C++ (Qt) #include <QtGui/QApplication> #include <QtGui/QMouseEvent> #include <QtGui/QLabel> class QExLabel : public QLabel { Q_OBJECT public: QExLabel(QWidget *parent = 0) : QLabel(parent){}; signals: void clicked(); protected: void mouseReleaseEvent(QMouseEvent *e) { if(e->button() == Qt::LeftButton) { emit clicked(); } } }; int main(int argc, char **argv) { QApplication app(argc, argv); QExLabel label; QObject::connect(&label, SIGNAL(clicked()), &app, SLOT(quit())); label.show(); return app.exec(); } #include <main.moc>
//mainwindow.h C++ (Qt) #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtCore/QtGlobal> #include <QtCore/QtDebug> #include <QtGui/QMainWindow> #include <QtGui/QMouseEvent> #include <QtGui/QErrorMessage> namespace Ui { class MainWindowClass; } class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void btnClicked(); signals: void clicked(); protected: bool eventFilter(QObject *, QEvent *); private: Ui::MainWindowClass *ui; }; #endif // MAINWINDOW_H
//mainwindow.cpp C++ (Qt) #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindowClass) { QErrorMessage::qtHandler(); ui->setupUi(this); connect(this, SIGNAL(clicked()), SLOT(btnClicked())); ui->label->installEventFilter(this); } bool MainWindow::eventFilter(QObject *obj, QEvent *ev) { switch(ev->type()) { case QEvent::MouseButtonRelease: { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(ev); if (mouseEvent->button() == Qt::LeftButton) { emit clicked(); return true; } break; } default:; } return QObject::eventFilter(obj, ev); } void MainWindow::btnClicked() { qDebug() << "clicked"; } MainWindow::~MainWindow() { delete ui; }
Название: Re: сигнал нажатия на label
Отправлено: lit-uriy от Апрель 27, 2009, 18:48
>>SIGNAL(mousePressEvent) а где ты нашёл такой сигнал? такого сигнала нет ни у одного виджета. Это событие.
Название: Re: сигнал нажатия на label
Отправлено: mishanja1988 от Апрель 30, 2009, 05:41
Спасибо, большое, я разобрался.. Извините, если, что не так спрашиваю..
|