0%

1
2
(1)调用lineEdit->setEnabled(false)。确实不可编辑了。不过路径太长时就只能看到后部分了。没关系,再想别的办法就是了。
(2)setFocusPolicy(Qt::NoFocus); 设置它不可获得焦点。OK.不可编辑,又能查看完整的显示文本。

QSystemTrayIcon

macOS 上只显示托盘图标

如果只想使用托盘,不想在dock上显示应用的话就在项目中 info.plist 里加上

1
2
<key>LSUIElement</key>
<string>1</string>

项目中都是通过 动态库 的方式来组合模块的,debug模式下没有啥问题,因为IDE给处理了很多东西,但是在release模式下,打包出来的应用就有问题了。其中涉及到可执行程序引用dylib ,dylib 之间的相互引用

参看依赖

1
2
// path/file 你自己要查看文件的路径
otool -L /path/file

一种是修改动态库之间的引用
b.dylib 里面引用到 a.dylib

1
install_name_tool -change a.dylib @executable_path/path/a.dylib b.dylib

可执行程序引用动态库

1
install_name_tool -change "a.dylib" "@rpath/a.dylib" /path/exec

其中 @executable_path@rpath 还有 @loader_path 网上有不少说明,具体的就不再这里介绍了,有兴趣的可以自己去搜索看看。

如果不知道要那个库的连接,直接双击运行程序,看看提示的image not found信息是嘛,也就大概知道了。

关于Qt在Mac上的打包相关的内容,博客上也有,参考 Qt-macOS相关的内容,由于涉及到的情况还算复杂一点,基本上我遇到的问题都得到了很好的解决,有需要的可以查看一下。

参考

  1. 直接导出原生Xcode工程的 extension
  2. 在 pro 文件中加入关联
1
2
3
4
5
macx: {
plugins.path = Contents/PlugIns
plugins.files = $$_PRO_FILE_PWD_/../ext/xxx.appex
QMAKE_BUNDLE_DATA += plugins
}

plugins.path 文件输出的应用包内路径

plugins.files extension 的本地路径

Finder Sync Communicate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
QString base64Encode(const QString &src)
{
QByteArray s = src.toUtf8();
QByteArray ba = s.toBase64();
return QString(ba);
}


QString base64Decode(const QString &src)
{
QByteArray s = src.toUtf8();
QByteArray ba = QByteArray::fromBase64(s);
return QString(ba);
}

macOS 打包Qt 工程的问题

阅读全文 »

报错 a missing vtable usually means the first non-inline virtual member function has no definition

1
2
3
添加 Q_OBJECT 时 记得添加  头文件 #include <QObject>
析构函数
clean 一下,重新构建下

报错: error: ‘staticMetaObject’ is not a member of ‘YOUR_CLASS_NAME’

1
多继承的话, public QObject 放在写继承那个位置的第一个

Qt 设置版本号

You can set the VERSION qmake variable in your pro file:
VERSION = 1.0.0.0

应用中想调用版本号可以这么设置

DEFINES += APP_VERSION=\"$$VERSION\"

代码中就可以使用 APP_VERSION 获取版本号了