总第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,调整这个函数的参数即可
本文到此结束!
如果对你有帮助,请随手 点个赞 或 点喜欢!随手点赞,手留余香!
=======================================================
欢迎【关注作者、私信作者】。我们一起交流一起进步。
=======================================================