有没有做淘宝的网站,响应式布局概念,企业管理软件排名,无烟锅网站规划与建设继续讲一些Qt开发中的技巧操作#xff1a; 1.文字的分散对齐 有时候需要对文本进行分散对齐显示#xff0c;相当于无论文字多少#xff0c;尽可能占满整个空间平摊占位宽度#xff0c;但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Qt::Align…继续讲一些Qt开发中的技巧操作 1.文字的分散对齐 有时候需要对文本进行分散对齐显示相当于无论文字多少尽可能占满整个空间平摊占位宽度但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Qt::AlignVCenter)设置分散对齐会发现没有任何效果这个时候就要考虑另外的方式比如通过控制字体的间距来实现分散对齐效果。
QString text 测试分散对齐内容;
//计算当前文本在当前字体下占用的宽度
QFont font ui-label-font();
int textWidth ui-label-fontMetrics().width(text);
//显示文本的区域宽度标签的宽度-两边的边距
int width ui-label-width() - 12;
//需要-1相当于中间有几个间隔
int count text.count() - 1;
//计算每个间距多少
qreal space qreal(width - textWidth) / count;
//设置固定间距
font.setLetterSpacing(QFont::AbsoluteSpacing, space);
ui-label-setFont(font);
ui-label-setText(text);2.设置动态库路径 Qt提供的设置动态库路径的方法setLibraryPaths是用来搜索插件动态库的而不是程序直接依赖的动态库很多人以为这个可以设置Qt的库或者程序中依赖的第三方库的路径其实想想也知道因为程序依赖这个库找不到的话根本跑不起来程序跑不起来怎么应用执行这个代码呢Qt默认是可用通过setLibraryPaths的方式设置Qt插件的动态库目录位置比如数据库插件sqldrivers软键盘的插件库等等因为这些库文件是真正在Qt程序跑起来以后通过插件形式去加载的还可以通过qt.conf文件设置 Plugins“config” 指定所有插件在可执行文件下的config目录下要想设置程序直接依赖的动态库在其他目录找遍所有也只有一个办法那就是设置环境变量除此别无他法。至于如何设置环境变量方式很多比如手动在电脑上设置或者搞个批处理文件执行命令行在程序安装的时候自动执行或者程序打包目录下用户手动运行这个批处理。最终找插件的路径其实就是这个 QT_PLUGIN_PATH 环境变量设置插件的目录还可以通过在main函数最前面这样写来实现。 int main(int argc, char *argv[])
{//启动键盘Qt默认键盘qputenv(QT_IM_MODULE, QByteArray(qtvirtualkeyboard));QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}3.进度条控件的文本 进度条控件如果设置的垂直方向就算你设置了文本可见会发现根本看不到进度文本经过多方百折不挠的试探以及查看其他大佬的文章发现只要设置下border样式border:1px solid #ff0000、border:none、border-style:solid、border-radius:0px 任意一种就行就可以把文本显示出来 4.文件对话框的卡顿 我们在使用QFileDialog::getOpenFileName、QFileDialog::getExistingDirectory等方法时有时候会发现首次打开很卡尤其是在默认目录很多文件的时候此时你可以考虑设置这些函数最末尾的参数为QFileDialog::DontUseNativeDialog表示不采用本地系统对话框这样的话会采用Qt的对话框速度快很多估计系统的对话框在打开的时候会做很多初始化加载处理
QFileDialog::getOpenFileName(this, , , , 0, QFileDialog::DontUseNativeDialog);
QFileDialog::getExistingDirectory(this, , , QFileDialog::DontUseNativeDialog);5.滑块控件的进度颜色 滑块控件QSlider如果设置的垂直样式其进度颜色和剩余颜色刚好和横向样式的颜色相反的不确定这个是否是Qt的BUGQt各版本都存在这个现象
QSlider::groove:horizontal{
height:8px;
background:#FF0000;
}
QSlider::add-page:horizontal{
height:8px;
background:#FF0000;
}
QSlider::sub-page:horizontal{
height:8px;
background:#00FF00;
}
QSlider::handle:horizontal{
width:10px;
background:#0000FF;
}
QSlider::groove:vertical{
width:8px;
background:#FF0000;
}
QSlider::add-page:vertical{
width:8px;
background:#00FF00;
}
QSlider::sub-page:vertical{
width:8px;
background:#FF0000;
}
QSlider::handle:vertical{
height:10px;
background:#0000FF;
}6.停靠窗体的排列 QMainWindow 在对停靠窗体进行排列的时候有些不常用的设置容易遗忘建议将QMainWindow 的头文件函数过一遍一目了然
//设置允许各种嵌套比如上下排列左右排列非常灵活
//此设置会和下面的 setDockOptions 中的参数覆盖所以要注意顺序
//this-setDockNestingEnabled(true);
//设置停靠参数,不允许重叠,只允许拖动和嵌套
this-setDockOptions(AnimatedDocks | AllowNestedDocks);
//将底部左侧作为左侧区域底部右侧作为右侧区域否则底部区域会填充拉伸
this-setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
this-setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);7.拖拽事件的坑 很多人以为拖曳只要在dropEvent事件就可以了其实不行的没有效果的需要先在 dragEnterEvent事件中执行event-accept()才行不然根本没有效果很多人尤其是初学者都挂在这里我在这里也掉过坑。
void frmMain::dropEvent(QDropEvent *event)
{QListQUrl urls event-mimeData()-urls();
}
void frmMain::dragEnterEvent(QDragEnterEvent *event)
{if(event-mimeData()-hasFormat(application/xqabstractitemmodeldatalist)) {event-setDropAction(Qt::MoveAction);event-accept();} else {event-ignore();}
}