QX11EmbedWidget и QX11EmbedContainer

Можно ли поместить произвольную программу (firefox, openoffice и т. д.) в контейнер QX11EmbedContainer? Течет, кажется, работает

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;
}

но следующий фрагмент запускает новое окно, а не то, что я хочу

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;
}

person adk    schedule 09.07.2009    source источник


Ответы (1)


Первый пример работает, потому что xterm может изменить виджет верхнего уровня (окно X11). Вы указываете ему сделать это с помощью аргумента -into <WinId>.

Я не знаю, может ли Konsole сделать это, я не использую ее, и на странице руководства, похоже, об этом не говорится.

Но это не значит, что это невыполнимо, система X Window очень гибкая, и любой может переназначить другое окно (именно так оконные менеджеры добавляют украшения к окнам).

Взгляните на man 3 XReparentWindow ;-)

person p4bl0    schedule 14.07.2009
comment
Кажется, здесь есть другое решение stackoverflow.com/questions/305523/ - person p4bl0; 14.07.2009
comment
Какой заголовочный файл для этого? Я имею в виду встроенный контейнер? Я попробовал обычный #include‹QX11EmbedContainer›, и ошибка в том, что файл не может быть найден. - person praxmon; 03.02.2014