窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是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

  1. /**
  2. *构建函数中move至中心坐标时, 必须应用setFixedSize(500,500); 否则达不到期望居中显示的目标
  3. */
  4. ialog:Dialog(QObject *parent=0):QDialog(parent) {
  5. ...
  6. this->setFixedSize(500,500); //这句必须添加
  7. this->setWindowTitle(tr("StyleSheet"));
  8. QDesktopWidget *desk=QApplication::desktop();
  9. int wd=desk->width();
  10. int ht=desk->height();
  11. this->move((wd-width())/2,(ht-height())/2);

[cpp] view plain copy

  1. /**
  2. *方式一: 先显示后移动会产生窗口闪烁,有点不太好
  3. */
  4. int main(int argc,char **argv) {
  5. QApplication app(argc,argv);
  6. Dialog dialog;
  7. dialog.show();
  8. QDesktopWidget *desk=QApplication::desktop();
  9. int wd=desk->width();
  10. int ht=desk->height();
  11. dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
  12. return app.exec();
  13. }

[cpp] view plain copy

    1. /**
    2. *方式二: 在移动和显示窗口前重新设置窗口的大小,这样就能达到期望的效果且不会闪烁
    3. */
    4. int main(int argc,char **argv)
    5. {
    6. QApplication app(argc,argv);
    7. Dialog dialog;
    8. dialog.resize(500,500); //重新设置大小
    9. QDesktopWidget *desk=QApplication::desktop();
    10. int wd=desk->width();
    11. int ht=desk->height();
    12. dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
    13. dialog.show();
    14. }

http://blog.csdn.net/u013394556/article/details/40394079

时间: 2024-12-19 18:39:49

窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用的相关文章

【转载】 C++多继承中重写不同基类中相同原型的虚函数

本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class CBaseB { public: virtual void TestB(); }; class CDerived : public CBaseA, public CBaseB { public: virtual void TestA()

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在现在的项目中使用的主要是afinal框架,而且这个框架确实比较不错,省去了不少工作量,在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样可以使用这个类给我们封装好的不少的方法,但是随着项目慢慢推进,这种直接继承框架类的一些缺点也开始慢慢的显现出来.最主要的就

读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字

1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会被发送到哪个公司,我们可以使用基于模板的解决方案: 1 class CompanyA { 2 public: 3 ... 4 void sendCleartext(const std::string& msg); 5 void sendEncrypted(const std::string&

基类中的虚方法到底有什么作用?

只有基类的方法加上关键字virtual后才可以被override,从而实现面向对象最重要的特征--多态性,即基类可以使用派生类的方法. C#中指出:普通的方法重载:指的是类中两个以上的方法(包括隐藏的,继承而来的方法)取的名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用哪个方法.   而在派生类中重新定义此虚函数时要求的是:方法名称.返回值类型.参数表中的参数个数.类型.顺序都必须与基类中的虚函数完全一致. 简单一点说就是子类中override的方法能够覆盖积累中的

CS中窗体的基类(BaseForm)注意点

窗体基类最好新建一个窗体(BaseForm) 1.这样能够保证在VS中保证他的派生窗口也能够可视化. 2.如果基类直接是一个cs类文件,对于处理派生窗口就很复杂,比如按钮权限之类的操作; 如果直接继承自基类窗体,那么就可以对窗体操作.如:按钮权限 private void BaseForm_Load(object sender, EventArgs e) { Control[] c = this.Controls.Find("button1", true); if (c != null

通用权限管理系统基类中数据库的连接

public class BaseController : Controller { /// <summary> /// 用户中心Dbhelper /// </summary> public IDbHelper DbHelperUserCenter = GetDbConnection(BaseSystemInfo.UserCenterDbType, BaseSystemInfo.UserCenterDbConnection, ConfigHelper.GetConfigBool(&

多继承时,多个基类中存在型别相同的虚函数,该怎么做?

#include "stdafx.h" #include<iostream> using namespace std; class A{ public: virtual void show(){ cout<<"in classA"<<endl; } virtual ~A(){} }; class B{ public: virtual void show(){ cout<<"in classB"<

第十二周 阅读程序 虚基类 中的继承

/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:d.cpp *作 者:张旺华 *完成日期:2015年6月1日 *版 本 号:v1.0 */ #include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<