Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Firefox от Июнь 20, 2016, 16:18



Название: QX11EmbedContainer
Отправлено: Firefox от Июнь 20, 2016, 16:18
Здравствуйте, уважаемые форумчане.
Хочу спросить, почему у меня не получается встроить программу в QX11EmbedContainer. Делаю это в конструкторе. Работаю в системе МСВС ядра 2.6.
Есть у меня tabWidget, на нем лежит фрейм, на фрейме вертикальный лейаут, в который я пытаюсь вписать программу которую запускаю.
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("SEND");
    QX11EmbedContainer *container;
    container=new QX11EmbedContainer;
    ui->verticalLayout->addWidget(container);
    container->show();
    QProcess *process;
    container->embedClient(atol("/home/IMIT/contein-build/sender"));
    process = new QProcess(this);
    QStringList arg;
    arg<<QString::number(container->winId());

    QString executable("/home/IMIT/contein-build/sender");
    process->start(executable,arg);
}

Но программа запускается отдельно и не встраивается в контейнер.


Название: Re: QX11EmbedContainer
Отправлено: Bepec от Июнь 20, 2016, 16:45
ХЗ как встраивается, но вы не встраиваете, а тупо запускаете отдельный QProcess. Возможно вам стоит почитать документацию на данный компонент?


Название: Re: QX11EmbedContainer
Отправлено: gil9red от Июнь 20, 2016, 16:53
Некоторые отличия от примера из доки (http://doc.qt.io/qt-4.8/qx11embedcontainer.html#details) есть:
Код
C++ (Qt)
   QX11EmbedContainer container;
   container.show();
 
   QProcess process(&container);
   QString executable(app.arguments()[1]);
   QStringList arguments;
   arguments << QString::number(container.winId());
   process.start(executable, arguments);
 
   int status = app.exec();
   process.close();
   return status;


Название: Re: QX11EmbedContainer
Отправлено: Firefox от Июнь 20, 2016, 17:04
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("SEND");
    QX11EmbedContainer container;
    container.show();
    QProcess process(&container);
    QString executable("/home/IMIT/contein-build/sender");
    QStringList arg;
    arg<<QString::number(container.winId());
    process->start(executable,arg);
   int st=qApp->exec();
   process.close();
}
Отдельно в окне запускается container и отдельно программа, когда закрываю container открывается форма программы моей.


Название: Re: QX11EmbedContainer
Отправлено: Firefox от Июнь 20, 2016, 17:18
на exec() все зависает, и не доходит до метода
process.close(). Что можно сделать?


Название: Re: QX11EmbedContainer
Отправлено: gil9red от Июнь 20, 2016, 20:41
а вы exec вызывайте после
его вообще, обычно в main вызывают :)