/**************************************************************************** ** ** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include class ScreenWidget : public QWidget { public: ScreenWidget(QWidget *parent) : QWidget(parent, Qt::Window) { textEdit = new QTextEdit; textEdit->setReadOnly(true); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(textEdit); setLayout(layout); } void updateText() { QString text = ""; text += QString("

Screen: %1\n

").arg(screen()->name()); text += QString("

DPR: %1\n

").arg(screen()->devicePixelRatio()); text += QString(""); textEdit->setText(text); } private: QTextEdit *textEdit; }; class Controller : public QDialog { Q_OBJECT public: Controller() { QPushButton *screenButton = new QPushButton; screenButton->setText("Show on Screen"); screenButton->setEnabled(false); connect(screenButton, &QAbstractButton::clicked, this, &Controller::setScreen); QPushButton *desktopButton = new QPushButton; desktopButton->setText("Show on Desktop"); desktopButton->setEnabled(false); connect(desktopButton, &QAbstractButton::clicked, this, &Controller::setDesktop); QPushButton *exitButton = new QPushButton; exitButton->setText("E&xit"); connect(exitButton, &QAbstractButton::clicked, QApplication::instance(), &QCoreApplication::quit); QHBoxLayout *actionLayout = new QHBoxLayout; actionLayout->addWidget(screenButton); actionLayout->addWidget(desktopButton); actionLayout->addWidget(exitButton); QGroupBox *radioGroup = new QGroupBox; radioGroup->setTitle(QLatin1String("Select target screen")); QVBoxLayout *groupLayout = new QVBoxLayout; const auto screens = QGuiApplication::screens(); int count = 0; for (const auto &screen : screens) { QRadioButton *choice = new QRadioButton; choice->setText(QString(QLatin1String("%1: %2")).arg(count).arg(screen->name())); connect(choice, &QAbstractButton::toggled, this, [=](bool on){ if (on) targetScreen = count; screenButton->setEnabled(targetScreen != -1); desktopButton->setEnabled(targetScreen != -1); }); groupLayout->addWidget(choice); ++count; } radioGroup->setLayout(groupLayout); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(radioGroup); layout->addLayout(actionLayout); setLayout(layout); } private slots: void setScreen() { QScreen *screen = QGuiApplication::screens().at(targetScreen); if (!widget) { widget = new ScreenWidget(this); widget->setAttribute(Qt::WA_DeleteOnClose); widget->setWindowTitle("Normal Window"); } widget->setScreen(screen); widget->show(); widget->updateText(); } void setDesktop() { QScreen *screen = QGuiApplication::screens().at(targetScreen); QWidget *desktop = QApplication::desktop(screen); if (!desktopChild) { desktopChild = new ScreenWidget(desktop); desktopChild->setAttribute(Qt::WA_DeleteOnClose); desktopChild->setWindowTitle("Child of a Desktop"); } else { desktopChild->setParent(desktop); } desktopChild->show(); desktopChild->updateText(); } private: QPointer widget = nullptr; QPointer desktopChild = nullptr; int targetScreen = -1; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); Controller controller; controller.show(); return app.exec(); } #include "main.moc"