QT分屏按钮

效果:按钮弹出分屏选择

QT分屏按钮

// gridpopwidget.h
#ifndef GRIDPOPWIDGET_H
#define GRIDPOPWIDGET_H#include <QWidget>
#include <QMouseEvent>class GridPopWidget : public QWidget
{Q_OBJECT
public:explicit GridPopWidget(QWidget *parent = nullptr);~GridPopWidget();protected:virtual void mouseMoveEvent(QMouseEvent *event) override;virtual void mousePressEvent(QMouseEvent *event) override;
signals:void sig_layout(int, int);private:QList<QList<QWidget *> >   wArr;
};#endif // GRIDPOPWIDGET_H
// gridpopwidget.cpp
#include "gridpopwidget.h"
#include <QGridLayout>#define  BACKGROUND "background-color:black; padding:0px;margin:0px;border:1px solid gray;"
#define  HIGHLIGHT  "background-color:white"
#define  CSSNORMAL  "background-color:darkgray;"
#define  GRIDROW    4
#define  GRIDCOL    5
#define  GRIDSIZE  25
#define  GRIDSPACE  0
GridPopWidget::GridPopWidget(QWidget *parent) :QWidget(parent)
{setMouseTracking(true);setStyleSheet(QString("QWidget{%1}").arg(BACKGROUND));QGridLayout *glayout = new QGridLayout(this);for(int i=0; i<GRIDROW; ++i){QList<QWidget*> ws;for (int j=0; j<GRIDCOL; ++j){QWidget* w = new QWidget(this);w->setMouseTracking(true);w->setStyleSheet(CSSNORMAL);glayout->addWidget(w,i,j,Qt::AlignCenter);w->setFixedSize(GRIDSIZE,GRIDSIZE);ws.append(w);}wArr.append(ws);}glayout->setSpacing(GRIDSPACE);setLayout(glayout);resize(GRIDSIZE*GRIDCOL,GRIDSIZE*GRIDROW);hide();
}GridPopWidget::~GridPopWidget()
{
}void GridPopWidget::mouseMoveEvent(QMouseEvent *e)
{QWidget::mouseMoveEvent(e);QPoint p = e->pos();foreach (QList<QWidget *> ws, wArr) {foreach (QWidget *w, ws) {if( w->pos().x() < p.x() && w->pos().y() < p.y() )w->setStyleSheet(HIGHLIGHT);elsew->setStyleSheet(CSSNORMAL);}}
}void GridPopWidget::mousePressEvent(QMouseEvent *e)
{QWidget::mousePressEvent(e);int row = 0, col = 0;QPoint p = e->pos();QPoint lim = this->rect().bottomRight();if (p.x() > lim.x() || p.y() > lim.y()) return;foreach (QList<QWidget *> ws, wArr) {if (p.y() > ws.first()->pos().y()) row++;}foreach (QWidget *w, wArr[0]) {if (p.x() > w->pos().x()) col++;}emit sig_layout(row,col);hide();
}
// mainwindow.ui
// 拖动一个 QToolButton
// mainwindow.h
#include <gridpopwidget.h>class MainWindow : public QMainWindow
{Q_OBJECT
public:
protected:virtual void mousePressEvent(QMouseEvent *event) override;virtual void resizeEvent(QResizeEvent *event) override;
public slots:void setSplitLayout(int row,int col);void setGridPopWidget();
private:GridPopWidget    *gridwidget;
}
// mainwindow.cpp
#include <QToolButton>
#include <QMenu>
#include <QComboBox>
MainWindow::MainWindow(QWidget *parent)
{gridwidget = new GridPopWidget(this); ui->statusBar->addPermanentWidget(ui->toolButton);connect(gridwidget,&GridPopWidget::sig_layout,this,&MainWindow::setSplitLayout);connect(ui->toolButton,&QToolButton::clicked,this,&MainWindow::setGridPopWidget);
}void MainWindow::resizeEvent(QResizeEvent *e)
{if(gridwidget->isVisible())gridwidget->hide();
}void MainWindow::mousePressEvent(QMouseEvent *e)
{if( e->pos().x() < gridwidget->pos().x() || e->pos().y() < gridwidget->pos().y() ){gridwidget->hide();}
}void MainWindow::setSplitLayout(int row, int col)
{  //TODO: 具体实现分屏qDebug() << "row:" << row << ", col:" << col;
}void MainWindow::setGridPopWidget()
{gridwidget->move(width()-gridwidget->width(),height()-gridwidget->height()-ui->statusBar->height()+5);gridwidget->show();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19017.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杨氏模量——从宏观(应力-应变曲线)到微观(原子键)尺度解释杨氏模量

杨氏模量&#xff08;Young’s Modulus&#xff09;是三个主要弹性常数之一&#xff0c;与剪切模量&#xff08;shear modulus&#xff09;、体积模量&#xff08;bulk modulus&#xff09;一起用于描述材料在载荷下如何变形 以下展示了拉伸试验的应力应变曲线 如果施加的应力…

基于servlet的简单登录界面

前端登录发起请求 1.安装axios axios 是一个 HTTP 的网络请求库 安装 npm install axios &#xff08;脚手架中&#xff09; 在 main.js 中配置 axios //导入网络请求库 import axios from axios; //设置访问后台服务器地址&#xff1a;ip&#xff0c;端口和项目名字&#xff0…

hbuilderX自定义主题仿vscode暗黑主题

目录 hbuilderX自定义主题仿vscode暗黑主题 效果图 设置方式&#xff08;把主题代码复制进来即可&#xff09; 是基于雅蓝主题自定义的 设置好后需要切换到雅蓝主题 hbuilderx保存时自动整理代码 1.首先在顶部栏&#xff0c;找到工具&#xff0c;打开设置 2.点击旁边的编…

盖子的c++小课堂——第十八讲:栈

目录 前言 栈的定义 栈&#xff0c;是什么&#xff1f; 例1-弹夹 问题 例2-停车场 问题 栈的概念 空栈 进栈、出栈 特点 例题 车厢调度 如何操作 数组模拟栈 入栈 出栈 栈的基本操作 判断空栈 求栈的元素数量 读栈顶元素 总结 前言 OK呀&#xff0c;说到做…

【unity细节】为什么有时候修改了脚本中的数据但是面板中的数据还是不改变

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐为什么有时候修改了脚本中的数据但是面板中的数据还是不改变⭐ 文章目录 ⭐为什…

微服务之Eureka服务注册中⼼

关于务注册中⼼服 服务注册中⼼本质上是为了解耦服务提供者和服务消费者,尽可能量使两者联系可控在一定的范围外 1.在父项目下下引入 Spring Cloud 依赖 <dependencyManagement> <dependencies> <!-- SCN --> <dependency> <groupId> org.sp…

分销商城系统有哪些模式,有什么功能和特点?

随着微信的广泛使用&#xff0c;微信在营销方面的发展呈现出多元化趋势&#xff0c;衍生出很多基于社交环境的营销模式。分销商城系统就是其中之一&#xff0c;很多企业都通过分销商城系统发展自己的分销商&#xff0c;充分挖掘微信社交体系的私域资源。下面我们一起来了解一下…

【单周期CPU】LoongArch | LA32R | 二选一控制器MUX | 数据通路

前言&#xff1a;本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中数据通路的设计。 &#x1f4bb;环境&#xff1a;一台内存4GB以上&#xff0c;装有64位Windows操作系统和Vivado 2017.4以上版…

嵌入式Linux领域中的C++:应用层主力与挑战

嵌入式Linux领域中&#xff0c;C是应用层的主要编程语言之一。尽管QT/C在某些领域被Android/Java逐渐替代&#xff0c;但在医疗、工控、车载导航等领域仍占主导地位。对于嵌入式人员学习C的观点存在一定片面性。C的难点在于移动语义、模板偏特化、lambda表达式、模板元编程等知…

QInputDialog 不显示ok或cancel按钮bug

今天遇到一个奇怪问题&#xff0c;就是调用 QInputDialog::getText去获取输入文本&#xff0c;但是无法显示系统ok和cancel按钮&#xff0c;我记得之前是可以的&#xff0c;于是我回退上一个版本是正常&#xff0c;于是对比两个版本代码&#xff0c;发现&#xff0c;自己重写 Q…

基于Python制作一个简单的文章搜索工具

这篇文章主要为大家详细介绍了如何基于Python制作一个简单的文章搜索工具&#xff0c;都是一些基础的应用&#xff0c;文中的示例代码讲解详细&#xff0c;感兴趣的可以了解一下 前言 今天&#xff0c;我无聊的时候做了一个搜索文章的软件&#xff0c;有没有更加的方便快捷不知…

go-zero微服务实战——基本环境搭建

简介 项目架构来源于go-zero实战&#xff1a;让微服务Go起来。此对该项目有所删减&#xff0c;相对简单适合初学者。 省去了项目中每个服务占用独立docker的过程&#xff0c;省略了docker-compose的构建过程。每个服务是一个独立的程序不依赖与容器。 环境搭建 安装goctl …