31、判断编译器类型、编译器版本、操作系统。
//GCC编译器 #ifdef __GNUC__ #if __GNUC__ >= 3 // GCC3.0以上 //MSVC编译器 #ifdef _MSC_VER #if _MSC_VER >=1000 // VC++4.0以上 #if _MSC_VER >=1100 // VC++5.0以上 #if _MSC_VER >=1200 // VC++6.0以上 #if _MSC_VER >=1300 // VC2003以上 #if _MSC_VER >=1400 // VC2005以上 #if _MSC_VER >=1500 // VC2008以上 #if _MSC_VER >=1600 // VC2010以上 #if _MSC_VER >=1700 // VC2012以上 #if _MSC_VER >=1800 // VC2013以上 #if _MSC_VER >=1900 // VC2015以上 //Borland C++ #ifdef __BORLANDC__ //Cygwin #ifdef __CYGWIN__ #ifdef __CYGWIN32__ //mingw #ifdef __MINGW32__ //windows #ifdef _WIN32 //32bit #ifdef _WIN64 //64bit #ifdef _WINDOWS //图形界面程序 #ifdef _CONSOLE //控制台程序 //Windows(95/98/Me/NT/2000/XP/Vista)和Windows CE都定义了 #if (WINVER >= 0x030a) // Windows 3.1以上 #if (WINVER >= 0x0400) // Windows 95/NT4.0以上 #if (WINVER >= 0x0410) // Windows 98以上 #if (WINVER >= 0x0500) // Windows Me/2000以上 #if (WINVER >= 0x0501) // Windows XP以上 #if (WINVER >= 0x0600) // Windows Vista以上 //_WIN32_WINNT 内核版本 #if (_WIN32_WINNT >= 0x0500) // Windows 2000以上 #if (_WIN32_WINNT >= 0x0501) // Windows XP以上 #if (_WIN32_WINNT >= 0x0600) // Windows Vista以上
32、在pro中判断Qt版本及构建套件位数
#打印版本信息 message(qt version: $$QT_VERSION) #判断当前qt版本号 QT_VERSION = $$[QT_VERSION] QT_VERSION = $$split(QT_VERSION, ".") QT_VER_MAJ = $$member(QT_VERSION, 0) QT_VER_MIN = $$member(QT_VERSION, 1) #下面是表示 Qt5.5 greaterThan(QT_VER_MAJ, 4) { greaterThan(QT_VER_MIN, 4) { #自己根据需要做一些处理 } } #QT_ARCH是Qt5新增的,在Qt4上没效果 #打印当前Qt构建套件的信息 message($$QT_ARCH) #表示arm平台构建套件 contains(QT_ARCH, arm) {} #表示32位的构建套件 contains(QT_ARCH, i386) {} #表示64位的构建套件 contains(QT_ARCH, x86_64) {}
33、Qt最小化后恢复界面假死冻结,加上代码
void showEvent(QShowEvent *e){ setAttribute(Qt::WA_Mapped); QWidget::showEvent(e); }
34、获取标题栏高度:style()->pixelMetric(QStyle::PM_TitleBarHeight); PM_TitleBarHeight点进去你会发现新大陆。
35、设置高分屏属性以便支持2K4K等高分辨率,尤其是手机app。必须写在main函数的QApplication a(argc, argv);的前面。
#if (QT_VERSION > QT_VERSION_CHECK(5,6,0)) QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif
36、如果运行程序出现 Fault tolerant heap shim applied to current process. This is usually due to previous crashes. 错误。办法:打开注册表,找到HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers,选中Layers键值,从右侧列表中删除自己的那个程序路径即可。
37、Qt内置了QFormLayout表单布局用于自动生成标签+输入框的组合的表单界面。
38、qml播放视频在linux需要安装 sudo apt-get install libpulse-dev。
39、可以直接继承QSqlQueryModel实现自定义的QueryModel,比如某一列字体颜色,占位符,其他样式等,重写QVariant CustomSqlModel::data(const 40、QModelIndex &index, int role) const。
40、Qt5以后提供了类QScroller直接将控件滚动。
//禁用横向滚动条 ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //禁用纵向滚动条 ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //设置横向按照像素值为单位滚动 ui->listWidget->setHorizontalScrollMode(QListWidget::ScrollPerPixel); //设置纵向按照像素值为单位滚动 ui->listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel); //设置滚动对象以及滚动方式为鼠标左键拉动滚动 QScroller::grabGesture(ui->listWidget, QScroller::LeftMouseButtonGesture); //还有个QScrollerProperties可以设置滚动的一些参数
41、如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(":memory:");
42、清空数据表并重置自增ID,sql = truncate table table_name。
43、Qtchart模块从Qt5.7开始自带,最低编译要求Qt5.4。在安装的时候记得勾选,默认不勾选。使用该模块需要引入命名空间。
#include <QChartView> QT_CHARTS_USE_NAMESPACE class CustomChart :public QChartView
44、QPushButton左对齐文字,需要设置样式表QPushButton{text-align:left;}
45、QLabel有三种设置文本的方法,掌握好Qt的属性系统,举一反三,可以做出很多效果。
ui->label->setStyleSheet("qproperty-text:hello;"); ui->label->setProperty("text", "hello"); ui->label->setText("hello");