我需要使用 QLabel 显示文本,并满足以下要求:
我尝试将带有 sizePolicy(首选,首选)的 QLabel 和带有 sizePolicy(扩展,最小值)的 QSpacerItem 放入 QHBoxLayout 中。
我希望文本在到达右侧之前不会换行。
但我发现文本在到达右侧之前就被换行了。
如何防止这种不必要的自动换行?
这个问题是关于类似的问题,但是没有布局。
wordWrap。要触发标签的大小更改,您可以通过补充 from 来制作自定义标签QLabel。下面是一个例子。当文本添加到标签时。最初设置自动换行为 false,它将扩展直至达到帧大小。如果超过了帧大小,则自动换行设置为 true。
mylabel.h
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
class MyLabel : public QLabel
{
Q_OBJECT
public:
explicit MyLabel();
~MyLabel();
signals:
void labelSizeChange();
protected slots:
void resizeEvent(QResizeEvent *);
};
#endif // MYLABEL_H
Run Code Online (Sandbox Code Playgroud)mylabel.cpp
#include "mylabel.h"
MyLabel::MyLabel():QLabel()
{
}
MyLabel::~MyLabel()
{
}
void MyLabel::resizeEvent(QResizeEvent *)
{
emit labelSizeChange();
}
Run Code Online (Sandbox Code Playgroud)主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCore>
#include <mylabel.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void lableSettings();
void on_pbShort_clicked();
void on_pbMedium_clicked();
void on_pbLong_clicked();
void addTextToLabel(QString text);
private:
Ui::MainWindow *ui;
MyLabel myLabel;
QString lorem;
};
#endif // MAINWINDOW_H
Run Code Online (Sandbox Code Playgroud)主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->horizontalLayout->addWidget(&myLabel);
ui->horizontalLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding));
myLabel.setStyleSheet("Background-color:black;color:white");
myLabel.setWordWrap(false);
myLabel.setMinimumWidth(0);
myLabel.setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
connect(&myLabel,SIGNAL(labelSizeChange()),this,SLOT(lableSettings()));
lorem ="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addTextToLabel(QString text)
{
myLabel.setWordWrap(false);
myLabel.setMinimumWidth(0);
myLabel.setText(text);
}
void MainWindow::lableSettings()
{
if(myLabel.width()> ui->frame->width()-20)
{
myLabel.setWordWrap(true);
myLabel.setMinimumWidth(ui->frame->width()-20);
// Note the value 20 depends on the layout spacing
//between the Horizontal layout and the frame.
//If this value is less. The whole windo will start resizing.
}
}
void MainWindow::on_pbShort_clicked()
{
addTextToLabel(lorem.left(15));
}
void MainWindow::on_pbMedium_clicked()
{
addTextToLabel(lorem.left(150));
}
void MainWindow::on_pbLong_clicked()
{
addTextToLabel(lorem);
}
Run Code Online (Sandbox Code Playgroud)GUI布局:框架内的HorizontalLayout。
