Qt设计保护眼睛的屏幕亮度调节软件

首先要显示窗口的自定义外形,不要让窗口显示工具栏之类的空间,所以ui界面要从wiget类继承

class Eyw1 : public QWidget
{
Q_OBJECT


public:
Eyw1(QWidget *parent = 0, Qt::WFlags flags =Qt::FramelessWindowHint);//注意要修改默认生成的这个行,让窗口为无关闭和最大小话按钮

//现在窗体还不能移动
~Eyw1();


private:
Ui::Eyw1Class ui;
};



Eyw1::Eyw1(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
this->setAttribute(Qt::WA_TranslucentBackground, true); //设置窗体为背景透明


}

在ui设计时添加一个QLable *lable;

添加一个图片资源,把lable->pixmap设置成图片


今天笔记:

1:设计窗体从QWidget继承,

2:在构造函数中设置窗体为无边界窗体Eyw1(QWidget *parent = 0, Qt::WFlags flags =Qt::FramelessWindowHint);//注意要修改默认生成的这个行,让窗口为无关闭和最大小话按钮

3:在构造函数中设置窗体背景透明背景this->setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景为透明背景

4:this->setWindowOpacity(0.5);//设置窗体的透明度

5:在窗体的背景上实现绘图

要在窗体的背景上实现绘图功能,需要将窗体的void paintEvent(QPaintEvent *)虚函数重新实现,实现过程为

现在类定义中声明void paintEvent(QPaintEvent *);

然后在类的cpp文件中实现void paintEvent(QPaintEvent *){}

void EyePro1::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen; //画笔
pen.setColor(QColor(185,122,87));
QBrush brush(QColor(0,255,0,125)); //画刷
painter.setPen(pen); //添加画笔
painter.setBrush(brush); //添加画刷
painter.drawRect(0,0,this->width(),this->height());//绘制矩形,在整个窗体上填充颜色
}

要给Qwidget添加右键菜单的话,重新实现虚函数voidQwidget::contextMenuEvent(QContextMenuEvent* )就行了

void EyePro1::contextMenuEvent(QContextMenuEvent* e)
{

      QMenu *menu = new QMenu(this);
      menu->addAction(new QAction(tr("&Open"), menu));
      menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu));
      menu->addAction(new QAction(tr("&Quit"), menu));
      menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上
      menu->show();
  
}

上面直接是在 contextMenuEvent 函数体里面 new 了个菜单和一些菜单项,这是为了演示。实际在写程序的过程中,我们往往会把这些 QAction 和 QMenu 声明为私有的成员变量,在构造 Widget 的时候,或者第一次调用 contextMenuEvent 时初始化它们,把它们的某些信号(signal)与其它组件的某些槽(slot)连接以处理一些事件,比如说单击上面演示的Open项目会弹出一个对话框,单击Quit会退出程序等等。

在窗体背景上显示图片:

void EyePro1::paintEvent(QPaintEvent *)//重载QWidget的paintEvent 函数
{

QPainter painter(this);
QPen pen; //画笔
pen.setColor(*windowColor);
QBrush brush(*windowColor); //画刷
painter.drawPixmap(pixmap->rect(),*pixmap);
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过利用QSlider和QGraphicsScene来实现图片亮度调节。 具体步骤如下: 1. 创建一个QGraphicsView用于显示图片,并将其设置为只读。 2. 创建一个QSlider用于调节图片亮度,并设置其范围和初始值。 3. 创建一个QGraphicsScene,并将图片添加到其中。 4. 创建一个QGraphicsPixmapItem用于显示图片,并将其添加到QGraphicsScene中。 5. 在QSlider的valueChanged信号槽中,修改QGraphicsPixmapItem的亮度,并更新QGraphicsView。 代码示例: ``` #include <QApplication> #include <QGraphicsScene> #include <QGraphicsView> #include <QGraphicsPixmapItem> #include <QSlider> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 加载图片 QPixmap pixmap(":/image/image.jpg"); // 创建场景 QGraphicsScene scene; scene.setSceneRect(0, 0, pixmap.width(), pixmap.height()); // 创建图片项并添加到场景中 QGraphicsPixmapItem pixmapItem(pixmap); scene.addItem(&pixmapItem); // 创建视图并设置场景 QGraphicsView view(&scene); view.setRenderHint(QPainter::Antialiasing); view.setDragMode(QGraphicsView::ScrollHandDrag); view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view.setFixedSize(pixmap.width(), pixmap.height()); // 创建滑动条 QSlider slider(Qt::Horizontal); slider.setRange(-255, 255); slider.setValue(0); // 连接滑动条和图片亮度的槽函数 QObject::connect(&slider, &QSlider::valueChanged, [&pixmapItem](int value) { QPixmap pixmap = pixmapItem.pixmap(); QImage image = pixmap.toImage(); for (int y = 0; y < image.height(); ++y) { for (int x = 0; x < image.width(); ++x) { QColor color = image.pixelColor(x, y); int h, s, l; color.getHsl(&h, &s, &l); l += value; if (l < 0) { l = 0; } else if (l > 255) { l = 255; } color.setHsl(h, s, l); image.setPixelColor(x, y, color); } } pixmapItem.setPixmap(QPixmap::fromImage(image)); }); // 创建布局并添加到视图中 QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(&view); layout->addWidget(&slider); QWidget widget; widget.setLayout(layout); widget.show(); return a.exec(); } ``` 这段代码实现了一个简单的图片亮度调节功能,通过滑动条可以调节图片的亮度

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值