一个奇怪但又合乎现实需要的需求,就是把外部程序嵌入到本窗口内,实现外部程序在本窗口的显示。可能外部程序是由其他人开发的,但是想“拿来”作为内部使用,于是乎想把外部程序嵌入到本程序窗口内,让他们更像是一个整体。更有甚者,也可以实现外部程序与本程序之间的通讯。
1、外部程序单独运行时:
2、外部程序嵌入到QT界面
3、外部程序主要代码:
#include "outerwindow.h"
#include "ui_outerwindow.h"
#include <QTimer>
#include <QDateTime>
OuterWindow::OuterWindow(QWidget *parent)
: QWidget(parent)
, ui(new Ui::OuterWindow)
{
ui->setupUi(this);
setFixedSize(QSize(450,300));
ui->frame_content->setStyleSheet(QString::fromUtf8("QFrame#frame_content{background-color: white;"
"border: 1px dashed gray;"
"border-radius: 10px;}"));
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, [&](){
QString dt = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
ui->label_datetime->setText(dt);
});
timer->start(1000);
}
OuterWindow::~OuterWindow()
{
delete ui;
}
4、外部程序嵌入到窗口的代码
#include "outercontainer.h"
#include <QApplication>
#include <QVBoxLayout>
#include <QLabel>
#include <QWindow>
#include "windows.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WId winId = (WId)FindWindow(NULL, L"OuterWindow");
QWindow *window = QWindow::fromWinId(winId);
QWidget *widget = QWidget::createWindowContainer(window);
QWidget* container = new QWidget;
container->setContentsMargins(10,10,10,10);
container->setMinimumSize(QSize(600, 400));
QVBoxLayout* layout = new QVBoxLayout(container);
QLabel* label = new QLabel("Hello Kandy", container);
layout->addWidget(label);
layout->addSpacing(10);
layout->addWidget(widget, 1);
layout->addSpacing(10);
container->show();
return a.exec();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)