LoginSignup
7
1

More than 5 years have passed since last update.

Qtでツールチップを表示する際に気をつけること

Posted at

Qt Creator で作成したばかりのGUIアプリケーションはこんな感じ。

最初のたたき台です。

MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

image.png

ツールチップを表示するだけなら簡単です。

MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setToolTip("Hello, world");
}

image.png

リッチテキスト(簡易HTMLタグ)で装飾することもできます。

MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setToolTip("<i>Hello</i>, <b>world</b>");
}

image.png

しかし、時には、<>&などをそのまま表示したいこともあります。

MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString s = "<i>Hello</i>, <b>world</b>";
    setToolTip(s.toHtmlEscaped());
}

image.png

HTMLエスケープすることで、記号も表示されるようになりました。でも待ってください。なぜか途中で改行が入ってしまいますよ!

改行せずに1行で表示したいです。そんなときは一手間かけなくてはいけません。

MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString s = "<i>Hello</i>, <b>world</b>";
    s = "<p style='white-space:pre'>" + s.toHtmlEscaped() + "</p>";
    setToolTip(s);
}

image.png

めんどくさいですね。なんかバグっぽい気もしますが、そういう仕様らしいです。
http://doc.qt.io/qt-5/qtooltip.html

image.png

ワードラップしたくなければ <p style='white-space:pre'> で囲みなさい、だそうです。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1