问题描述:
在使用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();
}
截图: