Qt 앱에서 상태 표시줄에 긴 텍스트를 설정하면 메인 윈도우의 폭이 넓어지는 문제

5000 단어 C++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가 강제로 퍼지지 않습니다.

끝.

좋은 웹페이지 즐겨찾기