QT使用笔记

这篇博客主要介绍了QT编程中的几个关键点,包括QLabel如何自适应显示图片、QComboBox的设置、Qt官方颜色样式、背景图片的添加及底色设定、中文乱码的解决方法,以及在QT中处理OpenCV摄像头显示时的卡死问题和QMessageBox的使用。通过这些实例,为QT开发者提供了一些实用的技巧和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

label自适应显示图片大小

ui.label_3->setScaledContents(true);

/****************************************

QCombobox 设置

Qconbox = new QComboBox(this);//算法下拉菜单
Qconbox->setView(new QListView()); //设置item间距
Qconbox->setStyleSheet("QComboBox QAbstractItemView::item { min-height: 25px; min-width: 50px; }QListView::item:selected { color: black; background-color: lightgray}");
Qconbox->addItem(BianMa->toUnicode("粒子滤波"));
Qconbox->addItem(BianMa->toUnicode("  TLD  "));
Qconbox->setGeometry(105, 340, 100, 25);

**********************************

官方颜色设置

http://doc.qt.io/qt-5/stylesheet-examples.html

**************************

添加背景图片及底色

QImage image;
image.load("back.png");
setAutoFillBackground(true);   // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
setPalette(pal);
//设置背景颜色:
//this->setStyleSheet("background-color:rgb(255,34,198)");






如果widget是子窗口
设置背景图片


可以这样(1) :
QImage _image;
_image.load("./videoarea.png");
ui->widget->setAutoFillBackground(true);   // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
ui->widget->setPalette(pal);
也可以这样(2) :
ui->widget->setStyleSheet("border-image:url(./videoarea.png)");
设置背景颜色:
ui->widget->setStyleSheet("background-color:rgb(255,34,198)");




总结:
1:不要在顶层窗口(无父类的窗口)中使用setStyleSheet() ,否则其一父窗口的背景不会改变,其次其子窗口的背景设置方法变得局限唯一,不能再使用其它方法!
2 :
2:如果一个一般窗口(非顶层窗口)还有子窗口,那最好不要使用setStyleSheet()来设置其背景颜色,因为虽然此时该窗口的背景设置是生效的,但是其子窗口的背景设置也变得局限唯一,只能使用setStyleSheet,而不能使用其它方法!  当然:你如果就是只想使用这种方法,那也完全可以!!
说白了就是:不要再MainWindow中使用setStyleSheet()!

************************************************************************

QT 5.6 中文显示乱码

解决:

QTextCodec * BianMa = QTextCodec::codecForName("GBK");
Record = new QPushButton(BianMa->toUnicode("中文显示!"), this);

********************************************************************

\moc”: No such file or directory

原因可能是重复包含头文件,删除部分不必要的头文件则问题解决了

*******************************************************************


1、在利用OpenCV 配合QT调用摄像头显示是会出现卡死的现象

原因可能是QT程序陷入了循环中,没法进入图片显示阶段,所以在循环中需要添加  qApp->processEvents();

while (capV.read(img))
{
QImage image = QImage((const uchar*)img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped();
lable->clear();
lable->setPixmap(QPixmap::fromImage(image));
lable->resize(img.cols, img.rows);
lable->show();

qApp->processEvents();
}


1、警告、信息对话框

  使用QMessageBox类的静态方法
  int ret = QMessageBox::warning(this, tr("Application"),
  tr("The document has been modified./n"
  "Do you want to save your changes?"),
  QMessageBox::Yes | QMessageBox::Default,
  QMessageBox::No,
  QMessageBox::Cancel | QMessageBox::Escape);
  if (ret == QMessageBox::Yes)
  return save();
  else if (ret == QMessageBox::Cancel)
  return false;
  或者简单点儿:

  QMessageBox::information(this, "关于","盲人辅助系统(管理端)!/nVersion:1.0/nNo Copyright");

2、QT中中文字体乱码的原因是没有定义相关的转换,可以使用使用tr()函数进行转换!!!

解决方法:在main函数中加入下面三条语句,但并不提倡
  QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
  QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
  或者
  QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
  QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
  使用GBK还是使用UTF-8,依源文件中汉字使用的内码而定
  这样,就可在源文件中直接使用中文,比如:
  QMessageBox::information(NULL, "信息", "关于本软件的演示信息", QMessageBox::Ok,

QMessageBox::NoButtons);

3、文件控件/获取打开文件夹

QString filePaht = QFileDialog::getExistingDirectory();
if (!filePaht.isEmpty()) // ok
QRecordPath->setText(filePaht);




关于 Qt 的最新版本及其使用方法和注意事项,以下是详细的说明: ### 关于 Qt 最新版本 Qt 是一个跨平台的应用程序框架,广泛用于开发图形用户界面 (GUI) 应用程序和其他软件。最新的稳定版本通常可以通过其官方网站或官方文档获取。 #### 安装指南 安装 Qt 可以通过多种方式完成,具体取决于操作系统的选择: - **Windows**: 使用在线安装器下载并安装所需模块。 - **Linux**: 除了使用包管理工具外,还可以从源码编译安装。 - **macOS**: 下载适用于 macOS 的安装包或者使用 Homebrew 进行安装。 对于 Linux 用户来说,如果需要录制屏幕以便记录开发过程中的操作,则可以考虑 SimpleScreenRecorder 工具[^2]。 #### 配置环境变量 为了能够在命令行中直接调用 `qmake` 或其他相关工具,在安装完成后需配置 PATH 环境变量指向 Qt 的 bin 文件夹路径。 #### 创建项目 创建一个新的 Qt 项目一般遵循以下流程: 1. 初始化工程文件 `.pro`; 2. 编写 C++ 源代码以及 UI 文件(可选); 3. 利用 qmake 生成 Makefile 并构建应用。 示例代码展示如何设置基本窗口应用程序: ```cpp #include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.resize(250, 150); window.setWindowTitle("Simple example"); window.show(); return app.exec(); } ``` #### 更新支持设备驱动 当涉及到虚拟现实(VR)领域时,确保所使用的硬件兼容性非常重要。例如 Gear VR 支持已更新至特定版本 SDK 中[^1]。 #### 注意事项 - 开发前确认目标平台上是否有足够的权限执行某些功能。 - 如果计划发布到多个平台,请测试不同环境下行为一致性。 - 对第三方库保持警惕,始终验证它们的安全性和稳定性后再集成进自己的项目里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值