QT多进程界面程序

适合主进程界面与子进程界面都是QT界面的情况,其他进程的情况请参考其他文章,需要区分平台。

关键点
使用如下两个函数,QWInow类是Qt5.0之后提供的,Qt4版本是否有代替的未去深究,主要这个功能需求比较少,很少涉及。
QWindow * fromWinId(WId id);
QWidget *QWidget::createWindowContainer(QWindow *window, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())

 

下面示例三个程序都在一个目录下,每个app在相应的子目录下面

示例:

子窗口1为MyWidget1,为应用程序
功能:显示界面,并将窗口1的wid写入QSetting配置文件(或者其它主进程能获取子进程id的方式都行)


子窗口2为MyWidget2,为应用程序
功能:显示界面,并将窗口2的wid写入QSetting配置文件

主窗口进程启动两个子进程并从 QSetting文件获取两个子窗口的wId;

然后使用下面两个函数将两个窗口添加到主界面上就行了。
QWindow *childWin1 = QWindow::fromWinId(wid1);  //根据子窗口id获取QWindow指针
QWindow *childWin2 = QWindow::fromWinId(wid2);
if(childWin1 && childWin2)

{
        QVBoxLayout *ver = new QVBoxLayout;
        childWin1->setFlags(childWin1->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint );
        QWidget *widget1 = QWidget::createWindowContainer(childWin1,this,Qt::Widget); //根据获取的QWindow指针创建一个容器来放子窗口界面
        ver->addWidget(widget1);
        childWin2->setFlags(childWin2->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint );
        QWidget *widget2 = QWidget::createWindowContainer(childWin2,this,Qt::Widget);
        ver->addWidget(widget2);
        //设置边距
        ver->setContentsMargins(5,5,5,5);
        ver->setSpacing(0);
        this->setLayout(ver);

 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值