Qt4保存窗体状态的编程方法及示例代码

436 篇文章 27 订阅 ¥29.90 ¥99.00

在Qt4中,我们可以使用一些方法来保存窗体的状态,以便在下次打开应用程序时恢复窗体的位置、大小和其他属性。下面是一个详细的解释和示例代码,展示了如何在Qt4中实现这个功能。

  1. 使用QSettings保存窗体状态

QSettings是Qt提供的一个用于持久性存储应用程序设置和配置信息的类。我们可以使用它来保存窗体的状态信息。以下是一个示例代码,展示了如何使用QSettings保存和恢复窗体的位置和大小:

#include <QApplication>
#include <QMainWindow>
#include <QSettings>

int main(</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是基于QT/C++、OpenCV进行可视化窗体开发的代码示例,满足要求: ```c++ #include <iostream> #include <opencv2/opencv.hpp> #include <QApplication> #include <QWidget> #include <QHBoxLayout> #include <QVBoxLayout> #include <QLabel> #include <QSlider> #include <QMouseEvent> using namespace std; using namespace cv; class ImageViewer : public QWidget { Q_OBJECT public: ImageViewer(QWidget *parent = nullptr) : QWidget(parent) { // 读入图像 image = imread("test.jpg"); // 初始化滑动条 slider = new QSlider(Qt::Horizontal, this); slider->setMinimum(1); slider->setMaximum(100); slider->setValue(50); // 初始化标签 originalLabel = new QLabel(this); processedLabel = new QLabel(this); // 布局 QHBoxLayout *hLayout = new QHBoxLayout(); hLayout->addWidget(originalLabel); hLayout->addWidget(processedLabel); QVBoxLayout *vLayout = new QVBoxLayout(); vLayout->addLayout(hLayout); vLayout->addWidget(slider); setLayout(vLayout); // 信号槽连接 connect(slider, SIGNAL(valueChanged(int)), this, SLOT(onSliderValueChanged(int))); // 设置窗口大小 setFixedSize(image.cols * 2 + 20, image.rows + 80); // 显示原图和滤波结果 originalLabel->setPixmap(QPixmap::fromImage(matToQImage(image))); processedLabel->setPixmap(QPixmap::fromImage(matToQImage(image))); // 设置鼠标跟踪 setMouseTracking(true); } protected: void mousePressEvent(QMouseEvent *event) override { if (event->button() == Qt::LeftButton) { // 保存鼠标按下时的坐标 lastPoint = event->pos(); } } void mouseMoveEvent(QMouseEvent *event) override { if (event->buttons() & Qt::LeftButton) { // 计算鼠标移动的距离 QPoint offset = event->pos() - lastPoint; // 保存当前的图像大小和位置 QRect rect = processedLabel->geometry(); // 改变图像大小和位置 rect.setWidth(rect.width() + offset.x()); rect.setHeight(rect.height() + offset.y()); processedLabel->setGeometry(rect); // 更新上一次的坐标 lastPoint = event->pos(); } } void wheelEvent(QWheelEvent *event) override { // 计算滚轮的滚动距离 int delta = event->angleDelta().y(); // 计算缩放比例 double scale = (delta > 0) ? 1.1 : 0.9; // 保存当前的图像大小和位置 QRect rect = processedLabel->geometry(); // 计算新的图像大小和位置 int newWidth = rect.width() * scale; int newHeight = rect.height() * scale; int newX = rect.x() - (newWidth - rect.width()) / 2; int newY = rect.y() - (newHeight - rect.height()) / 2; // 设置图像大小和位置 processedLabel->setGeometry(newX, newY, newWidth, newHeight); } private slots: void onSliderValueChanged(int value) { // 计算参数 int d = value * 2 + 1; double sigmaColor = 75; double sigmaSpace = 75; // 自适应双边滤波 Mat result; bilateralFilter(image, result, d, sigmaColor, sigmaSpace); // 显示滤波结果 processedLabel->setPixmap(QPixmap::fromImage(matToQImage(result))); } private: Mat image; QPoint lastPoint; QSlider *slider; QLabel *originalLabel; QLabel *processedLabel; QImage matToQImage(const Mat &mat) { // 转换为RGB格式 Mat rgbMat; cvtColor(mat, rgbMat, COLOR_BGR2RGB); // 创建QImage QImage img(rgbMat.data, rgbMat.cols, rgbMat.rows, rgbMat.step, QImage::Format_RGB888); return img; } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); ImageViewer viewer; viewer.show(); return app.exec(); } ``` 这段代码实现了一个包含原图和处理后图像的窗口,可以使用滑动条控制自适应双边滤波的参数,通过鼠标拖拽和滚轮缩放实现图像的自适应与鼠标控制的缩放显示,满足要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值