QLabel控件提供了一个文本或图片的显示。
QLabel是用来显示一个文本或一个图像。没有用户交互功能提供。标签的外观可以通过各种方式配置,它可以用于其他窗口的助记键指定焦点。
QLabel的继承关系为
QObject Class and QPaintDevice Class->QWidget Class->QFrame Class->QLabel Class
创建一个QLabel对象:
QLabel * label = new QLabel(this); //创建堆对象
显示文本:
label->setText("some text");
// 或
label->setText(str);
显示图片:
QPixmap pix = QPixmap("E:\QTpro\farmer\1.png");
label->setPixmap(pix);
// 或
label->setPixmap(QPixmap("E:\\QTpro\\farmer\\1.png"));
// 或
QImage * image = new QImage("./pic.jpg");
label->setPixmap(QPixmap::fromImage(image));
//中途换图片
image->load("./pic2.jpg");
label->show();
显示动画:
QMovie* movie = new QMovie("new.png"); //绘制jpeg的图片也是可以的
// 或
QMovie* movie = new QMovie("new.gif"); //绘制动画也是可以的
movie->start();
label.setMovie(movie);
设置框架样式(setFrameStyle函数由QFrame继承),对齐方式,
label->setFrameStyle(QFrame::NoFrame | QFrame::Raised); // 设置框架样式
label->setAlignment(Qt::AlignCenter);// 设置对齐方式为居中
设置字体颜色有四种方法:
第一种是使用setPalette()方法:
QPalette palette = label->palette(); // 获取调色板
palette.setColor(QPalette::WindowText, QColor(Qt::red)); // 设置字体颜色
// 或
// 使用QMovie时要设置QLabel背景透明,
palette.setColor(QPalette::Background, QColor(0x00, 0xff, 0x00, 0x00));
label->setPalette(palette); // 设置调色板
第二种是使用样式表:
label->setStyleSheet("color:red;");
label->setStyleSheet("color:#ff6600;");
第三种是可以使用QStyle(没用过):
在Qt Demo中有一个很好的讲解QStyle的例子,可以参考学习。
第四种是使用HTML样式:实现同一个label有不同的字体样式
label = new QLabel("<h2><i>Hello</i><font color=red>Qt!</font></h2>");
设置字体,大小:
QFont font;
font.setPointSize(12); // 设置字号
label->setFont(font); // 设置字体
// 或
label.setFont(QFont("Timers", 28, QFont::Bold));
自动适应文本的大小:
label->adjustSize();
设置QLabel显示位置:
label->setGeometry(x,y,w,h );
自动判断并换行:
label->setGeometry(QRect(328, 240, 329, 27*4)); //四倍行距
label->setWordWrap(true);
label->setAlignment(Qt::AlignTop);
设置不显示任务栏
label->setWindowFlags(Qt::FramelessWindowHint); //设置不显示任务栏
设置快捷键(官方给的代码):
QLineEdit *phoneEdit = new QLineEdit(this);
QLabel *phoneLabel = new QLabel("&Phone:", this);
phoneLabel->setBuddy(phoneEdit);
// 则可以通过“ALT+P”激活phoneEdit
超链接设置
一种是打开外部连接功能:
lebel->setOpenExternalLinks(true); // 关键
lebel->setText("<a href=\"http://www.csdn.net/\">CSDN</a>");
label.show();
一种是
label->setText("<a href=\"http://www.csdn.net/\">CSDN</a>");
label->setFixedSize(200,100);
label->move(10,10);
label->show();
connect(label, SIGNAL(linkActivated(QString)), this, SLOT(openUrl(QString)));
// 在.h里面定义一个槽private slots:
// void openUrl(QString url);
void Widget::openUrl(QString url)
{
QDesktopServices::openUrl(QUrl(url));
}
借鉴:
Qt入门-QLabel类http://blog.csdn.net/xgbing/article/details/7762331
[喝小酒的网摘]
QT实现QLabel上的超链接http://blog.csdn.net/robertkun/article/details/20562341
Qt帮助:Qt 5.4->Qt Widgets->C++ Classes->QLabel
制作可水平滚动式的栏目
方式一:关键思路:
- 计算字符串长度、继承一个QLabel、利用定时器动态滚动
QLabel::setText(convertQcRuleToHtmlStr(m_original_text));
QFontMetrics fontMetrics(this->font());//this 继承QLabel
int textWidth = fontMetrics.width(m_original_text);//字符串长度,
if(textWidth > this->width())//超出长度
{
startScroll();//循环滚动
}
//定时器滚动槽函数
//m_original_text 当前字体
//m_curScrollIndex 最大滚动长度
//tailSpaceCount 尾部添加空格数
void Warning::updateIndex()
{
QString left_text = m_original_text.mid(m_curScrollIndex);
int spCnt = m_curScrollIndex > m_original_text.length() ? tailSpaceCount - (m_curScrollIndex - m_original_text.length()) : tailSpaceCount;
for(int i = 0; i < spCnt; i++)
left_text.append(" ");
QString right_text = m_original_text.left(m_curScrollIndex);
QString show_warn = convertQcRuleToHtmlStr(left_text);//格式化处理
QFontMetrics fontMetrics(this->font());
int left_width = fontMetrics.width(left_text);
if(left_width < this->width())
{
show_warn = convertQcRuleToHtmlStr(QString("%1%2").arg(left_text).arg(right_text));
}
QLabel::setText(show_warn);
m_curScrollIndex++;
if (m_curScrollIndex > m_original_text.length() + tailSpaceCount) {
m_curScrollIndex = 0;
}
}
另外一种方式:
void btFault::setText(QString message)
{
m_original_text = message;
if(message.isEmpty())
return;
if(m_scrollTimer->isActive())
m_scrollTimer->stop();
m_curScrollIndex = 0;
QPushButton::setText(message);
QFontMetrics fontMetrics(font());
int textWidth = fontMetrics.width(message);
if(width() - textWidth > 5)
tailSpaceCount = (width() - textWidth) / fontMetrics.width(" ");
else
tailSpaceCount = 5;
m_scrollTimer->start(timerInterval);
}
void btFault::updateIndex()
{
QString leftText = m_original_text.mid(m_curScrollIndex);
int spCnt;
if(m_curScrollIndex > m_original_text.length())
spCnt = tailSpaceCount - (m_curScrollIndex - m_original_text.length());
else
spCnt = tailSpaceCount;
for(int i = 0; i<spCnt; ++i)
leftText.append(" ");
QString rightText = m_original_text.left(m_curScrollIndex);
QString message = leftText;
QFontMetrics fontMetrics(font());
int leftWidth = fontMetrics.width(leftText);
if(leftWidth < width())
message = leftText+rightText;
QPushButton::setText(message);
++m_curScrollIndex;
if(m_curScrollIndex > m_original_text.length() +tailSpaceCount){
m_curScrollIndex = 0;
emit showAll();
}
}