1、概述
QWhatsThis 是 Qt 框架中的一个类,用于提供“这是什么?”(WhatsThis)的帮助信息。当用户按下 Shift+F1 键(或应用程序指定的其他快捷键)并将鼠标悬停在某个控件上时,QWhatsThis 会显示与该控件相关的帮助文本。这个功能对于为用户提供有关界面元素的额外说明和上下文信息非常有用。
2、重要方法
QWhatsThis 类提供了一些静态方法,用于显示和自定义“这是什么?”帮助信息。以下是一些重要的方法:
- QWhatsThis::showText(const QPoint &pos, const QString &text, QWidget *w = nullptr): 在屏幕上的指定位置显示帮助文本。
pos
是文本显示的屏幕坐标,text
是要显示的帮助文本,w
是可选的父窗口部件,用于确定文本显示的相对位置。 - QWhatsThis::showText(const QWidget *w, const QString &text, const QPoint &pos = QPoint(-1, -1)): 在指定窗口部件的指定位置显示帮助文本。如果
pos
是QPoint(-1, -1)
,则文本将显示在窗口部件的鼠标当前位置。 - QWhatsThis::hideText(): 隐藏当前显示的帮助文本。
- QWhatsThis::enterWhatsThisMode(): 进入“这是什么?”模式,通常与特定的用户操作(如按下 Shift+F1)相关联。
- QWhatsThis::leaveWhatsThisMode(): 离开“这是什么?”模式。
此外,QWhatsThis 还提供了设置和获取自定义帮助文本的方法,这些方法通常与窗口部件的 setWhatsThis
和 whatsThis
方法一起使用。
3、重要信号
QWhatsThis 类本身不直接提供信号,因为它是静态的并且不实例化。然而,开发者可以通过捕捉键盘和鼠标事件来触发 QWhatsThis 的显示,并相应地处理用户交互。例如,可以捕捉 Shift+F1 键的组合按下事件,然后调用 QWhatsThis 的 showText
方法来显示帮助信息。
#include <QApplication>
#include <QPushButton>
#include <QWhatsThis>
#include <QKeyEvent>
class WhatsThisButton : public QPushButton {
Q_OBJECT
public:
WhatsThisButton(QWidget *parent = nullptr) : QPushButton(parent) {
setText("Press Shift+F1 and hover over me");
// 设置“这是什么?”帮助文本
setWhatsThis("This is a button. Click it to perform an action.");
}
protected:
// 重写键盘事件处理函数,以便捕捉 Shift+F1 键的组合按下事件
void keyPressEvent(QKeyEvent *event) override {
if (event->key() == Qt::Key_F1 && event->modifiers() & Qt::ShiftModifier) {
// 进入“这是什么?”模式并显示帮助文本
QWhatsThis::enterWhatsThisMode();
QWhatsThis::showText(mapToGlobal(rect().bottomRight()), whatsThis(), this);
} else {
QPushButton::keyPressEvent(event);
}
}
// 重写鼠标移动事件处理函数,以便在鼠标悬停时显示帮助文本(如果需要)
void enterEvent(QEvent *event) override {
QPushButton::enterEvent(event);
// 通常不需要在这里调用 showText,因为 QWhatsThis 会自动处理
// 但如果需要在进入时立即显示(而不是等待用户按键),可以这样做
// 然而,这通常不是“这是什么?”功能的标准用法
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建一个主窗口
QWidget mainWindow;
mainWindow.setWindowTitle("QWhatsThis Example");
// 创建一个 WhatsThisButton 实例并添加到主窗口中
WhatsThisButton *button = new WhatsThisButton(&mainWindow);
button->setGeometry(50, 50, 200, 50);
// 显示主窗口
mainWindow.show();
return app.exec();
}
需要商务合作(定制程序)的欢迎私信!!
技术交流qq群:
觉得有帮助的话,打赏一下呗。。