1
Qt를 통해 외부 프로그램을 시작하고 프로그램을 Qt gridLayout (또는 Qt 창 내부)에 표시 할 수 있습니까?Qt는 Qt gridLayout에서 외부 프로그램을 시작합니다.
지금은 Qt를 통해 외부 프로그램을 시작할 수 있지만 QtWindow 내부에 프로그램을 표시 할 방법을 찾지 못했습니다. 즉, 프로그램은 Qt 윈도우 외부에 나타납니다.
Qt Pro file
#-------------------------------------------------
#
# Project created by QtCreator 2016-09-21T16:31:30
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = WifiProject
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
메인 창 .H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtNetwork/QNetworkConfigurationManager>
#include <QtNetwork/QNetworkSession>
#include <QtNetwork/QNetworkInterface>
#include <QDebug>
#include <QList>
#include <QProcess>
#include <QWidget>
#include <QBoxLayout>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_StartWicd_clicked();
private:
Ui::MainWindow *ui;
void searchForNetwork();
QProcess *wicdProgram;
void addWicdProgram();
};
#endif // MAINWINDOW_H
mainwindow.cpp
해결책은 QT하여 응용 프로그램 실행의 창 ID를 검색하는 것입니다 그리고 당신이 같이 할 수#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QWindow>
QString program = "/usr/bin/wicd-gtk";
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
searchForNetwork();
addWicdProgram();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::searchForNetwork(){
}
void MainWindow::addWicdProgram(){
wicdProgram = new QProcess(this);
wicdProgram->setProgram(program);
WId winid = this->winId();
QWindow *container = QWindow::fromWinId(winid);
QWidget *program_start = createWindowContainer(container);
setCentralWidget(program_start);
ui->wifiGridLayout->addWidget(program_start);
wicdProgram->start();
qDebug()<<"wicd addded";
//ui->wifiGridLayout->addWidget(program_start);
}
void MainWindow::on_StartWicd_clicked()
{
//wicdProgram->start(program);
qDebug()<<"the wicd should have started";
wicdProgram->terminate();
}
Linux의 경우 'QX11EmbedContai 그것의 ner'. – hank
안녕 행크 귀하의 재생 주셔서 감사합니다, 나는 QX11EmbedContainer (http://doc.qt.io/qt-4.8/qx11embedcontainer.html#details)에 대한 조사를했지만 코드 Qt를 구현하면 나에게 오류가 발생합니다 (QX11EmbedContainer는 유형을 지정하지 않습니다. 라즈베리 파이의 Qt 코드이고 컴파일러는 G ++입니다. –
어떤 버전의 Qt를 사용하고 있습니까? Qt5에서'QX11EmbedContainer'는 ['QWidget :: createWindowContainer'] (http://doc.qt.io/qt-5/qwidget.html#createWindowContainer)로 대체되었습니다. –