Qt 问题合集

1. 使用QTreeView还是QTreeWidget,参考QTreeView or QTreeWidget

    简单说,就是前者基于可定制的Modal/View模型,后者虽然也是如此,但是内置了这个功能,定制性不强。

    Mac下开发GUI,目前有两种方案,一个是QML Graphical User Interfaces,一个是Widget-based User Interfaces。

 

2. Qt Quick vs. Qt Widget

    简单来说Qt Quick是使用QML/JS混编、可以快速开发的面向App开发的解决方案。但是对于桌面的操作习惯支持还有很大的不足,比如菜单,工具栏,对话框,以及桌面端工业标准的控件。Qt Widget/View作为传统的Qt开发解决方案,可以完美解决上述不足。

     所以这就有了结合二者优点的方案,Combining Qt Widgets and QML with QWidget::createWindowContainer()

 

3. 推荐使用Qt5的新的connect函数,使用函数指针作为参数。

 

4. 使用创建自ui文件的view,具体方案可以参考:Using a Designer UI File in Your Application

    简单说就是两大种方式:

        编译时 有三种方式使用ui类,1. 直接创建并使用ui类,不过要手动添加一个ui类头文件; 2. 创建一个继承自QWidget或者QDialog的类,当然自己要创建一个ui界面资源类了;3. 创建一个UI类,该类继承QWidget或者QDialog,同时继承了Ui命名空间下的该类。DevToolsSecurity -enable

        运行时 可以使用QtTools模块,这个类似DuiLib中的操作,这种方式可以将ui文件放在资源文件中当作一个资源加载类对待,可参考Text Finder Example示例。可以使用QObject::findChild方法加载。这种方法应该是适合要动态加载某一类模板的方案

    动态connect信号和槽,又分为两种方式:硬编码在类的构造函数中,就是写出connect函数;或者使用QMetaObject方法按照固定的格式写好函数(void on_<object name>_<signal name>(<signal parameters>);)

 

5. 如何在QTreeView中使用自定义的元素。参考CUSTOM QTREEVIEW WITH MULTIPLE CUSTOM WIDGETS AS RENDERING DELEGATES

 

6. 如何定义Qt Creator中的license模板,参考Qt官网的Tips and Tricks

 

7. qt中使用Qt的智能指针,还是std的? 参考:What C++ Smart Pointer Implementations are available?

    简单来说就是Qt中的智能指针可以保证各平台一致的实现,并且是线程安全的。推荐在Qt项目中使用Qt的智能指针。

    关于std::shared_ptr的线程安全参考:std::shared_ptr thread safety

 

8. Qt Creator在使用调试器的时候,有时候对变量的值显示为not accessble。其实并不是真的显示不了,而是显示的格式需要你选择一下。可以右键设置Display format。

 

9, out-of-line虚函数的警告:参考clang: no out-of-line virtual method definitions (pure abstract C++ class)

 

10, 自定义Qt Creator的主题风格:方法参考这个git:Qt-Creator-Darcula 。以及这篇博客。比如说我的styles文件夹位于:D:\Qt\Qt5.10.1\Tools\QtCreator\share\qtcreator\styles。如果设置了Qt的快捷方式菜单启动命令,以及注册表中打开pro文件的默认参数,即可使用指定的theme。

 

11, QString的字符串排序大有讲究啊:Qt之QString中文支持,按照这里的说法,我尝试在排序的时候将QString转为16/32位的字符单位的字符串就可以得到正确的排序了。QString在一般的Qt项目中应该是使用了utf8的编码方式。不适合数字+字母+汉字的排序。

 

int ContactGroup::compareCommonTreeviewItem(CommonTreeViewItem *item1, CommonTreeViewItem *item2)

{

auto left = dynamic_cast<GroupTreeItemPtr>(item1);

auto right = dynamic_cast<GroupTreeItemPtr>(item2);

CHECK_RETURN_VALUE(left && right, 0);

 

auto left_name = left->name().toStdU16String();

auto right_name = right->name().toStdU16String();

 

auto ret = left_name < right_name;

return ret ? -1 : 0;

}

Qt中提供的相关的类有:QCollator,QLocale,MeeGo Touch Framework中的MCollator实现了中文排序。

 

12, qt设置调试器:Setting Up Debugger

 

13, Qt中字体大小的跨平台设置:相同point size的字体在mac上要小一些。这个怎么解决???

 

14, Qt中的jom工具是干什么用的?

 

15, unscoped enumerator和scoped enumerator有什么区别?前者可知隐式转换为int,后者不会??

 

16, C++中new一个对象出来之后,是否需要判断空呢?参考Should one always check, if the new operator worked?How to check if memory allocation failed?,以及我的一篇老文章C++中new与delete的定制 ,简单地说

T* pointer = new T();

if (pointer == nullptr) {

// will not come here

}

这样的判断在现在的C++中其实根本不会执行到判空逻辑内部。

 

17, Qt设置mac中Dock的icon。参考这里

 

18, Qt中QLabel自动换行需要设置wordwrapper属性为true。

 

19, Qt使用VS打开 Visual Studio 2015 Git无法使用SSH协议的解决方法

 

20, 在QWidget中判断某个鼠标点击是否在widget内部,可以将widget的rect转化到全局坐标系(调用widget的mapToGlobal方法)之后,全部的判断都在全局坐标系中完成。

 

21,Qt调试进Qt库,需要下载Qt编译好的pdb包,并设置路径:

比如在Debugger->CDB paths中设置:

F:\qt debug\qtcreator-debug\bin

F:\qt debug\qtcreator-debug\lib\qtcreator\plugins

 

22, Qt编译加速

参考:Improving build times of large Qt apps How to Make Your C++ Qt Project Build 10x Faster with 4 Optimizations

 

 

23, Qt得到给定文件的默认Icon:

 

QString path;

QUrl url(text);

QFileInfo info(url.authority(QUrl::PrettyDecoded));

if (!info.exists()) {

return label;

}

QFileIconProvider ip;

QIcon icon = ip.icon(info);

 

label->setPixmap(icon.pixmap(64, 64, QIcon::Mode::Normal, QIcon::State::On));

 

24,qt屏蔽系统睡眠参考这里Is there a way in Qt to prohibit the computer from going to sleep?

 

25, 安装好Qt Creator之后启动调试,每次都提醒:"Developer tools access" 需控制另一个进程才能继续调试,解决办法是执行:

sudo /usr/sbin/DevToolsSecurity --enable

之后提示:Developer mode is now enabled. 说明成功。

 

26, 系统升级到10.14.4之后,App Store版本的cc运行会发生闪屏的现象,同时调试的时候报错说:

CCtalk[2383:20588] [com.hujiang.mac.cctalk] CGContextRestoreGState: invalid context 0x0.

CCtalk[2383:20588] [com.hujiang.mac.cctalk] CGContextSaveGState: invalid context 0x0.

CCtalk[2383:20588] [com.hujiang.mac.cctalk] CGContextTranslateCTM: invalid context 0x0.

CCtalk[2383:20588] [com.hujiang.mac.cctalk] CGContextScaleCTM: invalid context 0x0.

CCtalk[2383:20588] [com.hujiang.mac.cctalk] CGContextDrawImage: invalid context 0x0.

同时提示,如果想要查看调用堆栈,设置环境变量CG_CONTEXT_SHOW_BACKTRACE,找了半天才发现设置的方法:

在~/Library/LaunchAgents/下创建一个plist文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

<key>Label</key>

<string>my.startup</string>

<key>ProgramArguments</key>

<array>

<string>sh</string>

<string>-c</string>

<string>launchctl setenv CG_CONTEXT_SHOW_BACKTRACE TRUE</string>

 

</array>

<key>RunAtLoad</key>

<true/>

</dict>

</plist>

其中标红的是关键代码。

激活这个环境变量执行命令:

launchctl load ~/Library/LaunchAgents/environment.plist launchctl start ~/Library/LaunchAgents/environment.plist

当然也可以更新并重新激活这个命令:

launchctl stop ~/Library/LaunchAgents/environment.plist launchctl unload ~/Library/LaunchAgents/environment.plist launchctl load ~/Library/LaunchAgents/environment.plist launchctl start ~/Library/LaunchAgents/environment.plist

 

注意:这个方法在10.14.4上有效。其他系统不保证有效。

之后,最好重启一下系统,然后重新启动Qt Creator,就可以在Application Output中看到出现上述错误的时候对应的堆栈。可以进一步对调试有帮助。

参考:Setting global environment variables on OS X

 

27,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt工具代码合集是一系列用于辅助Qt应用程序开发的代码库和工具集合。这些工具代码能够提供多种功能,帮助开发者更高效地创建和管理Qt应用程序。 首先,Qt工具代码合集提供了丰富的工具类和函数,用于简化常见任务。比如,它可以包括用于处理日期和时间、字符串处理、文件和目录操作、网络通信等功能的代码。通过这些工具代码,开发者可以快速实现特定功能,减少重复代码的编写和修改。 其次,Qt工具代码合集中通常还包含了一些特定领域的工具类和函数。例如,对于图形和绘图应用程序开发,可能会包含用于绘制图形、处理鼠标和键盘事件、进行动画效果等功能的代码。对于数据库应用程序开发,可能会包含用于数据库连接、查询和操作的代码。这些工具代码可以帮助开发者快速上手特定领域的应用开发,提高工作效率。 另外,Qt工具代码合集还可能包含一些实用工具和辅助类,用于开发过程中的调试和错误处理。例如,它可以包括用于输出调试信息、记录错误日志、处理异常等功能的代码。这些工具代码可以帮助开发者快速定位和解决问题,提高代码质量和稳定性。 总之,Qt工具代码合集是一个方便开发者使用Qt框架的代码库和工具集合。通过使用这些工具代码,开发者可以更加高效地开发和管理Qt应用程序,提高开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值