QLabel 使用

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();
	}
}  

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值