3 Stimmen

QX11EmbedWidget und QX11EmbedContainer

Kann man ein beliebiges Programm (firefox, openoffice, etc...) in einem QX11EmbedContainer platzieren? Das folgende scheint zu funktionieren

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QX11EmbedContainer container;
    container.show();

    QProcess * process = new QProcess(&container);
    QString executable("xterm");
    QStringList arguments;
    arguments << "-into";
    arguments << QString::number(container.winId());
    process->start(executable, arguments);

    int status = app.exec();
    process->close();
    return status;
}

aber der nächste Ausschnitt öffnet ein neues Fenster, was ich nicht will

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);

  QX11EmbedContainer container;
  container.show();

  QProcess * process = new QProcess(&container);
  QString executable("konsole");
  process->start(executable);

  int status = app.exec();
  process->close();
  return status;
}

3voto

p4bl0 Punkte 3692

Das erste Beispiel funktioniert, weil xterm in der Lage ist, sein Top-Level-Widget (ein X11-Fenster) zu reparieren. Sie weisen es an, dies mit dem Argument -into <WinId> .

Ich weiß nicht, ob Konsole das kann, ich benutze es nicht und die Manpage scheint nicht darüber zu sprechen.

Aber das bedeutet nicht, dass es nicht machbar ist, das X Window System ist sehr flexibel und jeder kann ein anderes Fenster reparieren (so fügen Windows-Manager Dekorationen zu Windows hinzu).

Werfen Sie einen Blick auf man 3 XReparentWindow ;-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X