TabWidget 페이지의 모든 하위 항목에 대한 호버 이벤트를 캡처하려고합니다. QObject를 하위 클래스로 만들고 eventFilter()를 다시 구현하여 레이블을 채우는 신호를 방출했습니다. 이 신호는 대상 객체의 이름과 선택한 언어 (예 : "영어")를 인수로 보냅니다. 레이블에는이 정보를 취하고 정보를 읽고 표시하기위한 적절한 텍스트 파일을 선택하는 슬롯이 있습니다. 그것은 도구 팁을 표시하는 것과 비슷하지만 레이블 내에 있어야합니다. 헤더 :탭 페이지의 모든 하위 항목에 대해 Qt installEventFilter()를 호출합니다.
#include <QEvent>
#include <QObject>
class ToolTipGenerator : public QObject
{
public:
ToolTipGenerator();
void setLanguage(QString lang);
protected:
virtual bool eventFilter(QObject *obj, QEvent *event);
private:
QString language;
signals:
displayToolTip(const QString &lang, const QString &targetName);
clearToolTip();
};
출처 :
#include "ToolTipGenerator.h"
ToolTipGenerator::ToolTipGenerator()
{
language = "English";
}
void ToolTipGenerator::setLanguage(QString lang)
{
language = lang;
}
bool ToolTipGenerator::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::HoverEnter)
emit displayToolTip(language, obj->objectName());
else if(event->type() == QEvent::HoverLeave)
emit clearToolTip();
return false;
}
MainWindow.cpp :
connect(generator, SIGNAL(displayToolTip(QString,QString)),
ui->toolTipLabel, SLOT(displayToolTipInLabel(QString,QString)));
void MainWindow::displayToolTipInLabel(const QString &lang,
const QString &targetName)
{
QFile file(toolTipPath + targetName + "_" + lang + ".txt");
QString line;
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream stream(&file);
while (!stream.atEnd())
line.append(stream.readLine()+"\n");
if(ui->tabWidgetSensor->currentIndex() == 1)
ui->toolTipLabelPage1->setText(line);
}
file.close();
}
는 지금 탭 페이지의 모든 어린이를위한 이벤트 필터를 설치해야합니다. 이 전체 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 적어도 모든 아이들을위한 이벤트 필터를 설치하는 더 좋은 방법은 그들 모두를 반복하지 않고?