如何让商家建设网站,qian p.wordpress,,企业网站模板 下载 论坛,免费网站安全软件大全游戏1 介绍 在QLabel中没有双击等事件响应#xff0c;需要构建其派生类#xff0c;自定义信号(signals)、重载事件函数(event)#xff0c;最后在Qwidget中使用connect链接即可#xff0c;进而实现响应功能。 对于其余没有需求事件响应的QObject同样适用。 此外#xff0c;该功…1 介绍 在QLabel中没有双击等事件响应需要构建其派生类自定义信号(signals)、重载事件函数(event)最后在Qwidget中使用connect链接即可进而实现响应功能。 对于其余没有需求事件响应的QObject同样适用。 此外该功能同样可以使用事件过滤器将QLable所需的双击事件功能委托给其它QObject如QWidget来处理。
2 过程
2.1 构建派生类 2.2 自定义信号重载事件函数 信号doubleClicked、 与mouseDoubleClickEvent声明 与mouseDoubleClickEvent定义 注信号doubleClicked在Qt中有内置定义不需要重载。 2.3 QWidget中的connect链接 3 代码 tmylabel.h
#ifndef TMYLABEL_H
#define TMYLABEL_H#include QLabel
#include QObject
#include QMainWindowclass TMyLabel : public QLabel
{Q_OBJECT
public:TMyLabel(QWidget *parent nullptr);
signals:void doubleClicked();// QWidget interface
protected:virtual void mouseDoubleClickEvent(QMouseEvent *event) override;// QObject interface
public:virtual bool event(QEvent *event) override;
};#endif // TMYLABEL_Htmylabel.cpp
#include tmylabel.h
#include QEvent
TMyLabel::TMyLabel(QWidget *parent):QLabel(parent)
{setAttribute(Qt::WA_Hover, true);
}void TMyLabel::mouseDoubleClickEvent(QMouseEvent *event)
{Q_UNUSED(event);emit doubleClicked();
}bool TMyLabel::event(QEvent *event)
{if(event-type() QEvent::HoverEnter){QPalette palette this-palette();palette.setColor(QPalette::WindowText, Qt::red);setPalette(palette);}else if(event-type() QEvent::HoverLeave){QPalette palette this-palette();palette.setColor(QPalette::WindowText, Qt::black);setPalette(palette);}return QLabel::event(event);
}mainwindow.cpp
#include mainwindow.h
#include ui_mainwindow.hMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);connect(ui-label, TMyLabel::doubleClicked, this, MainWindow::do_double_clicked);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::do_double_clicked()
{ui-label-setText(label被双击自定义信号槽响应);
}void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{Q_UNUSED(event);ui-label-setText(窗口被双击);ui-label-adjustSize();
}mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindowQT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();
private slots:void do_double_clicked();private:Ui::MainWindow *ui;// QWidget interface
protected:virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
};#endif // MAINWINDOW_H