MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtのコントロール - ラベルのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtのコントロール - ラベル
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Qtにおいて、<code>QLabel</code>クラスを使用してラベルをコントロールする手順を記載する。<br> <br><br> == テキストの折り返し == ラベルの横幅に合わせて文字列を分割して、改行コードを入れた文字列を返す。<br> <code>QLabel</code>クラスの<code>wordWrap</code>メソッドも存在する。<br> <br> これは、ラベルの横幅が固定されている場合、長い文字列を表示する時に使用する。<br> もし、文字列がラベルの横幅に収まる場合、分割・改行せずに文字列を返す。<br> <br> <u>※注意</u><br> <u>フォントの設定を行っていない場合、サイズを正しく計算できないことがある。</u><br> <syntaxhighlight lang="c++"> 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; } </syntaxhighlight> <br><br> == ハイパーリンク == ラベルのテキストをハイパーリンクとして表示するには、<br> Qt Designerでラベルのプロパティを、以下のように設定する。<br> * textプロパティ *: <code><a href="URL">表示するテキスト</a></code> * textFormatプロパティ *: AutoText * openExternalLinksプロパティ *: チェックを入力する。 * textInteractionFlagsプロパティ *: LinksAccessibleByMouse <br><br> == クリック可能なQLabel == <code>QLabel</code>クラスは、リンクの選択時やホバー時にシグナルを送信するが、押下時はシグナルを送信しない。<br> <br> 以下の例では、<code>QLabel</code>クラスを継承したサブクラスを作成して、<br> <code>QLabel</code>クラスの<code>mousePressEvent</code>メソッドをオーバーライドすることにより、ラベル押下時にシグナルを送信している。<br> <syntaxhighlight lang="c++"> // 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); }; </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // QClickableLabel.cpp ClickableLabel::ClickableLabel(const QString &text, QWidget* parent) : QLabel(text, parent) { } void ClickableLabel::mousePressEvent(QMouseEvent* event) { emit clicked(); } ClickableLabel::~ClickableLabel() { } </syntaxhighlight> <br><br> == 画像の表示 == ラベルコントロールに画像を表示するには、<code>QLabel</code>クラスの<code>setPixmap</code>メソッドを使用する。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | データ ! style="background-color:#00ffff;" | 画像の取得例(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> mainwindow.uiファイルにラベルコントロールを配置している。<br> また、画像を表示するために、<code>QPixmp</code>をインクルードする必要がある。<br> <syntaxhighlight lang="c++"> // 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; } </syntaxhighlight> <br> また、ラベルコントロールに埋め込む画像を拡大表示するには、以下のように記述する。<br> <syntaxhighlight lang="c++"> // 変更前 ui->label->setPixmap(pix); // 変更後 ui->label->setPixmap(pix.scaled(<横のピクセル>, <縦のピクセル>)); </syntaxhighlight> <br> ラベルコントロールに埋め込む画像サイズは、ラベルのサイズ変更に自動的に対応する。<br> <syntaxhighlight lang="c++"> std:unique_ptr<QLabel> Label = std::make::unique<QLabel>(); label->setPixmap(style()->standardPixmap(QStyle::SP_TitleBarMenuButton)); // trueを指定する場合、縦横比を無視してラベルのサイズ限界まで画像を表示する label->setScaledContents(false); </syntaxhighlight> <br> ==== 画像の伸縮 ==== <code>QPixmap</code>クラスを使用することで、縦横比を保ってサイズを変更することができる。<br> <br> 以下の例では、まず、ラベルコントロールに画像を割り当てている。<br> <syntaxhighlight lang="c++"> QLabel *label = new QLabel; label->setFixedSize(150, 150); label->setAlignment(Qt::AlignLeft | Qt::AlignTop); label->setStyleSheet("background:violet;"); // ラベルコントロールに画像を設定する4つの方法 QPixmap pixmap = QPixmap(":/images/cat.jpg"); label->setPixmap(pixmap); // 原画像のサイズで表示する label->setPixmap(pixmap.scaled(150, 150)); // 縦横のサイズを指定する label->setPixmap(pixmap.scaledToHeight(150)); // 縦のみを指定する(縦横比を保って横も自動的に伸縮する) label->setPixmap(pixmap.scaledToWidth(150)); // 横のみを指定する(縦横比を保って縦も自動的に伸縮する) </syntaxhighlight> <br> ==== ラベルの背景画像 ==== QSSを使用することより、背景の色と画像のタイル表示ができる。<br> <br> テキストや表示位置は、setTextやsetAlignmentで設定する。<br> no-repeatを省略する場合、タイル表示になる。<br> background-sizeは指定できない。<br> <syntaxhighlight lang="c++"> label->setStyleSheet("font-weight:bold;" "background:skyblue url(:/images/close-hover.gif) no-repeat;"); </syntaxhighlight> <br> ボックスタイプのウィジェットは、同様に背景を設定することができる。<br> QSSの詳細は、装飾とスタイルを参照すること。<br> <br><br> == カーソル == ラベルコントロール上のカーソルの画像を変更するには、<code>QLabel</code>クラスの<code>setCursor</code>メソッドを使用する。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | データ ! style="background-color:#00ffff;" | カーソル画像の取得例(QCursorクラス) |- | 標準画像 || QCursor Cursor = QCursor(style()->standardPixmap(QStyle::SP_MediaPlay));<br>label->setCursor(Cursor); |- | 標準カーソル || Qcursor Cursor = Qt::WaitCursor;<br>label->setCursor(Cursor); |- | リソース || QCursor Cursor = QCursor(QPixmap(":/images/mouse01.png"));<br>label->setCursor(Cursor); |- | ファイル || QCursor Cursor = QCursor(QPixmap("C:/temp/testimage.ico"));<br>label->setCursor(Cursor); |} </center> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtのコントロール - ラベル
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse