有什么方法可以将Xephyr用作QT Widget吗?

问题描述 投票:0回答:1

我最近了解到了名为 Xephyr 的工具,并且想知道是否可以在 QT 小部件中使用它。我设想的是一个嵌入式 Xephyr,或者任何 X11 服务器,在我的 Qt 窗口的一个小角落中运行的实例。我所要求的是不可能的吗?

我了解 X11 嵌入协议,并且我可以使用它在我的 Qt 窗口中嵌入应用程序,但出于实验目的,我想看看是否可以使用嵌套的 X 服务器。

c qt x11
1个回答
0
投票

我发现了一些将 Xephyr 嵌入到 QT5+ 中的混乱方法。 您必须创建新的 QMainWindow 并将该窗口设置为 Xephyr 窗口的父窗口。 然后显示并关闭这个新创建的QMainWindow。 现在您应该能够将 Xephyr 插入 QT 小部件中。

void MainWindow::reparentXWindow() {
    QVBoxLayout *box = new QVBoxLayout(this);
    QMainWindow *window = new QMainWindow();
    QWidget *widget = QWidget::createWindowContainer(QWindow::fromWinId(this->mWinid)); //Xephyr's WinId
    widget->setParent(window);
    window->lower();
    window->show();
    window->close();
    QTimer::singleShot(50, this, SLOT(embedXWindow()));
}

void MainWindow::embedXWindow() {
    QWidget *widget = QWidget::createWindowContainer(QWindow::fromWinId(this->mWinid)); //Xephyr's WinId
    /*QVboxLayout*/ ui->vbox->addWidget(widget);
}

在杀死 Xephyr 中的所有内容后,您可能需要重塑小部件*

© www.soinside.com 2019 - 2024. All rights reserved.