qt中怎么让窗口跟随控件的qt隐藏窗口的标题栏而改变大小

后使用快捷导航没有帐号?
& & 环境:Windows 7 + Qt 5.2.1+ Qt Creator 3.0.1
& && & 我已经在QT Designer中将界面都做好了(图一),现在想让部分组件在窗口最大化时能跟着调整。图2中右侧文本编辑框、左侧的标签控件、和右下方的几个组件都没有跟着做调整。尝试使用布局管理器,但是布好的界面会被打乱,组件的大小也会变化。想通过增加spacer来使组件在使用布局的时候不会被改变,但未能达到要求。界面里的组件都是自己慢慢调坐标才对齐的(为啥没找到左对齐之类的工具呢),我不想因为加个布局搞乱了。
附件: 您需要
才可以下载或查看,没有帐号?
先在纸上设计好,然后再在UI上设计。
木易不是杨 发表于
综合利用?真的很难整啊,每次都弄乱到退不回去…………
先在纸上设计好,然后再在UI上设计。
这样的问题就是布局管理器的问题,你可以试着综合利用各种布局管理器。
Syylc120317 发表于
这样的问题就是布局管理器的问题,你可以试着综合利用各种布局管理器。
综合利用?真的很难整啊,每次都弄乱到退不回去…………
木易不是杨 发表于
综合利用?真的很难整啊,每次都弄乱到退不回去…………
不建议用设计器,用代码加
Joey_Chan 发表于
不建议用设计器,用代码加
意思是在设计器设计好后,用代码加布局管理器?
木易不是杨 发表于
意思是在设计器设计好后,用代码加布局管理器?
不是。。是完全不用设计器
Joey_Chan 发表于
不是。。是完全不用设计器
喜大普奔,我用代码加布局管理器基本实现想要的了,就差那么一点点了(不用设计器估计自己搞不来)
如下图,红色框框两边分别是一个管理器,我想让他们之间的距离小一点,真的就差一点点,有啥办法么
本帖子中包含更多资源
才可以下载或查看,没有帐号?
木易不是杨 发表于
喜大普奔,我用代码加布局管理器基本实现想要的了,就差那么一点点了(不用设计器估计自己搞不来)
我记得layout有个setMergin的函数可以设置边距
Joey_Chan 发表于
我记得layout有个setMergin的函数可以设置边距
没有效果哦,暂时不管这个问题了,时间不多。我现在给tabwidget组件安装了个过滤器,过滤鼠标单击事件,一直无效。可是修改后安装到pushbutton上却可行。
下面是重载的代码,在MainWindow::MainWindow中用ui-&tabWidget-&installEventFilter(this);进行注册。我看帮助文件也是这么写的,真是看不出哪里的问题。bool MainWindow::eventFilter(QObject * watched, QEvent * event)
{
& && & if (ui-&tabWidget == watched)
& && & {
& && && && && &if (QEvent::MouseButtonPress == event-&type())
& && && && &&&{
& && && && && && && &
& && && && &&&}
& && && && &&&else
& && && && &&&{
& && && && && && &&&
& && && && &&&}
& && & }
& && & else
& && & {
& && && && &&&return QMainWindow::eventFilter(watched, event);
& && & }
}复制代码
主题帖子积分
Qter1级会员, 积分 54, 距离下一级还需 46 积分
Qter1级会员, 积分 54, 距离下一级还需 46 积分【Qt编程】无边框窗口的缩放与拖动 - 推酷
【Qt编程】无边框窗口的缩放与拖动
在现在,绝大多数软件都向着简洁,时尚发展。就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了)。
有道的单词本:
很明显,两者的主要区别就是周围的边框问题。你可以对比QQ以前的版本和这几年的版本,就会发现都倾向于下面这种窗口模式。下面我们就说说如何用Qt实现无边框窗口的缩放与拖动。
对于无边框窗口的拖动其实很简单,其基本思想是,在鼠标移动前后记录鼠标的坐标,然后将窗口移动这两个坐标之差的距离即可,具体实现可以看代码,就非常清楚了。下面主要讲讲如何实现鼠标改变窗口的大小,首先,我们将一个窗口分为以下9个区域,其中只有鼠标在22区域时无法改变其形状,不能改变窗口大小。当鼠标在其它区域时,鼠标改变形状并可以改变窗口大小。窗口区域分类如下图:
具体实现如下代码(widget.ui未做任何改变):
1、widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include &QWidget&
#define MARGIN 20//四个角的长度
namespace Ui {
class Widget : public QWidget
explicit Widget(QWidget *parent = 0);
~Widget();
int countFlag(QPoint p, int row);
void setCursorType(int flag);
int countRow(QPoint p);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
Ui::Widget *
bool isLeftP
#endif // WIDGET_H
2、widget.cpp文件
#include &widget.h&
#include &ui_widget.h&
#include&QMouseEvent&
#include&QDebug&
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
ui-&setupUi(this);
this-&setMouseTracking(true);
//设置在不按鼠标的情况下也触发鼠标移动事件,注意QMainWindow的情况:centralWidget()-&setMouseTracking(true);
isLeftPressed=
curPos=0;//标记鼠标左击时的位置
this-&setMinimumSize(400,300);//设置最小尺寸
cursor.setShape(Qt::ArrowCursor);//设置鼠标为箭头形状
// ui-&pushButton-&setCursor(cursor);//当放在按钮上时,为箭头
// cursor.setShape(Qt::OpenHandCursor);
QWidget::setCursor(cursor);//当放在主窗口上时,为手形
qDebug()&&&h=&&&this-&height();
setWindowFlags(Qt::FramelessWindowHint);//设置主窗口无边框
qDebug()&&this-&minimumHeight();
Widget::~Widget()
void Widget::mousePressEvent(QMouseEvent *event)//鼠标按下事件
if(event-&button()==Qt::LeftButton)
this-&isLeftPressed=
QPoint temp=event-&globalPos();
curPos=countFlag(event-&pos(),countRow(event-&pos()));
event-&ignore();
void Widget::mouseReleaseEvent(QMouseEvent *event)//鼠标释放事件
if(isLeftPressed)
isLeftPressed=
QApplication::restoreOverrideCursor();//恢复鼠标指针性状
event-&ignore();
void Widget::mouseDoubleClickEvent(QMouseEvent *event)//鼠标双击 全屏
if(event-&button()==Qt::LeftButton)
if(windowState()!=Qt::WindowFullScreen)
setWindowState(Qt::WindowFullScreen);
else setWindowState(Qt::WindowNoState);//恢复正常模式
event-&ignore();
void Widget::mouseMoveEvent(QMouseEvent *event)//鼠标移动事件
int poss=countFlag(event-&pos(),countRow(event-&pos()));
setCursorType(poss);
if(isLeftPressed)//是否左击
QPoint ptemp=event-&globalPos();
ptemp=ptemp-pL
if(curPos==22)//移动窗口
ptemp=ptemp+pos();
move(ptemp);
QRect wid=geometry();
switch(curPos)//改变窗口的大小
case 11:wid.setTopLeft(wid.topLeft()+ptemp);//左上角
case 13:wid.setTopRight(wid.topRight()+ptemp);//右上角
case 31:wid.setBottomLeft(wid.bottomLeft()+ptemp);//左下角
case 33:wid.setBottomRight(wid.bottomRight()+ptemp);//右下角
case 12:wid.setTop(wid.top()+ptemp.y());//中上角
case 21:wid.setLeft(wid.left()+ptemp.x());//中左角
case 23:wid.setRight(wid.right()+ptemp.x());//中右角
case 32:wid.setBottom(wid.bottom()+ptemp.y());//中下角
setGeometry(wid);
pLast=event-&globalPos();//更新位置
event-&ignore();
int Widget::countFlag(QPoint p,int row)//计算鼠标在哪一列和哪一行
if(p.y()&MARGIN)
return 10+
else if(p.y()&this-&height()-MARGIN)
return 30+
return 20+
void Widget::setCursorType(int flag)//根据鼠标所在位置改变鼠标指针形状
Qt::CursorS
switch(flag)
cursor=Qt::SizeFDiagC
cursor=Qt::SizeBDiagC
cursor=Qt::SizeHorC
cursor=Qt::SizeVerC
cursor=Qt::OpenHandC
QApplication::restoreOverrideCursor();//恢复鼠标指针性状
setCursor(cursor);
int Widget::countRow(QPoint p)//计算在哪一列
return (p.x()&MARGIN)?1:(p.x()&(this-&width()-MARGIN)?3:2);
3、main.cpp文件
#include&QtWidgets&
#include &widget.h&
int main(int argc, char *argv[])
QApplication a(argc, argv);
return a.exec();
程序运行截图如下:
当你将鼠标放在窗口的边缘时,鼠标会变化形状,表示可以拖动窗口。由于没有关闭窗口,只能在强制关闭窗口。如果想做到和不同窗口实现最小化和关闭窗口的画,我们可以在窗口左上角放置两个ToolButton,并设置autorise属性,加上图片即可。下面给出使用上面的无边框窗口所做的词典软件的主界面:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Qt Creator 窗体控件自适应窗口大小布局_中华文本库
第1页/共5页
Qt Creator 窗体控件自适应窗口大小布局
常见的软件窗口大小改变(最大化、手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少。
Qt中如果想实现窗体内空间随着窗体大小调整,必须使用布局管理,常用的布局管理有QHBoxLayout、QVBoxLayout、QGridLayout,空的地方使用spacer控件进行填充,因此首先将窗体空间使用布局管理典型应用如下图所示。
我这里使用QGridLayout,按住Ctrl多选需要布局的窗体控件,右键-布局-栅格化局,根据需要进行调整。
要想是控件根据窗体进行调整,最为重要的一点就是设置窗口部件的大小策略,各控件均有这一项设置,如下图所示。
第1页/共5页
寻找更多 ""QT怎么设置控件在窗口大小发生变化的时候,使控件始终居于右上角-学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
QT怎么设置控件在窗口大小发生变化的时候,使控件始终居于右上角
来源:互联网 发表时间: 20:35:59 责任编辑:李志喜字体:
为了帮助网友解决“QT怎么设置控件在窗口大小发生变化的时候,使控件始终居于右上角”相关的问题,学网通过互联网对“QT怎么设置控件在窗口大小发生变化的时候,使控件始终居于右上角”相关的解决方案进行了整理,用户详细问题包括:
,具体解决方案如下:解决方案1: 代码设置方式,在复杂的情况下,首要的就是要设置顶级布局(Top Level Layout), 然后再往GridLayout里面放控件或者其他布局,则只需设置窗口如下。有几个因素供参考。 Layout是一种各种UI都很长用的布局手段,我们要用到Layout布局部件,比如说GridLayout.伸缩因子(stretch factor) 4,对于布局而言,要达到你说的那个基本目标: setCentralWidget(qwidget的名字) 窗口变化时窗口内的部件依然按照原排列方式铺满窗口,Qt的就很不错,对于一个窗口.空白(margin)和间距(spacing) 还有.大小提示(size hint)和最小大小提示(minimum size hint) 2.大小约束(size constraint) 5.大小策略(size policy) 3,这种布局的手段可以随窗体变化而改变布局内的控件的大小,而相对的位置不变,需要结合很多的手段才可以达到理想的效果: 1,而且一般使用手写代码更为方便。 设置qtablewidget为主窗口的中心部件,水平或垂直布局都可以 使用布局时: 直接为QMainWindow设置一个局部方式即可,你可以把整个窗体布局一个GridLayout, 要点中外层的widget然后选layout, 而不是选中若干子控件再选layout这里我们一般可以对窗口整体进行布局。比 如用designer时要注意
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 学网 版权所有
京ICP备号-1 京公网安备02号QT中控件如何随着窗口大小的改变而使它充满整个窗口空间-学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
QT中控件如何随着窗口大小的改变而使它充满整个窗口空间
来源:互联网 发表时间: 0:10:19 责任编辑:李志喜字体:
为了帮助网友解决“QT中控件如何随着窗口大小的改变而使它充满整个窗口空间”相关的问题,学网通过互联网对“QT中控件如何随着窗口大小的改变而使它充满整个窗口空间”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:QT中控件如何随着窗口大小的改变而使它充满整个窗口空间,具体解决方案如下:解决方案1:这里我们一般可以对窗口整体进行布局,我们要用到Layout布局部件。Layout是一种各种UI都很长用的布局手段,Qt的就很不错,比如说GridLayout,你可以把整个窗体布局一个GridLayout,然后再往GridLayout里面放控件或者其他布局,这种布局的手段可以随窗体变化而改变布局内的控件的大小,而相对的位置不变。设置qtablewidget为主窗口的中心部件。代码设置方式:setCentralWidget(qwidget的名字)窗口变化时窗口内的部件依然按照原排列方式铺满窗口,则只需设置窗口如下:直接为QMainWindow设置一个局部方式即可,水平或垂直布局都可以使用布局时,在复杂的情况下,需要结合很多的手段才可以达到理想的效果,而且一般使用手写代码更为方便。有几个因素供参考:1.大小提示(size hint)和最小大小提示(minimum size hint)2.大小策略(size policy)3.伸缩因子(stretch factor)4.大小约束(size constraint)5.空白(margin)和间距(spacing)还有,对于布局而言,对于一个窗口,要达到你说的那个基本目标,首要的就是要设置顶级布局(Top Level Layout)。比如用designer时要注意, 要点中外层的widget然后选layout, 而不是选中若干子控件再选layout, 因为后者的layout和外
1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 学网 版权所有
京ICP备号-1 京公网安备02号

我要回帖

更多关于 qt中子窗口隐藏 的文章

 

随机推荐