文字過長,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();
}

截圖:
                                                    



發佈了42 篇原創文章 · 獲贊 30 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章