問題描述:
在使用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();
}
截圖: