文字过长,QLabel显示不全的问题

问题描述:
在使用Qt进行界面设计的时候,拖动QLabel控件到界面上后,由于QLabel的大小此时是固定的,所以在程序中要更改QLabel里面文字的时候,如果文字比较长,就会发生文字被截断的问题。

分析和解决办法:
其实这个出现这个问题是因为QLabel的大小被固定了,或者是在ui设计的时候只是拖动了QLabel控件到界面上,但界面并没有进行布局。如果完全使用代码来设计界面,只要不固定QLabel的大小就好,如果使用Designer来设计界面,那么一定要布局。

例子:
ererciseDialog.cpp文件

#ifndef EXERCISEDIALOG_H
#define EXERCISEDIALOG_H

#include <QtGui>
#include <QObject>

class exerciseDialog : public QDialog
{
    Q_OBJECT
public:
    exerciseDialog(QWidget *parent = 0);

public slots:
    void changeText();

private:
    QLabel *label;
    QPushButton *button;

};

QString getText();


#endif // EXERCISEDIALOG_H

ererciseDialog.cpp文件

#include "exerciseDialog.h"

exerciseDialog::exerciseDialog(QWidget* parent) : QDialog(parent)
{
    label =  new QLabel(QObject::tr("初始文本"));
    label->setMaximumWidth(100);
    /*自适应大小,可有可无*/
    label->adjustSize();
    /*自动换行*/
    label->setWordWrap(true);
    button = new QPushButton(tr("改变文本"));
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addStretch();
    layout->addWidget(button);
    QVBoxLayout *mainlayout = new QVBoxLayout;
    mainlayout->addWidget(label);
    mainlayout->addLayout(layout);
    this->setLayout(mainlayout);
    /*让对话框大小总是以最合适的大小显示*/
    this->layout()->setSizeConstraint(QLayout::SetFixedSize);

    connect(button, SIGNAL(released()), this, SLOT(changeText()));
}

void exerciseDialog::changeText()
{
    label->setText(getText());
    this->layout()->setSizeConstraint(QLayout::SetFixedSize);
    return ;
}

QString getText()
{
    static int  i = 0;
    QString str;
    if(i%3 == 0)
        str = QObject::tr("好好学习!");
    else if(i%3 == 1)
        str = QObject::tr("生活是道菜,味道让人爱!");
    else
        str = QObject::tr("毕竟西湖六月中,风光不与四时同。接天莲叶无穷碧,映日荷花别样红。");
    i++;
    return str;
}

main.cpp文件

#include <QtGui>
#include <QString>
#include <QTextCodec>
#include "exerciseDialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    /*设置编码格式*/
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

    exerciseDialog *dialog = new exerciseDialog;
    dialog->show();

    return a.exec();
}

截图:
                                                    



  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值