「Qtのコントロール - ラベル」の版間の差分
ナビゲーションに移動
検索に移動
(→概要) |
(→画像の表示) |
||
| 107行目: | 107行目: | ||
== 画像の表示 == | == 画像の表示 == | ||
ラベルコントロールに画像を表示するには、<code>QLabel</code>クラスの<code>setPixmap</code>メソッドを使用する。<br> | |||
<center> | |||
{| class="wikitable" style="background-color:#fefefe;" | |||
|- | |||
! style="background-color:#00ffff;" | データ | |||
! style="background-color:#00ffff;" | Pixmap取得例(QPixmapクラス) | |||
|- | |||
| 標準画像 || QPixmap Pixmap = style()->standardPixmap(QStyle::SP_MediaPlay); | |||
|- | |||
| 標準カーソル || QCursor Cursor = Qt::WaitCursor;<br>if(!Cursor.pixmap().isNull())<br>{<br> pixmap = Cursor.pixmap();<br>} | |||
|- | |||
| リソース || QPixmap Pixmap = QPixmap(":/images/mouse01.png"); | |||
|- | |||
| ファイル || QPixmap Pixmap = QPixmap("C:/temp/testimage.ico"); | |||
|- | |||
| アイコン || アイコンは複数のサイズを持っているため、サイズを指定する。<br>自動的にサイズを選択する場合、最大サイズはlastメソッド、最小サイズはメソッドで取得する。<br><br>QPixmap pixmap = icon.pixmap(icon.availableSizes().last());<br>または<br>QPixmap Pixmap = icon.pixmap(32, 32); | |||
|- | |||
| イメージ || QPixmap Pixmap.convertFromImage(image); | |||
|} | |||
</center> | |||
<br> | |||
以下の例では、ラベルに画像を埋め込んでいる。<br> | 以下の例では、ラベルに画像を埋め込んでいる。<br> | ||
<br> | <br> | ||
2021年3月21日 (日) 10:06時点における版
概要
Qtにおいて、QLabelクラスを使用してラベルをコントロールする手順を記載する。
テキストの折り返し
ラベルの横幅に合わせて文字列を分割して、改行コードを入れた文字列を返す。
QLabelクラスのwordWrapメソッドも存在する。
これは、ラベルの横幅が固定されている場合、長い文字列を表示する時に使用する。
もし、文字列がラベルの横幅に収まる場合、分割・改行せずに文字列を返す。
※注意
フォントの設定を行っていない場合、サイズを正しく計算できないことがある。
QString MainWindow::wrapLabelText(QLabel *label, QString text)
{
int mxWidth = label->width();
QFontMetrics fm(label->fontMetrics());
if(fm.width(text) <= mxWidth)
{
return text;
}
QString tmpStr = "";
QString lineStr = "";
for(int i = 0; i < text.length(); i++)
{
QString str = text.mid(i, 1);
if(str == "\n")
{
tmpStr += lineStr + "\n";
lineStr = "";
continue;
}
if((fm.width(lineStr) + fm.width(str)) >= mxWidth)
{
tmpStr += lineStr + "\n";
lineStr = "";
}
lineStr += str;
}
tmpStr += lineStr;
return tmpStr;
}
ハイパーリンク
ラベルのテキストをハイパーリンクとして表示するには、
Qt Designerでラベルのプロパティを、以下のように設定する。
- textプロパティ
<a href="URL">表示するテキスト</a>
- textFormatプロパティ
- AutoText
- openExternalLinksプロパティ
- チェックを入力する。
- textInteractionFlagsプロパティ
- LinksAccessibleByMouse
クリック可能なQLabel
QLabelクラスは、リンクの選択時やホバー時にシグナルを送信するが、押下時はシグナルを送信しない。
以下の例では、QLabelクラスを継承したサブクラスを作成して、
QLabelクラスのmousePressEventメソッドをオーバーライドすることにより、ラベル押下時にシグナルを送信している。
// QClickableLabel.h
class QClickableLabel : public QLabel
{
Q_OBJECT
public:
explicit ClickableLabel(const QString &text="", QWidget* parent=0);
virtual ~ClickableLabel();
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent* event);
};
// QClickableLabel.cpp
ClickableLabel::ClickableLabel(const QString &text, QWidget* parent) : QLabel(text, parent)
{
}
void ClickableLabel::mousePressEvent(QMouseEvent* event)
{
emit clicked();
}
ClickableLabel::~ClickableLabel()
{
}
画像の表示
ラベルコントロールに画像を表示するには、QLabelクラスのsetPixmapメソッドを使用する。
| データ | Pixmap取得例(QPixmapクラス) |
|---|---|
| 標準画像 | QPixmap Pixmap = style()->standardPixmap(QStyle::SP_MediaPlay); |
| 標準カーソル | QCursor Cursor = Qt::WaitCursor; if(!Cursor.pixmap().isNull()) { pixmap = Cursor.pixmap(); } |
| リソース | QPixmap Pixmap = QPixmap(":/images/mouse01.png"); |
| ファイル | QPixmap Pixmap = QPixmap("C:/temp/testimage.ico"); |
| アイコン | アイコンは複数のサイズを持っているため、サイズを指定する。 自動的にサイズを選択する場合、最大サイズはlastメソッド、最小サイズはメソッドで取得する。 QPixmap pixmap = icon.pixmap(icon.availableSizes().last()); または QPixmap Pixmap = icon.pixmap(32, 32); |
| イメージ | QPixmap Pixmap.convertFromImage(image); |
以下の例では、ラベルに画像を埋め込んでいる。
mainwindow.uiファイルにLabelコントロールを配置している。
また、画像を表示するために、QPixmpをインクルードする必要がある。
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPixmap>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPixmap pix("<画像ファイルのパス>");
ui->label->setPixmap(pix);
}
MainWindow::~MainWindow()
{
delete ui;
}
また、Labelコントロールに埋め込む画像を拡大表示するには、以下のように記述する。
// 変更前
ui->label->setPixmap(pix);
// 変更後
ui->label->setPixmap(pix.scaled(<横のピクセル>, <縦のピクセル>));