记得才学Qt的时候做了一个键盘,当时对Qt的样式还是不太熟悉,为了实现上面符号+下面数字的键盘效果,用PS做了一套图……下图蓝框中的几个QPushButton实质上都是贴图。
当时原本是准备用QPushButton设置两行Text,并显示不同样式,然后没做到,只能实现换行但改不了文字样式,后来就只能贴图了,文字换行的代码是这样的:
btn->setText("Test1\r\nTest2");
今天做上面图标+下面文字的QPushButton时,突然想到了以前没填完的这个坑,特地翻出这个键盘程序,缅怀一下在EFORT实习的这段经历,以及填完坑。
方法其实很简单,引入HTML的语法,既然Qt中可以用qss,那当然也可以用HTML。下面的代码创建了一个QLabel,用HTML设置了其中的文字,实现了多行文字显示不同样式的功能。嫌弃文字不居中的也可以加个HTML上的<center>。这里选择用QLabel而不用QPushButton是因为QPushButton对HTML样式无效,勉强用QLabel代替一下。
QLabel *label = new QLabel(this);
label->setText("<font style = 'font-size:15px; color:#FF0000;'> Test </font>"
"<br/>"
"<font style = 'font-size:20px; color:#00FF00; font-weight:bold'> Text </font>");
label->setStyleSheet("border:2px solid blue; border-radius:10px");
效果如下:
这里有个弊端,就是QLabel并不像QPushButton一样自带点击事件 ,所以要手动添加点击事件,有下面两种方法:
- 使用eventFilter事件过滤器;
- 提升控件,继承QLabel,重写mousePressEvent()函数。