设为首页 加入收藏

TOP

【Qt6】工具提示以及调色板设置(一)
2023-08-26 21:10:31 】 浏览:152
Tags:Qt6

工具提示即 Tool Tip,当用户把鼠标移动到某个UI对象上并悬停片刻,就会出现一个“短小精悍”的窗口,显示一些说明性文本。一般就是功能描述,让用户知道这个XX是干啥用的。

在 Qt 中使用工具提示最方便的做法是直接用 QWidget 类的成员方法:setToolTip。从 QWidget 类派生的组件都可以用,直接设置文本内容即可,用起来很 666。

下面举个例子:示例窗口上有三个单选按钮(QRadioButton),分别为它们设置工具提示。

#include <qapplication.h>
#include <qwidget.h>
#include <qboxlayout.h>
#include <qradiobutton.h>
#include <qlabel.h>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    // 窗口
    QWidget *window = new QWidget;
    // 大小和标题
    window->setWindowTitle("2023劲爆游戏盲盒");
    window->resize(300, 280);
    // 布局
    QVBoxLayout* layout = new QVBoxLayout;
    window->setLayout(layout);
    // 在布局内放些组件
    // 1、标签
    QLabel *lbTxt = new QLabel(window);
    lbTxt->setText("请选择一个分组开箱,祝您好运。");
    layout->addWidget(lbTxt);
    // 2、三个单选按钮
    QRadioButton* opt1=new QRadioButton("霸王组", window);
    QRadioButton *opt2 = new QRadioButton("受虐组", window);
    QRadioButton *opt3 = new QRadioButton("狗粮组", window);
    layout->addWidget(opt1);
    layout->addWidget(opt2);
    layout->addWidget(opt3);
    layout->addStretch(1);

    // 给三个单选按钮设置工具提示
    opt1->setToolTip("霸王组的游戏玩得特别有自信,玩家的战斗力最大化,对手的战斗力弱得像小鸡一样,一打一个爽,一直打一直爽。");
    opt2->setToolTip("受虐组的游戏玩起来比较惨,玩家的战斗力被严重削弱,对手的力量无比强大,基本被按在水泥地板上摩擦。该组游戏难度大到吓死人。");
    opt3->setToolTip("狗粮组游戏比较温馨,玩家可以自由组CP,然后拼命发狗粮。哪一组CP被别人发的糖给甜死了就算出局。");

    // 显示窗口
    window->showNormal();

    return QApplication::exec();
}

这是最基本的工具提示,没什么可折腾的,设置字符串就行。看看效果。

 

下面说说另一种复杂些的方法。QToolTip 类公开一组静态成员,可以用于手动控制工具提示。例如,你可以:

showText:显示工具提示。这个用得较多;
hideText:隐藏工具提示。这个一般不需要调用,毕竟你鼠标移出目标组件的区域后就会自动隐藏。
下面咱们还是用例子说事。例子程序的窗口中水平躺了两个按钮,然后连接按钮的 clicked 信号,通过调用 showText 方法手动显示工具提示。
#include <QApplication>
#include <QWidget>
#include <QToolTip>
#include <QPushButton>
#include <QHBoxLayout>

class MyWindow : public QWidget
{
public:
    MyWindow();

private:
    QHBoxLayout* layout;
    QPushButton* btnA;
    QPushButton* btnB;
    // 两个slots
    void onAClicked();
    void onBClicked();
};

/***************************************************/

MyWindow::MyWindow()
    :QWidget::QWidget(nullptr)
{
    // 初始化布局
    layout = new QHBoxLayout;
    setLayout(layout);
    // 弄两个按钮
    btnA = new QPushButton("按钮 1", this);
    btnB = new QPushButton("按钮 2", this);
    layout->addWidget(btnA, 0, Qt::AlignTop);
    layout->addWidget(btnB, 0, Qt::AlignTop);
    // 连接一下clicked信号
    connect(btnA, &QPushButton::clicked, this, &MyWindow::onAClicked);
    connect(btnB, &QPushButton::clicked, this, &MyWindow::onBClicked);
}

由于我这个类没有明确声明信号等东东,所以不加 Q_OBJECT 宏也没问题。如果加 Q_OBJECT 宏,这个类的定义最好放头文件里,这样就不必手动执行 MOC。

接下来咱们重点实现响应 clicked 信号的那两个方法。

void MyWindow::onAClicked()
{
    // 获取按钮的矩形区域坐标
    QPushButton* _b = static_cast<QPushButton*>(sender());
    QRect rect = _b->rect();
    // 左下角坐标
    QPoint lbpoint = rect.bottomLeft();
    // 转换为全局坐标
    QPoint gpos = _b->mapToGlobal(lbpoint);
    // 手动显示提示信息
    QToolTip::showText(gpos, "单击它,实现梦想");
}

void MyWindow::onBClicked()
{
    auto b = static_cast<QPushButton*>(sender());
    // 获取按钮的矩形区域
    QRect rect = b->rect();
    // 左下角
    QPoint p1 = rect.bottomLeft();
    // 映射全局坐标
    p1 = b->mapToGlobal(p1);
    // 显示工具
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ImGui界面优化:使用图标字体、隐.. 下一篇C++ LibCurl 库的使用方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目