在Qt中嵌入本机窗口

时间:2015-09-16 15:17:09

标签: c++ qt winapi

由于遗留原因,我试图将WinApi窗口放入Qt用户界面。这看起来相当简单:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    HWND hwnd = CreateWindow(L"STATIC", L"Testwindow", 0, 0, 0, 0, 0, 0, 0, 0, 0);
    QWidget *widget = QWidget::createWindowContainer(QWindow::fromWinId((WId)hwnd));
    ui->horizontalLayout->addWidget(widget);
}

WinApi窗口正确显示在Qt窗口内,但是,仅调整大小有时会工作,留下一个丑陋的半调整大小的窗口,我每秒钟会收到4次警告:

  

QWindowsWindow :: setGeometryDp:无法在QWindow /''上设置几何366x366 + 20 + 285。产生的几何:116x0 + 8 + 30(帧:0,0,0,0,自定义边距:0,0,0,0,最小尺寸:0x0,最大尺寸:16777215x16777215)。

它似乎与this有关,它显然有一个从未发布过的解决方案。

调整大小问题看起来有点像this,但我正在使用建议的布局层次结构,问题仍然存在。

似乎alternative way to embed a native window使用了QWidget::create(native_handle),但是那个人在我身上崩溃了。

如何在Qt中嵌入本机窗口,以便在调整大小时正常工作并且没有QWindowsWindow::setGeometryDp个问题?

在VS 2013上,平台是Windows 7,Qt 5.5.0。

0 个答案:

没有答案