窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用
2017-12-07 22:10
417 查看
最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标。但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷。网上的两种方法,基本操作如下:
方法一:在窗口(QWidget类及派生类)的构造函数中添加如下代码:
#include <QDesktopWidget>
//.......
QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以
move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
//.......
重新编译后,该窗口启动时在屏幕居中的位置。
方法二:在调用show()函数后调用move()函数,j将窗口移动到屏幕中央。
#include <QDesktopWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);
return a.exec();
}
自己按照方法一在构造函数中添加后,窗体还是不能居中,最后才发现,原来是窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用。
[cpp] view plain copy
/**
*构建函数中move至中心坐标时, 必须应用setFixedSize(500,500); 否则达不到期望居中显示的目标
*/
ialog:Dialog(QObject *parent=0):QDialog(parent) {
...
this->setFixedSize(500,500); //这句必须添加
this->setWindowTitle(tr("StyleSheet"));
QDesktopWidget *desk=QApplication::desktop();
int wd=desk->width();
int ht=desk->height();
this->move((wd-width())/2,(ht-height())/2);
[cpp] view plain copy
/**
*方式一: 先显示后移动会产生窗口闪烁,有点不太好
*/
int main(int argc,char **argv) {
QApplication app(argc,argv);
Dialog dialog;
dialog.show();
QDesktopWidget *desk=QApplication::desktop();
int wd=desk->width();
int ht=desk->height();
dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
return app.exec();
}
[cpp] view plain copy
/**
*方式二: 在移动和显示窗口前重新设置窗口的大小,这样就能达到期望的效果且不会闪烁
*/
int main(int argc,char **argv)
{
QApplication app(argc,argv);
Dialog dialog;
dialog.resize(500,500); //重新设置大小
QDesktopWidget *desk=QApplication::desktop();
int wd=desk->width();
int ht=desk->height();
dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
dialog.show();
}
http://blog.csdn.net/u013394556/article/details/40394079
方法一:在窗口(QWidget类及派生类)的构造函数中添加如下代码:
#include <QDesktopWidget>
//.......
QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以
move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
//.......
重新编译后,该窗口启动时在屏幕居中的位置。
方法二:在调用show()函数后调用move()函数,j将窗口移动到屏幕中央。
#include <QDesktopWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);
return a.exec();
}
自己按照方法一在构造函数中添加后,窗体还是不能居中,最后才发现,原来是窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用。
[cpp] view plain copy
/**
*构建函数中move至中心坐标时, 必须应用setFixedSize(500,500); 否则达不到期望居中显示的目标
*/
ialog:Dialog(QObject *parent=0):QDialog(parent) {
...
this->setFixedSize(500,500); //这句必须添加
this->setWindowTitle(tr("StyleSheet"));
QDesktopWidget *desk=QApplication::desktop();
int wd=desk->width();
int ht=desk->height();
this->move((wd-width())/2,(ht-height())/2);
[cpp] view plain copy
/**
*方式一: 先显示后移动会产生窗口闪烁,有点不太好
*/
int main(int argc,char **argv) {
QApplication app(argc,argv);
Dialog dialog;
dialog.show();
QDesktopWidget *desk=QApplication::desktop();
int wd=desk->width();
int ht=desk->height();
dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
return app.exec();
}
[cpp] view plain copy
/**
*方式二: 在移动和显示窗口前重新设置窗口的大小,这样就能达到期望的效果且不会闪烁
*/
int main(int argc,char **argv)
{
QApplication app(argc,argv);
Dialog dialog;
dialog.resize(500,500); //重新设置大小
QDesktopWidget *desk=QApplication::desktop();
int wd=desk->width();
int ht=desk->height();
dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
dialog.show();
}
http://blog.csdn.net/u013394556/article/details/40394079
相关文章推荐
- double由于是双精度,所以比较大小不能直接用>,<或者=,需要使用BigDecimal,具体看例子
- C函数printf中不能使用%lf,而用%f输出double,而函数scanf却必须用%lf来输入double
- Qt中窗体最大最小化以及窗口大小修改的相关函数使用(2)
- 访问被拒绝,必须是该远程计算机的管理员才能使用此命令。请将您的用户名添加到该远程计算机的管理员本地组或者域管理员全局组中
- 在xml文件中,不能直接使用<和&,必须进行转义后才能使用
- 父类的正常成员函数子类可以使用,并不是继承下来 的,子类是怎么调用父类的函数 : 可能是利用了一种叫函数名联编的方法.没有隐藏的情况下用函数名字来决定调用的函数.
- 当窗体改变大小时控件大小随之改变(使用函数)
- ODAC访问oracle时,提示:由于以前的函数求值超时,函数求值被禁用,必须继续执行才能正常返回
- . 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列,要求执行效率高,并说明如何改善执行效率(该函数必须自己实现,不能使用php函数)。
- 怪呀,google无故不能使用竟然没有发布新闻,也没有人讨论,正常吗?
- 在2015中使用V12版本的ReportView控件,会导致winform窗体不能正常打开
- C# 使用重载消息处理函数的方式,实现没有标题栏的窗体的拖动。
- 在SAP中进行黏贴时必须要把之前的数据删掉后才能黏贴,不能直接使用黏贴来覆盖之前的数据,这个怎麼解?
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- C语言的字符指针必须分配空间或者指向某个地址否则不能使用
- Ueditor后端配置项没有正常加载,上传插件不能正常使用!
- C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”
- 使用javaswing设定背景图片为窗体大小(原创)
- 对不起,你的服务器没有安装动易组件(PE_Article6.dll),所以不能使用动易系统。"---解决方