Qlabel 自定义鼠标点击事件以及文本样式效果设计
2016-10-12 13:48
1486 查看
需要设计的效果是:
1、标题、内容以及图片均具有点击的效果;
2、鼠标放置在标题和内容上,文字变色并且高亮显示,无需下划线;
3、鼠标的形状:在放置在标题和内容上时由箭头变成小手指。
整个窗体采用QWidget类型,标题、内容、图片采用QLabel类型。当我实现文本点击时,发现QLabel没有像button那样的clicked信号,网上推荐了如下两种方法:
1、在标题中嵌入html标签:
QString title = "href='www.baidu.com'>百度"
ui.Title->setText(title)
setOpenExternalLinks(true) // 允许打开外部链接,这个可在ui文件中通过可视化工具设置(我用的是VS插件Qt设计师)
但这种方式存在两个个问题:1)无法支持鼠标hover效果;2)它会继承html超链接的内部样式:blue underline。
我试图在qss文件中设置样式,但无法改变其内置样式。也可以在a标签中直接设置style样式,但这只能解决第二个问题。
2、自定义实现QLabel以及clicked 信号,然后通过qss设置QLabel的文本样式以及hover效果:
1)自定义QLabel:
class ActivityLabel : public QLabel
{
Q_OBJECT
public:
ActivityLabel(QWidget * parent = 0);
~ActivityLabel(void);
protected:
void mouseReleaseEvent(QMouseEvent * ev);
signals:
void clicked();
};
void ActivitiLabel::mouseReleaseEvent(QMouseEvent
* ev)
{//定义鼠标左键点击事件
if(ev->button() == Qt::LeftButton)
{
Q_UNUSED(ev)
emit clicked();
}
}
并将ui文件中的控件类型设置为自定义的QLabel类型,这样就解决QLabel不支持clicked事件的问题。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/848298d5a601b875b1fd5c6c49e3990a)
2)在qss中设置title的文本样式和hover效果
QLabel#Title
{
background-image:
url(:/ActivitiForm/Resources/act_content_bg.png);
font:
bold 13px "微软雅黑";
color:
black;
}
QLabel#Title:hover
{
color:blue;
}
3)定义与clicked信号对应的槽:
void
ActivitiForm::onDetailClicked()
{
QUrl url(activiti->getPageLink());
QDesktopServices::openUrl(url);
}
connect(ui.Title,SIGNAL(clicked()),this,SLOT(onDetailClicked()));
4)设置QLabel控件的鼠标形状:
Title->setCursor(QCursor(Qt::PointingHandCursor));
或者通过qt设计师设置:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/fd98ed99de60157ccba963149759d055)
5)设置自动换行显示:
ui.Content->setText(content);
ui.Content->adjustSize();
注意这两条代码的顺序。
除了换行,我们还需要设置Content框的大小:长的大小固定,宽可以任何调整,具体设置如下:
QSizePolicy sizePolicy1(QSizePolicy::Preferred,
QSizePolicy::Preferred);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(20);
sizePolicy1.setHeightForWidth(Content->sizePolicy().hasHeightForWidth());
Content->setSizePolicy(sizePolicy1);
Content->setMinimumSize(QSize(121, 0));
Content->setMaximumSize(QSize(121, 90));
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/aa957ef642a0cb6479307d7f0472f547)
6)QLabel中中文乱码的处理:
QByteArray content = reply_->readAll();
//读取网络字节流
QTextCodec *codec = QTextCodec::codecForLocale(); //将编码方式设置成本地编码方式
QString contentQStr = codec->toUnicode(content); //使用编码器进行转码
注:当时有将codec强行设置成gbk的编码方式,但程序运行后发现bug,还不知道问题出在哪。
原文地址:http://blog.csdn.net/kohaku/article/details/24551287
1、标题、内容以及图片均具有点击的效果;
2、鼠标放置在标题和内容上,文字变色并且高亮显示,无需下划线;
3、鼠标的形状:在放置在标题和内容上时由箭头变成小手指。
整个窗体采用QWidget类型,标题、内容、图片采用QLabel类型。当我实现文本点击时,发现QLabel没有像button那样的clicked信号,网上推荐了如下两种方法:
1、在标题中嵌入html标签:
QString title = "href='www.baidu.com'>百度"
ui.Title->setText(title)
setOpenExternalLinks(true) // 允许打开外部链接,这个可在ui文件中通过可视化工具设置(我用的是VS插件Qt设计师)
但这种方式存在两个个问题:1)无法支持鼠标hover效果;2)它会继承html超链接的内部样式:blue underline。
我试图在qss文件中设置样式,但无法改变其内置样式。也可以在a标签中直接设置style样式,但这只能解决第二个问题。
2、自定义实现QLabel以及clicked 信号,然后通过qss设置QLabel的文本样式以及hover效果:
1)自定义QLabel:
class ActivityLabel : public QLabel
{
Q_OBJECT
public:
ActivityLabel(QWidget * parent = 0);
~ActivityLabel(void);
protected:
void mouseReleaseEvent(QMouseEvent * ev);
signals:
void clicked();
};
void ActivitiLabel::mouseReleaseEvent(QMouseEvent
* ev)
{//定义鼠标左键点击事件
if(ev->button() == Qt::LeftButton)
{
Q_UNUSED(ev)
emit clicked();
}
}
并将ui文件中的控件类型设置为自定义的QLabel类型,这样就解决QLabel不支持clicked事件的问题。
2)在qss中设置title的文本样式和hover效果
QLabel#Title
{
background-image:
url(:/ActivitiForm/Resources/act_content_bg.png);
font:
bold 13px "微软雅黑";
color:
black;
}
QLabel#Title:hover
{
color:blue;
}
3)定义与clicked信号对应的槽:
void
ActivitiForm::onDetailClicked()
{
QUrl url(activiti->getPageLink());
QDesktopServices::openUrl(url);
}
connect(ui.Title,SIGNAL(clicked()),this,SLOT(onDetailClicked()));
4)设置QLabel控件的鼠标形状:
Title->setCursor(QCursor(Qt::PointingHandCursor));
或者通过qt设计师设置:
5)设置自动换行显示:
ui.Content->setText(content);
ui.Content->adjustSize();
注意这两条代码的顺序。
除了换行,我们还需要设置Content框的大小:长的大小固定,宽可以任何调整,具体设置如下:
QSizePolicy sizePolicy1(QSizePolicy::Preferred,
QSizePolicy::Preferred);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(20);
sizePolicy1.setHeightForWidth(Content->sizePolicy().hasHeightForWidth());
Content->setSizePolicy(sizePolicy1);
Content->setMinimumSize(QSize(121, 0));
Content->setMaximumSize(QSize(121, 90));
6)QLabel中中文乱码的处理:
QByteArray content = reply_->readAll();
//读取网络字节流
QTextCodec *codec = QTextCodec::codecForLocale(); //将编码方式设置成本地编码方式
QString contentQStr = codec->toUnicode(content); //使用编码器进行转码
注:当时有将codec强行设置成gbk的编码方式,但程序运行后发现bug,还不知道问题出在哪。
原文地址:http://blog.csdn.net/kohaku/article/details/24551287
相关文章推荐
- Qt-Qlabel 自定义鼠标点击事件以及文本样式效果设计
- IOS自定义系统导航栏:导航栏背景色、状态栏样式以及是否隐藏、拦截系统导航栏的返回点击事件
- Android中使用自定义selector来实现view的点击效果以及view的显示样式
- IOS自定义系统导航栏:导航栏背景色、状态栏样式以及是否隐藏、拦截系统导航栏的返回点击事件
- 博客园自定义页面风格设计 后续篇(页面设计模式及代码高亮 鼠标点击效果升级)
- MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件
- IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果
- 自定义图形以及点击效果
- Android开发 图片轮播条Lanner(可无限滚动循环,自定义dots样式位置,延迟时间,滚动时间,点击事件)
- 图片定义的title提示信息的样式以及提示信息跟随鼠标的移动而移动的效果
- [PyQt] 自定义QSlider支持鼠标点击和滚轮事件
- 自定义adapter的基础上Listview优化方案以及几个小错误(checkbox吃掉点击事件以及对象重复问题)
- RadioButton自定义样式及点击事件全解析
- AWT/Swing中处理鼠标双击(多击)以及右键点击的事件处理办法
- 自定义ViewGroup (支持margin,gravity以及水平,垂直排列,滑动和点击事件)
- 在vc中如何实现对静态文本的鼠标点击事件的处理?
- 嵌入式 QT code :-10737418以及自定义鼠标和键盘事件和图片问题
- 为鼠标点击事件添加全局效果处理
- IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果
- JS自定义滚动条效果+鼠标滚轮事件