1. 悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单,如果需要去掉,会发现设置Qt::NoContextMenu或者事件过滤器拦截都是无效的,必须设置 dockWidget->setContextMenuPolicy(Qt::PreventContextMenu); 。

  2. Qt中的布局有个默认的margin边距值和spacing间距值,在没有设置该值的情况下,会根据运行的环境自动设置该值,比如1080P分辨率和2k分辨率的电脑,该值的默认值不一样,并不是你在UI设计的时候属性栏中看到的值,这个要特别注意,你看到的7可能在目标平台运行的时候是11,如果一定要按照你想要的值来运行,可以重新设置即可,设置过哪一个就该值按照设定的来。如果不想一个个设置调整布局中的间距边距,你需要用到万能大法样式代理,继承QProxyStyle类然后重新设置样式即可。该方式也是属于斗皇级别的UI外观控制策略,最终所有的qss样式也是要通过该样式去绘制的,意味着这里你可以重新定义和控制所有控件的外观样式,非常的强大。

//也可以继承Qt内置的样式比如 QFusionStyle/QCleanlooksStyle
class QCustomStyle : public QProxyStyle
{
public:
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const { if (metric == QStyle::PM_LayoutHorizontalSpacing || metric == QStyle::PM_LayoutVerticalSpacing) {
//将布局中的横向和垂直间距设置成10
return 10;
} else if (metric == QStyle::PM_ButtonMargin) {
//将所有按钮的margin边距设置成20
return 20;
}
return QProxyStyle::pixelMetric(metric, option, widget);
}
}; qApp->setStyle(new QCustomStyle);
  1. 养成良好的编程习惯至关重要,尤其是对变量的初始化,包括一些类对象的定义后也务必记得初始化,否则在不初始化的时候,默认值飘忽不定,比如int默认值在debug/release下以及不同编译器下默认值都不一样,甚至在头文件定义以及函数中定义都可能不同的默认值,下面表格中整理的测试的值,对应的int值飘忽不定的。常见的默认初始化定义建议 int i = 0; bool b = false; class a = NULL;
版本 定义位置 debug/release int bool
Qt4.7/mingw 头文件 debug 7077464 true
Qt4.7/mingw 头文件 release 48 true
Qt4.7/mingw 函数中 debug 2162216 false
Qt4.7/mingw 函数中 release 0 false
Qt5.7/msvc 头文件 debug -1 true
Qt5.7/msvc 头文件 release -1 true
Qt5.7/msvc 函数中 debug 1898108572 false
Qt5.7/msvc 函数中 release 18872512 true
Qt6.5/mingw 头文件 debug -1305540880 true
Qt6.5/mingw 头文件 release -1124044992 true
Qt6.5/mingw 函数中 debug 0 false
Qt6.5/mingw 函数中 release 0 false
  1. 对QTableView进行全部选中、全部不选、反向选中操作。
void frmXXX::initAction()
{
QAction *actionAll = new QAction("全部选中");
QAction *actionInvert = new QAction("反向选中");
QAction *actionClear = new QAction("清空选中");
connect(actionAll, SIGNAL(triggered(bool)), this, SLOT(doAction()));
connect(actionInvert, SIGNAL(triggered(bool)), this, SLOT(doAction()));
connect(actionClear, SIGNAL(triggered(bool)), this, SLOT(doAction())); ui->tableView->addAction(actionAll);
ui->tableView->addAction(actionInvert);
ui->tableView->addAction(actionClear);
ui->tableView->setContextMenuPolicy(Qt::ActionsContextMenu);
} void frmXXX::doAction()
{
QAction *action = (QAction *)sender();
QString text = action->text();
if (text == "全部选中") {
ui->tableView->selectAll();
} else if (text == "反向选中") {
//找到所有选中的行集合
QList<int> rows;
QModelIndexList list = ui->tableView->selectionModel()->selectedRows();
int count = list.count();
for (int i = 0; i < count; ++i) {
rows << list.at(i).row();
} //先清空所有选中
ui->tableView->clearSelection();
//不在选中行集合的则选中
count = ui->tableView->model()->rowCount();
for (int i = 0; i < count; ++i) {
if (!rows.contains(i)) {
ui->tableView->selectRow(i);
}
}
} else if (text == "清空选中") {
ui->tableView->clearSelection();
}
}
  1. pro文件中多重条件判断,前面 ! 表示非,中间 | 表示或(两个条件满足其一),中间 :: 表示与(两个条件都要满足)。
//下面表示安卓或者ios平台
android|ios {} //下面表示非安卓和ios平台
!android::!ios {}

国内站点:https://gitee.com/feiyangqingyun

国际站点:https://github.com/feiyangqingyun

Qt/C++开发经验小技巧281-285的更多相关文章

  1. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  2. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  3. Qt开发经验小技巧41-50

    如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...

  4. Qt开发经验小技巧71-80

    在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...

  5. Qt开发经验小技巧51-60

    在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...

  6. Qt开发经验小技巧31-40

    代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...

  7. Qt开发经验小技巧21-30

    如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...

  8. Qt开发经验小技巧11-20

    获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...

  9. Qt开发经验小技巧1-10

    当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...

  10. Qt开发之Hello Qt及学习小技巧

    创建第一个Qt程序的简单流程 如果安装了andriod或ios的版本也会显示出来,这里只显示了桌面端的 一个项目文件代码结构如下: 如下图可直接编辑label里的文字内容: 运行结果:(快捷键ctrl ...

随机推荐

  1. 谈谈你对 vue 的理解

    vue 是创建用户界面的 js 框架 ,是创建 spa 应用的框架 :使用 mvvm 模式,数据驱动视图模型 ,业务逻辑和页面解构分离开发:使用高效的 diff 算法渲染页面结构 : 采用组件化模式, ...

  2. .NET高级调试 - 3.9~3.11代码审查以及杂项命令

    简介 代码审查就是观察代码,代码形态分为三种C#代码>IL代码>汇编代码.通过代码审查,可以从原始代码的字节流中推测出逻辑详情 高级调试本质上属于逆向分析,更多的是以汇编为主. 反汇编代码 ...

  3. Tailwind CSS:最受欢迎的实用类CSS框架!Github Star达到了惊人的82.5K!

    在前端开发的世界中,随着项目的复杂性增加,如何高效管理样式,快速开发出响应式.美观的界面成为每个开发者关心的问题.Tailwind CSS 作为一个革命性的实用类(utility-first)CSS ...

  4. 云原生爱好者周刊:Chaos Mesh 升级成为 CNCF 孵化项目

    云原生一周动态要闻: Chaos Mesh 升级成为 CNCF 孵化项目 Zabbix Web Frontend 中发现安全漏洞 2021 年 Rust 调查报告出炉 Sysdig 2022 云原生安 ...

  5. activiti教程

    一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程,从 ...

  6. DC-1内网靶机入门

    DC-1 1.安装dc-1 靶机 2.内网扫描 查看主机IP ip a ifconfig nmap扫描全网段 nmap -A -p- -v 192.168.27.0/24 -A 选项会执行操作系统探测 ...

  7. 如何解决MySQL Connector NET xxxx无法卸载的问题(win10)

    使用Power BI(以下简称PBI)的小伙伴想必都知道,想要在PBI连接MySQL数据库,必须安装MySQL connector net,我之前安装过MySQL connector net 6.9. ...

  8. 登陆mysql,Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) "

    今天ssh到slave机器上,登陆mysql,遇到下图的报错. 查了一圈,最终解决办法简洁的出乎意料. 首先,要查看mysql服务是否已经启动(真的太容易漏掉) 第2步,你可能会自然而然的以为密码也是 ...

  9. Manjaro/Arch用怎么安装天翼云电脑(Ctyun-cloud-desk)?感谢信创,感谢国家

    最近微信出了linux版,用vmware装linux不过瘾,把一台闲置的笔记本装上了Manjaro KDE Plasma,经过一段时间的发展,Linux桌面可用性大大提高. Kindle->Ki ...

  10. 为政务单位免费提供IP地址https证书—JoySSL

    JoySSL作为知名的证书颁发机构(CA),确实为政务单位提供了IP地址HTTPS证书的免费测试证书服务.以下是对此服务的详细介绍: 一.证书类型与特点 证书类型:JoySSL为政务单位提供了专为IP ...