我正在尝试使在QWidget(ui-> appWidget)中显示的qt MainWindow应用程序成为外部窗口(我从QProcess运行的其他应用程序)。
现在,当我这样做时,新的小部件将获得ui-> appWidget大小, 但是它没有进入,它仍然将外部应用程序显示为外部窗口。
我需要做些什么才能使其嵌入到ui-> appWidget中?
这是我的代码:
void MainWindow::runScript(QString command){
//Set Procees to Scripts directory
process.setWorkingDirectory(directory.currentPath() + "/Scripts");
//Open command process
process.start("./" + command + ".sh" );
//Check if Script succeed to open
if(process.waitForStarted() == false){
qDebug() << "Error starting " << command << " Script";
qDebug() << "ERROR: " << process.errorString();
}else{
qDebug() << "Script succeed to open";
}
QThread::msleep(5000); // make sure process is up.
QWindow * window = QWindow::fromWinId(0x3200005); // 0x3200005 - Hardcoded window id .
QWidget * widget = createWindowContainer(window);
QVBoxLayout * vl = new QVBoxLayout(ui->appWidget);
vl->addWidget(widget);
ui->appWidget->setLayout(vl);
widget->show();
}
如果需要更多详细信息,请告诉我。
感谢您的帮助!
答案 0 :(得分:1)
可能是您将布局设置为错误的小部件。
看看这段代码,它在QMainWindow内移动一个现有窗口(海豚文件管理器-我通过xwininfo命令检索到了窗口ID)
int main( int argc, char** argv )
{
int l_result = -1;
QApplication app(argc,argv);
QMainWindow* l_main_win = new QMainWindow();
l_main_win->setWindowTitle("DOLPHIN EMBEDDED IN QT APPLICATION!");
QWindow *l_container = QWindow::fromWinId(0x4400005);
QWidget *l_widget = QWidget::createWindowContainer(l_container);
l_main_win->setCentralWidget(l_widget);
l_main_win->show();
l_result = app.exec();
return l_result;
}
它将我的海豚窗口移动到名为“ QT应用程序中嵌入的海豚!”的Qt主窗口内: