qt lineedit获取内容_Qt开发中的几个关键知识点,收藏以备参考

af5e4823e8a9f1330fe1c3cb09e58bab.png

总第15篇

本文主要总结了用Qt框架做项目开发的过程中,比较关键的几个知识点,深入总结并收录于此,以防止后面忘记了可以快速查找。读完此文,你也可以收藏之,以备后面的开发工作中可以快速查找。

1.获取当前系统中Qt所支持的字体

获取当前系统中所支持的字体信息可以使用QFontDatabase类,其具体的实现代码示例如下:

QFontDatabase database;  
   foreach (QString strFamily, database.families()) {  
      qDebug() <<"family:" << strFamily;  
      foreach (QString strStyle, database.styles(strFamily)) {  
         qDebug() << "-----style:" << strStyle;  
      }  
   }  

通过下面的语句可以获取系统中所有支持中文的字体名称:

QFontDatabase database;    
foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))     
{    
    qDebug()<<family;    
}    

2. 处理程序中的中文乱码问题

可以使用QTextCodec来指定程序的编码规则,从而来处理程序中的乱码。其示例代码如下:

QTextCodec *codec = QTextCodec::codecForName("system");  //获取系统编码
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(codec);

3.获取系统文件的图标

QFileIconProvider专门提供访问目录和文件系统模型的图标的访问接口。获取文件夹的图标和获取特定文件的图标都是非常简单的。示例代码如下:

//获取文件夹图标
 QFileIconProvider icon_provider;
 QIcon icon = icon_provider.icon(QFileIconProvider::Folder);

//获取特定文件的图标
QFileInfo file_info(name);
QFileIconProvider icon_provider;
QIcon icon = icon_provider.icon(file_info);

4.QLineEdit设置错误提示信息的方法

设置错误提示信息用的是QToolTip类中的showText()接口函数来实现的,此类可以为任何窗口提供一个小的提示tips窗口。在QLineEdit中一般是用信息textEdited()信号。例如,设定输入框的输入值范围为0-3000,若不在范围内,会进行提示。具体的槽函数实现如下:

void onLineEdit_textEdited(const QString &text)
{
    ui->lineEdit->setValidator(new QDoubleValidator(0, 3000, 2));  //设置验证器
    if(text.toDouble()<0 || text.toDouble()>3000)
    {
        QToolTip::showText(ui->lineEdit->mapToGlobal(QPoint(100, 0)), "范围应该是0-3000");
        ui->lineEdit->setStyleSheet("QLineEdit{border:1px solid red}");
    }
    else
    {
        ui->lineEdit->setStyleSheet("QLineEdit{border:1px solid gray border-radius: 1px }");
    }
}

5. 阴影窗口的实现方法

阴影窗口的实现方法一般有三种,方法一是:在窗口的构造函数中设置窗口的属性为:

setAttribute(Qt::WA_TranslucentBackground);

从而保证窗口不被绘制的部分透明化。接着重写绘制函数paintEvent(),其代码示例如下:

void QT_Test::paintEvent(QPaintEvent *event)
{
    QPainterPath path;
    path.setFillRule(Qt::WindingFill);
    path.addRect(10, 10, this->width()-20, this->height()-20);
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.fillPath(path, QBrush(Qt::white));

    QColor color(0, 0, 0, 50);
    for(int i=0; i<10; i++)
    {
        QPainterPath path;
        path.setFillRule(Qt::WindingFill);
        path.addRect(10-i, 10-i, this->width()-(10-i)*2, this->height()-(10-i)*2);
        color.setAlpha(150 - qSqrt(i)*50);
        painter.setPen(color);
        painter.drawPath(path);
    }
}

方法二是用一个阴影窗口来覆盖在原窗口上,或者用一张阴影的背景图片来重画窗口。这里不再具体说明。

方法三是通过QFrame + QGraphicsDropShadowEffect的方式实现。其代码示例如下:

QFrame *frame = new QFrame(this);
frame->setStyleSheet("QFrame{background-color: rgb(255, 255, 255);border-radius:10px}"); //设置圆角与背景透明
frame->setGeometry(5, 5, this->width() - 5, this->height() - 5);//设置有效范围框
QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this);
shadow_effect->setOffset(0, 0);
shadow_effect->setColor(Qt::black);
shadow_effect->setBlurRadius(10);
frame->setGraphicsEffect(shadow_effect);

this->setAttribute(Qt::WA_TranslucentBackground);
//若没有效果,可能是设置了setContentsMargins,调整这个函数的参数即可

本文到此结束!

如果对你有帮助,请随手 点个赞 点喜欢!随手点赞,手留余香!

=======================================================

欢迎【关注作者、私信作者】。我们一起交流一起进步。

=======================================================

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值