怎么做一个电商网站吗,网站开发课程软件,淘淘乐网站建设,移动互联网开发课程设计选题继续讲一些Qt开发中的技巧操作#xff1a; 1.去掉切换按钮 QTabWidget选项卡有个自动生成按钮切换选项卡的机制#xff0c;有时候不想看到这个烦人的切换按钮#xff0c;可以设置usesScrollButtons为假#xff0c;其实QTabWidget的usesScrollButtons属性最终是应用到QTabWi…继续讲一些Qt开发中的技巧操作 1.去掉切换按钮 QTabWidget选项卡有个自动生成按钮切换选项卡的机制有时候不想看到这个烦人的切换按钮可以设置usesScrollButtons为假其实QTabWidget的usesScrollButtons属性最终是应用到QTabWidget的QTabBar对象上所以只要设置全局的QTabBar的这个属性关闭即可。为啥要设置全局的呢因为如果只是对QTabWidget设置了该属性而在QMainWindow窗体中QDockWidget合并自动形成的选项卡只有QTabBar对象导致依然是有切换按钮。
//对tabWidget设置无切换按钮
ui-tabWidget-setUsesScrollButtons(false);
//对tabBar设置无切换按钮
ui-tabWidget-tabBar()-setUsesScrollButtons(false);
//对整个系统的选项卡设置无切换按钮
QTabBar{qproperty-usesScrollButtons:false;}
//设置选项卡自动拉伸 这玩意居然之前自动计算来设置原来内置了哇咔咔
QTabBar{qproperty-expanding:false;}
//设置选项卡关闭按钮可见
QTabBar{qproperty-tabsClosable:true;}
//还有其他属性参见QTabBar头文件有惊喜
//依旧是万能大法所有可视化类的 Q_PROPERTY 包含的属性都可以这样设置2.直接传样式文件 Qt设置样式表支持直接传入样式表文件路径亲测4.7到5.15任意版本通过查看对应函数的源码可以看到内部会检查是否是 ‘file:///’ 开头是的话则自动读取样式表文件进行设置无需手动读取。
//以前都是下面的方法
QFile qss(:/qss/qssStyle/MainStyle.qss);if (qss.open(QFile::ReadOnly)){QString style QLatin1String(qss.readAll());this-setStyleSheet(style);qss.close();}else{WriteLocalLog(qss open failed);}
//其实一行代码就行
qApp-setStyleSheet(file:///:/qss/qssStyle/MainStyle.qss);
//特别说明只支持qApp-setStyleSheet 不支持其他比如widget-setStyleSheet
//像下面这样就不行
ui-widget-setStyleSheet(file:///:/qss/qssStyle/MainStyle.qss);3.设置字体 在Qt中设置字体这块我们经常都会经历一个误区本来是打算设置整个窗体包括子控件的字体大小的结果发现只有主窗体自己应用了字体而子控件没有其实是我们需要搞清楚我们设置给了谁。
//假设继承自父类类型QWidget的窗体myWidget作为主窗体,myWidget中有QLabelQPushButton等子控件默认字体12px
//下面几种方法只会设置主窗体的字体子控件不会应用需要按个调用setFont
QFont font;
font.setPixelSize(20);
this-setFont(font);
this-setStyleSheet({font:26px;});
//this设置给了QWidget类型的窗体
this-setStyleSheet(QWidget{font:26px;});
//this设置给了myWidget的窗体
this-setStyleSheet(myWidget{font:26px;});//下面才是通过样式表设置整个控件子控件的字体
this-setStyleSheet(font:26px;);
this-setStyleSheet(*{font:26px;});
this-setStyleSheet(QWidget*{font:26px;});
this-setStyleSheet(myWidget*{font:26px;});
//下面设置全局字体因为qApp是代表整个应用程序的
qApp-setFont(font);4.QImage超强 Qt中封装的QImage异常的强大提供了各种图片格式的转换还可以对每个像素的颜色值进行替换有时候我们需要将单色的图片换成另外一种颜色要注意的是如果带有透明值的颜色需要进行格式转化比如转成Format_ARGB32或者Format_RGBA8888
//pixel 函数获取像素点的颜色 setPixel 函数设置像素点的颜色 此函数任意Qt版本都有
//pixelColor 函数获取像素点的颜色 setPixelColor 函数设置像素点的颜色 此函数Qt5.6以后才有
//pixel函数取出来的是QRgb格式需要用 qRed qGreen qBlue qAlpha 进行转换
QImage image(test.png);
image image.convertToFormat(QImage::Format_ARGB32);
int width image.width();
int height image.height();
//遍历图像的每一个像素
for (int x 0; x width; x)
{for (int y 0; y height; y){QString name image.pixelColor(x, y).name();//将白色以外的颜色全部替换成红色,比如证件照白底变红底牛吧if (name #ffffff){image.setPixelColor(x, y, Qt::red);}}
}
//保存文件
image.save(2.png);QImage 很有很多强大的功能在“qimage.h”中很多的接口多看看多试试。 5.巧用Qt的全局对象 Qt内置了很多全局的对象参数可以直接获取这样在使用的时候方便的不要不要的比如判断当前鼠标左键还是右键可以直接用qApp-mouseButtons()全局的鼠标坐标可以用QCursor::pos()还有我们常见的颜色色值等。
//在鼠标右键的地方弹出菜单如果菜单是QMenu而不是QAction则只能通过下面的方式弹出
if (qApp-mouseButtons() Qt::RightButton)
{videoMenu-exec(QCursor::pos());
}
//全局剪切板
qApp-clipboard();
//顶层控件对象集合
qApp-topLevelWidgets()
//当前焦点所在控件
qApp-focusWidget()
//当前平台名称
qApp-platformName()
//调用系统蜂鸣器
qApp-beep()
//打印当前Qt版本信息
qApp-aboutQt()
//设置全局的鼠标样式
qApp-setOverrideCursor()
//不使用系统的标准颜色字体等
QGuiApplication::setDesktopSettingsAware(bool on);
QApplication app(argc, argv);
//更多的全局对象属性等可以查阅 qguiapplication.h 头文件你会发现新大陆更多的全局对象属性等可以查阅 qguiapplication.h 头文件说不定有你要的惊喜。 6.信号槽断连 有时候需要暂时停止某个控件发射信号比如下拉框combobox添加数据的时候会触发当前元素改变信号或者停止信号槽之间的连接关系有多种处理推荐用 blockSignals 方法
//方法1先 disconnect 掉信号处理好以后再 connect 信号缺点很明显很傻如果信号很多每个型号都要这么来一次。
disconnect(ui-cbox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_cbox_currentIndexChanged(int)));
for (int i 0; i 100; i)
{
ui-cbox-addItem(QString::number(i));
}
connect(ui-cbox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_cbox_currentIndexChanged(int)));
//方法2先调用 blockSignals(true) 阻塞信号处理号以后再调用 blockSignals(false)恢复所有信号。
//如果需要指定某个信号进行断开那就只能用 disconnect 来处理。
ui-cbox-blockSignals(true);
for (int i 0; i 100; i)
{
ui-cbox-addItem(QString::number(i));
}
ui-cbox-blockSignals(false);7.低量数据就用sqlite Qt在数据库相关的应用中如果仅仅是单机版本没有特别的需要,建议就使用sqlite数据库尤其是一些单机版的嵌入式的千万级别以内的数据量只要客户不指定就用sqlite。Qt内置了sqlite数据库只需要发布的时候带上插件就行其他数据库要么还要带上动态库要么还需要创建数据源毕竟是内置的在速度上绝对无与伦比的出类拔萃几千万的数据量完全没问题而且速度和性能都还可以所以数据量建议千万级别以下着重注意数据库表和索引的设计sqlite数据库也有几个重大缺点不支持加密不支持网络访问不支持部分数据库高级特性不支持海量数据亿级别以上但是对于绝大部分Qt项目还是足够记住Qt中数据库支持友好度大致是 sqlite postgresql mysql odbc。