vs qt 无法打开包括文件: “QtCore/qconfig.h”

这篇博客介绍了在编译环境中遇到的问题,特别是在QT项目中,由于不同环境导致的头文件包含差异。作者提供了解决方案,即通过定义宏QT_BOOTSTRAPPED来统一预编译过程。方法包括在pch.h或stdafx.h中预定义宏,或者在编译设置中添加预处理器定义。这对于跨平台开发和维护代码的一致性至关重要。

编译环境的不同导致的问题,定位到

#ifdef QT_BOOTSTRAPPED
#include <QtCore/qconfig-bootstrapped.h>
#else
#include <QtCore/qconfig.h>
#include <QtCore/qtcore-config.h>
#endif

那么可以尝试定义宏 QT_BOOTSTRAPPED
方法1.在pch.h 或 stdafx.h  

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"
#define QT_BOOTSTRAPPED
#endif //PCH_H


方法2.在 c/c++ --> 预处理器--》预处理器定义 

 

import sys print(sys.path) print(sys.version) from PyQt5.QtWidgets import (QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel, QPushButton, QHBoxLayout, QStatusBar, QMessageBox) from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtCore import Qt, QTimer from processes.init import ProcessManager from gui.query_widget import QueryWidget from config import Config from enum import Enum from qfluentwidgets import StyleSheetBase, Theme, isDarkTheme, qconfig class StyleSheet(StyleSheetBase, Enum): """ Style sheet """ MAIN_WINDOW = "main_window" def path(self, theme=Theme.DARK): theme = qconfig.theme if theme == Theme.AUTO else theme return f"app/resource/qss/{theme.value.lower()}/{self.value}.qss" class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("工牌识别打卡系统") self.setGeometry(100, 100, 1200, 800) # apply style sheet to main window StyleSheet.MAIN_WINDOW.apply(self) # 初始化进程管理器 self.process_manager = ProcessManager() # 创建主选项卡 self.tabs = QTabWidget() self.setCentralWidget(self.tabs) # 实时识别选项卡 self.real_time_tab = QWidget() self.init_real_time_tab() # 数据查询选项卡 self.query_tab = QueryWidget(self.process_manager.db_manager) self.tabs.addTab(self.real_time_tab, "实时识别") self.tabs.addTab(self.query_tab, "打卡记录") # 状态栏 self.status_bar = QStatusBar() self.setStatusBar(self.status_bar) self.status_bar.showMessage("系统就绪") # 连接信号 self.start_btn.clicked.connect(self.start_recognition) self.stop_btn.clicked.connect(self.stop_recognition) # 初始化定时器 self.timer = QTimer() self.timer.timeout.connect(self.update_frame) self.recognition_active = False def init_real_time_tab(self): layout = QVBoxLayout() # 视频显示区域 self.video_label = QLabel() self.video_label.setAlignment(Qt.AlignCenter) self.video_label.setMinimumSize(800, 600) self.video_label.setText("摄像头未启动") layout.addWidget(self.video_label) # 控制按钮区域 btn_layout = QHBoxLayout() self.start_btn = QPushButton("开始识别") self.stop_btn = QPushButton("停止识别") self.stop_btn.setEnabled(False) btn_layout.addWidget(self.start_btn) btn_layout.addWidget(self.stop_btn) layout.addLayout(btn_layout) # 识别结果区域 result_layout = QHBoxLayout() self.face_label = QLabel() self.face_label.setAlignment(Qt.AlignCenter) self.face_label.setMinimumSize(200, 200) self.face_label.setText("头像") result_layout.addWidget(self.face_label) info_layout = QVBoxLayout() self.id_label = QLabel("工号:") self.name_label = QLabel("姓名:") self.time_label = QLabel("时间:") self.status_label = QLabel("状态:等待识别...") info_layout.addWidget(self.id_label) info_layout.addWidget(self.name_label) info_layout.addWidget(self.time_label) info_layout.addWidget(self.status_label) result_layout.addLayout(info_layout) layout.addLayout(result_layout) self.real_time_tab.setLayout(layout) def start_recognition(self): """启动识别过程""" try: self.process_manager.start_processes() self.recognition_active = True self.timer.start(30) # ≈33ms/frame self.start_btn.setEnabled(False) self.stop_btn.setEnabled(True) self.status_label.setText("状态:识别中...") self.status_bar.showMessage("识别已启动") except Exception as e: QMessageBox.critical(self, "启动错误", f"无法启动识别进程: {str(e)}") def stop_recognition(self): """停止识别过程""" self.recognition_active = False self.timer.stop() self.process_manager.stop_processes() self.start_btn.setEnabled(True) self.stop_btn.setEnabled(False) self.status_label.setText("状态:已停止") self.status_bar.showMessage("识别已停止") def update_frame(self): """更新视频帧和识别结果""" # 获取最新帧 if not self.process_manager.frame_queue.empty(): frame = self.process_manager.frame_queue.get() height, width, channel = frame.shape bytes_per_line = 3 * width q_img = QImage(frame.data, width, height, bytes_per_line, QImage.Format_RGB888) pixmap = QPixmap.fromImage(q_img) self.video_label.setPixmap(pixmap.scaled( self.video_label.width(), self.video_label.height(), Qt.KeepAspectRatio)) # 获取识别结果 if not self.process_manager.result_queue.empty(): result = self.process_manager.result_queue.get() if result['status'] == 'success': self.id_label.setText(f"工号:{result['badge_id']}") self.name_label.setText(f"姓名:{result['name']}") self.time_label.setText(f"时间:{result['time']}") self.status_label.setText("状态:打卡成功!") # 显示头像 if result['face_path']: pixmap = QPixmap(result['face_path']) self.face_label.setPixmap(pixmap.scaled(200, 200, Qt.KeepAspectRatio)) # 更新查询界面 self.query_tab.load_records() def closeEvent(self, event): """窗口关闭时清理资源""" self.stop_recognition() self.process_manager.cleanup() event.accept() 报错QIODevice::read (QFile, "app\resource\qss\light\main_window.qss"): device not open怎么解决?
08-21
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值