Qt 앱에서 상태 표시줄에 긴 텍스트를 설정하면 메인 윈도우의 폭이 넓어지는 문제
시작
한 곳에 작은 MainWindow가있었습니다.
그 창에는 버튼이 붙어 있었다고 한다.
void MainWindow::on_pushButton_clicked()
{
status_label->setText("The quick brown fox jumps over the lazy dog");
}
버튼을 눌러 보면, 무려, MainWindow가 퍼져 버렸지 않습니까.
복어
MainWindow의 생성자에서 상태 표시 줄에 텍스트를 표시하는 레이블을 만들고 있습니다.
status_label = new QLabel(this);
ui->statusBar->addWidget(status_label);
이 QLabel이라는 클래스는 표시되는 텍스트의 너비에 따라 늘어나도록 설계되었습니다. 텍스트가 짧은 만큼 MainWindow의 크기는 영향을 받지 않습니다. 그러나 MainWindow의 폭보다 QLabel이 더 커지면 MainWindow가 강제로 펼쳐집니다.
MainWindow가 좁고 텍스트가 맞지 않는 것은 어쩔 수 없습니다. 그럴 때는 텍스트 전체가 표시되지 않아도 된다고 합니다. 그렇지만, MainWindow가 강제적으로 사이즈 변경되어 버리는 것은 그다지 기쁘지 않습니다.
타이사쿠
강제로 퍼지지 않는 라벨 클래스를 만드세요.
StatusLabel.h
#ifndef STATUSLABEL_H
#define STATUSLABEL_H
#include <QLabel>
class StatusLabel : public QLabel
{
Q_OBJECT
public:
explicit StatusLabel(QWidget *parent = 0);
QSize minimumSizeHint() const;
};
#endif // STATUSLABEL_H
minimumSizeHint() 라는 멤버 함수를 재정의합니다.
StatusLabel.cpp
#include "StatusLabel.h"
StatusLabel::StatusLabel(QWidget *parent)
: QLabel(parent)
{
}
QSize StatusLabel::minimumSizeHint() const
{
QSize sz = QLabel::minimumSizeHint();
sz.rwidth() = 0;
return sz;
}
최소 크기를 0으로 다시 씁니다.
QLabel 대신 새로 만든 StatusLabel을 사용합니다.
MainWindow.h
private:
StatusLabel *status_label;
MainWindow.cpp
status_label = new StatusLabel(this);
ui->statusBar->addWidget(status_label);
카케츠
텍스트의 튀어나온 부분은 그려지지 않지만 MainWindow가 강제로 퍼지지 않습니다.
끝.
Reference
이 문제에 관하여(Qt 앱에서 상태 표시줄에 긴 텍스트를 설정하면 메인 윈도우의 폭이 넓어지는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/soramimi_jp/items/3d4e800e3d86ed216deb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
void MainWindow::on_pushButton_clicked()
{
status_label->setText("The quick brown fox jumps over the lazy dog");
}
MainWindow의 생성자에서 상태 표시 줄에 텍스트를 표시하는 레이블을 만들고 있습니다.
status_label = new QLabel(this);
ui->statusBar->addWidget(status_label);
이 QLabel이라는 클래스는 표시되는 텍스트의 너비에 따라 늘어나도록 설계되었습니다. 텍스트가 짧은 만큼 MainWindow의 크기는 영향을 받지 않습니다. 그러나 MainWindow의 폭보다 QLabel이 더 커지면 MainWindow가 강제로 펼쳐집니다.
MainWindow가 좁고 텍스트가 맞지 않는 것은 어쩔 수 없습니다. 그럴 때는 텍스트 전체가 표시되지 않아도 된다고 합니다. 그렇지만, MainWindow가 강제적으로 사이즈 변경되어 버리는 것은 그다지 기쁘지 않습니다.
타이사쿠
강제로 퍼지지 않는 라벨 클래스를 만드세요.
StatusLabel.h
#ifndef STATUSLABEL_H
#define STATUSLABEL_H
#include <QLabel>
class StatusLabel : public QLabel
{
Q_OBJECT
public:
explicit StatusLabel(QWidget *parent = 0);
QSize minimumSizeHint() const;
};
#endif // STATUSLABEL_H
minimumSizeHint() 라는 멤버 함수를 재정의합니다.
StatusLabel.cpp
#include "StatusLabel.h"
StatusLabel::StatusLabel(QWidget *parent)
: QLabel(parent)
{
}
QSize StatusLabel::minimumSizeHint() const
{
QSize sz = QLabel::minimumSizeHint();
sz.rwidth() = 0;
return sz;
}
최소 크기를 0으로 다시 씁니다.
QLabel 대신 새로 만든 StatusLabel을 사용합니다.
MainWindow.h
private:
StatusLabel *status_label;
MainWindow.cpp
status_label = new StatusLabel(this);
ui->statusBar->addWidget(status_label);
카케츠
텍스트의 튀어나온 부분은 그려지지 않지만 MainWindow가 강제로 퍼지지 않습니다.
끝.
Reference
이 문제에 관하여(Qt 앱에서 상태 표시줄에 긴 텍스트를 설정하면 메인 윈도우의 폭이 넓어지는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/soramimi_jp/items/3d4e800e3d86ed216deb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#ifndef STATUSLABEL_H
#define STATUSLABEL_H
#include <QLabel>
class StatusLabel : public QLabel
{
Q_OBJECT
public:
explicit StatusLabel(QWidget *parent = 0);
QSize minimumSizeHint() const;
};
#endif // STATUSLABEL_H
#include "StatusLabel.h"
StatusLabel::StatusLabel(QWidget *parent)
: QLabel(parent)
{
}
QSize StatusLabel::minimumSizeHint() const
{
QSize sz = QLabel::minimumSizeHint();
sz.rwidth() = 0;
return sz;
}
private:
StatusLabel *status_label;
status_label = new StatusLabel(this);
ui->statusBar->addWidget(status_label);
텍스트의 튀어나온 부분은 그려지지 않지만 MainWindow가 강제로 퍼지지 않습니다.
끝.
Reference
이 문제에 관하여(Qt 앱에서 상태 표시줄에 긴 텍스트를 설정하면 메인 윈도우의 폭이 넓어지는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/soramimi_jp/items/3d4e800e3d86ed216deb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)