QML - 启动时的主窗口位置(屏幕中心)

Ant*_*Dev 5 c++ qt qml qt-quick

我该怎么做:我想在中心屏幕上显示我的主窗口.

Die*_*les 21

如果使用QtQuick,可以这样做:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.0

ApplicationWindow {
    visible: true
    width: 320
    height: 480
    Component.onCompleted: {
        setX(Screen.width / 2 - width / 2);
        setY(Screen.height / 2 - height / 2);
    }
}
Run Code Online (Sandbox Code Playgroud)


Mit*_*tch 18

Dielson的答案要好得多,特别是因为没有提到小部件......无论如何,这是他的答案更简单的版本:

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    visible: true
    x: Screen.width / 2 - width / 2
    y: Screen.height / 2 - height / 2
    width: 320
    height: 480
}
Run Code Online (Sandbox Code Playgroud)

正如亚历山大所提到的,这种绑定可能导致奇怪的大小调整行为.因此,最好使用Dielson的答案.我唯一要提到的是在QML中使用setter并不常见; 例如,某些系统(我相信它们被称为属性拦截器)甚至依赖于被设置为执行动画的属性.所以更常见的方法如下:

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    visible: true
    width: 320
    height: 480

    Component.onCompleted: {
        x = Screen.width / 2 - width / 2
        y = Screen.height / 2 - height / 2
    }
}
Run Code Online (Sandbox Code Playgroud)


sam*_*m-w 1

setGeometry在显示顶级小部件之前,您需要先打开它。我能想到的计算出您需要的几何形状的最简单方法是通过QDesktopWidget. 尝试下面的示例(创建一个QPushButton,在各个屏幕上移动小部件时按下它),您就会明白我的意思:

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{   
  ui->setupUi(this);
  connect(ui->pushButton, SIGNAL(released()), this, SLOT(ButtonPressed()));
}

MainWindow::~MainWindow()
{
  delete ui;
}

void MainWindow::ButtonPressed()
{
  qDebug() << QApplication::desktop()->screenCount();
  qDebug() << QApplication::desktop()->screenNumber();
  qDebug() << QApplication::desktop()->screenGeometry(this);
}
Run Code Online (Sandbox Code Playgroud)

从那里应该相当简单地提出一个通用版本来计算用户的中心屏幕(如果存在)。