Qt之关于Label使用(下划线,事件跳转)

37 篇文章 1 订阅

日常小知识点总结:

1、Label的文字下部分下划线:

ui->label->setText("<u>日期</u>");


2、QLabel实现点击跳转即实现button功能:

1)网上找的QLabel单击事件

在解决问题过程中出现的曲折,做出了单击跳出对话框,但是意外发现点击其他区域也跳转,过程首先在,h中定义了一个clicked()信号:

signals:
    void clicked();

同时,声明了一个槽函数:

private slots:
    void slotclicked();

主函数中:

void MainWindow::slotclicked()
{
   QMessageBox::information(NULL,QString::fromLocal8Bit("点击"),QString::fromLocal8Bit("牛逼吗?"),QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
 
}

在保护成员函数中定义:

protected:    
    void mousePressEvent(QMouseEvent *event);
 

主函数中写了函数:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
       emit clicked();
    }
}

信号槽连接:

    connect(this,SIGNAL(clicked()),this,SLOT(slotclicked()));
 

运行代码,出现界面点击实现单击消息框,但是当我点击其他地方时,一下子发现点击界面也出现消息框,这就问题来了。

思考了一会儿,仔细将代码分析一遍终于,所谓的单击label事件事实上操作的是鼠标事件,检测鼠标事件,但检测到鼠标事件时跳出消息框。这就一下子勾起我的好奇心了,我该怎么解决呢??

经过查询了帮助文档和一些资料,确定使用鼠标双击事件

解决方法:(1)鼠标双击事件mouseDoubleClickEvent

帮助文档对双击事件定义如下:

     void Q3ScrollView::mouseDoubleClickEvent ( QMouseEvent * e ) [virtual protected]     

     Reimplemented from QWidget::mouseDoubleClickEvent().

接上面函数写:

void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(!rect().contains(event->pos()))
       return;
    if(event->button()==Qt::LeftButton)
    {
       emit clicked();
    }
}

虽然实现单击界面不跳出对话框,但是这种仍然是检测鼠标事件,不完美!!!


解决方法:(2)事件过滤法解决(QObject::eventFilter)

分析:点击鼠标弹出事件是正确的思路,但是没有过滤掉其他界面单击事件即没有指定控件弹出事件,Object有这样的一函数,事件过滤:

virtual bool QObject::eventFilter ( QObject * watched, QEvent * event );

watched为需要操作的控件,event是需要过滤的事件;

因此,需要在鼠标事件外层嵌套一层,操作代码如下:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->label)//需要操作label
    {
        if(event->type() == QEvent::MouseButtonPress)//判断事件类型
       {
          QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
          if(mouseEvent->button() == Qt::LeftButton)
          {
             QMessageBox::information(NULL,QString::fromLocal8Bit("点击"),QString::fromLocal8Bit("牛逼吗?"),QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
             return true;
          }
          return false;
        }
        return false;
    }
    return QMainWindow::eventFilter(obj, event);  
}
重写了eventFilter函数后,还 需要 安装过滤器需要调用 QObject::installEventFilter() 函数
    ui->label->setText("<u>耗子</u>");
    ui->label->installEventFilter(this);//安装事件过滤

运行结果成功,效果图如下:


解决方法:(3)将button设置为透明(transparant),即可表示label,哈哈哈


Qt中,你可以使用`QLabel`控件来显示文本,并且可以通过HTML来设置文本内容的样式,包括字体。这在需要对显示的文本进行富文本格式化时非常有用。 要使用HTML设置`QLabel`的字体,你可以使用`setHtml`方法,并在HTML字符串中使用相应的标签来设置字体属性。以下是一个简单的例子: ```cpp // 假设你有一个名为 label 的 QLabel 对象 label->setHtml("<font face='Arial'>这是一段使用Arial字体的文本</font>"); ``` 在上面的代码中,`<font>`标签用于设置文本的字体,`face`属性指定了字体的名称,你可以将`Arial`替换成任何有效的字体名称。注意,为了确保跨平台的字体兼容性,你应该使用通用的字体名称。 如果你想设置字体的大小,可以使用`size`属性: ```cpp label->setHtml("<font size='20'>这是一段字体大小为20的文本</font>"); ``` 还可以将字体样式设为粗体或斜体: ```cpp label->setHtml("<font face='Arial' size='16' style='font-weight: bold;'>粗体文本</font>"); label->setHtml("<font face='Arial' size='16' style='font-style: italic;'>斜体文本</font>"); ``` 使用`style`属性可以同时设置多种样式,例如: ```cpp label->setHtml("<font face='Arial' size='18' style='font-weight: bold; font-style: italic;'>粗斜体文本</font>"); ``` 请记住,Qt在处理HTML内容时,有些CSS属性是不支持的。所以,你需要测试你的HTML代码以确保它们在`QLabel`中能够正确显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值