1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets>
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 = "<html><body>";
text += QString("<p>Screen: %1\n</p>").arg(screen()->name());
text += QString("<p>DPR: %1\n</p>").arg(screen()->devicePixelRatio());
text += QString("</body></html>");
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 *exitButton = new QPushButton;
exitButton->setText("E&xit");
connect(exitButton, &QAbstractButton::clicked, QApplication::instance(), &QCoreApplication::quit);
QHBoxLayout *actionLayout = new QHBoxLayout;
actionLayout->addWidget(screenButton);
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);
});
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();
}
private:
QPointer<ScreenWidget> widget = nullptr;
int targetScreen = -1;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Controller controller;
controller.show();
return app.exec();
}
#include "main.moc"
|