windows中实现最优化理论与算法Qt无边框窗口的拖动

[转载]在Qt中建立不显示标题栏、边框的的窗口
可以通过QWidget类的setWFlags()函数来设定Qt::FramelessWindowHint来完成(继承自QWidget的类也是如此,比如QMainWindow)。
QMainWindow mainW
Qt::WindowFlags flags = 0;
flags |= Qt::FramelessWindowH
mainWindow.setWindowFlags(flags);
mainWindow.setFixedS
相关的类似属性还有:
Qt::FramelessWindowHint
Qt::WindowTitleHint
Qt::WindowSystemMenuHint
Qt::WindowMinimizeButtonHint
Qt::WindowMaximizeButtonHint
Qt::WindowContextHelpButtonHint
Qt::WindowShadeButtonHint
Qt::WindowStaysOnTopHint
Qt::CustomizeWindowHint
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。QT拖动无边框窗口_qt吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:11,085贴子:
QT拖动无边框窗口收藏
学校布置了一道实训题目,要求用QT写一个软件中心的界面,写完了发现了一个bug。就是拖动窗口,只能像第一幅图那样拖到边界,然后就不能再继续移动了,我想实现的是第二幅图的效果,移动到边界时还可以继续移动。求大神指教。我是在下编写的。void TitleWidget::mousePressEvent(QMouseEvent *e){
press_point = e-&();
is_move =}void TitleWidget::mouseMoveEvent(QMouseEvent *e){
if((e-&buttons() == Qt::LeftButton) && is_move)
static QWidget* parent_widget = this-&parentWidget();
QPoint parent_point = parent_widget-&();
parent_point.setX(parent_point.x() + e-&x() - press_point.x());
parent_point.setY(parent_point.y() + e-&y() - press_point.y());
parent_widget-&move(parent_point);//
move(e-&global() - press_point);
}}void TitleWidget::mouseReleaseEvent(QMouseEvent *){
if(is_move)
}}以上是实现拖拽的主要代码。
1楼 22:04&|
收起回复3楼 11:18&|
bool QBaseWidget::winEvent ( MSG * msg, long * result ){int captionHeight = 20;int frameWidth = 5;if (msg-&message != WM_NCHITTEST ){return QWidget::winEvent( msg,
result);}int w = width();int h = height();bool bDO =QPoint pos = mapFromGlobal(QCursor::pos());if (QRect(frameWidth, captionHeight+frameWidth, w-frameWidth-frameWidth, h-captionHeight-frameWidth*2).contains(pos)){*result = HTCLIENT;}else if (QRect(frameWidth, 0, w-frameWidth*2, frameWidth).contains(pos)){*result = HTTOP;bDO =}else if (QRect(0, 0, frameWidth, frameWidth).contains(pos)){*result = HTTOPLEFT;bDO =}else if (QRect(w-frameWidth, 0, frameWidth, frameWidth).contains(pos)){*result = HTTOPRIGHT;bDO =}else if (QRect(0, frameWidth, frameWidth+1, h-frameWidth*2).contains(pos)){*result = HTLEFT;bDO =}else if (QRect(w-frameWidth-1, frameWidth, frameWidth+1, h-frameWidth*2).contains(pos)){*result = HTRIGHT;bDO =}else if
(QRect(frameWidth, h-frameWidth, w-frameWidth*2, frameWidth).contains(pos)){*result = HTBOTTOM;bDO =}else if (QRect(0, h-frameWidth, frameWidth, frameWidth).contains(pos)){*result = HTBOTTOMLEFT;bDO =}else if (QRect(w-frameWidth, h-frameWidth, frameWidth, frameWidth).contains(pos)){*result = HTBOTTOMRIGHT;bDO =}if (QRect(frameWidth, frameWidth, w-frameWidth*2-100, captionHeight).contains(pos)){*result = HTCAPTION;bDO =}if (!bDO)return QWidget::winEvent( msg,
result);return bDO;}
收起回复4楼 11:27&|
这个能帮到楼主:
收起回复5楼 15:24&|
Ubuntu下的拖动不能超越左边界和上边界
收起回复6楼 08:56&|来自
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
使用签名档&&
为兴趣而生,贴吧更懂你。或137511/3页1
1 天以来主题
2 天以来主题
1 周以来主题
1 个月以来主题
3 个月以来主题
6 个月以来主题
1 年以来主题
按降序排列
按升序排列
-=> 图标说明
开放的话题
热门的话题
锁定的话题
加精的话题
(总、区、版)固顶话题
版权所有,并保留所有权利。
Powered by , Processed in 0.029326 second(s), 6 queries.
Copyright&, BCCN.NET, All Rights Reserved无边框窗口_中华文本库
第1页/共1页
文本预览:
一个无边框的 Qt 实例
21:33:43| 分类: QT 编程学习笔记 | 标签: |字号大中小 订阅 实现一个以图片边框为窗口边框的 Qt 程序,可以鼠标左键拖动,点击右键可以推出程序。 本程序一共三个文件,分别为 shapewidget.h,shapewidget.cpp,main.cpp 自定义头文件:shapewidget.h #ifndef SHAPEWIDGET_H #define SHAPEWIDGET_H #include
class QP //定义一个 Qpoint 类
class ShapeWidget : public QWidget //ShaoeWidget 继承了 QWidget { Q_OBJECT public: ShapeWidget(QWidget *parent=0); protected: void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void paintEvent(QPaintEvent *); private: QPoint dragP //定义一个 QPoint 的成员变量 }; #endif 实现文件:shapewidget.cpp #include "shapewidget.h" ShapeWidget::ShapeWidget(QWidget *parent) //外部重写构造函数 //初始化参数类型 //自定义一个鼠标点击事件函数 //自定义一个鼠标拖动事件函数 //自定义一个刷屏事件函数 //创建一个空内容的构造函数
: QWidget(parent,Qt::FramelessWindowHint) { QP
//设置一个 QPixmap 的对象。
pix.load(":/images/Watermelon.png"0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither); resize(pix.size()); //设置窗口的尺寸为图片的尺寸 setMask(pix.mask()); //先通过 pix 的方法获得图片的过滤掉透明的部分得到的图片,作为 shapeWidget 的不规则边框。 } void ShapeWidget::mousePressEvent(QMouseEvent * event) {
if (event->button() == Qt::LeftButton) //点击左边鼠标 { dragPosition = event->globalPos() - frameGeometry().topLeft(); //globalPos()获取根窗口的相对路径,frameGeometry().topLeft()获取主窗口左上角的位置 event->accept(); //鼠标事件被系统接收 } if (event->button() == Qt::RightButton) { close(); } } void ShapeWidget::mouseMoveEvent(QMouseEvent * event) { if (event->buttons() == Qt::LeftButton) //当满足鼠标左键被点击时。 { move(event->globalPos() - dragPosition);//移动窗口 event->accept(); } } void ShapeWidget::paintEvent(QPaintEvent *) { QPainter painter(this);//创建一个 QPainter 对象 painter.drawPixmap(0,0,QPixmap(":/images/Watermelon.png"));//绘制图片到窗口 /* QPixmap(":/images/Watermelon.png")如果改为 QPixmap(),则只能看到绘制出的框架,看不到图片 颜色,也就是看不到图片。 */ }
主函数:main.cpp #include
#include "shapewidget.h" int main(int argc, char * argv[]) { QApplication app(argc,argv); ShapeW shape.show(); return app.exec(); }
第1页/共1页
寻找更多 ""}

我要回帖

更多关于 最优化理论与算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信