由于遗留原因,我试图将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。