在我的项目中,我创建了一个透明的无框QMainWindow,然后创建了QmlApplicationViewer。我需要能够拖动窗口并调整其大小。 我该怎么办?Resize Qml窗口
3
A
回答
3
这个程序是这里提出的一个小变化应对transparent windows in QML applications:
win.cpp:
#include <QApplication>
#include <QDeclarativeView>
#include <QMainWindow>
#include <QDeclarativeContext>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow window;
QDeclarativeView* v = new QDeclarativeView;
window.setCentralWidget(v);
v->setSource(QUrl::fromLocalFile(("draw_rectangles.qml")));
// expose window object to QML
v->rootContext()->setContextProperty("mainwindow",&window);
window.setStyleSheet("background:transparent;");
window.setAttribute(Qt::WA_TranslucentBackground);
window.setWindowFlags(Qt::FramelessWindowHint);
window.show();
app.exec();
}
win.pro:
TEMPLATE += app
QT += gui declarative
SOURCES += win.cpp
draw_rectangles.qml:
import Qt 4.7
Item {
Rectangle {
opacity: 0.5
color: "red"
width: 100; height: 100
MouseArea {
anchors.fill: parent
onPressed: {
mainwindow.size.width = 200;
mainwindow.size.height = 500;
}
}
Rectangle {
color: "blue"
x: 50; y: 50; width: 100; height: 100
MouseArea {
id: mouseRegion
anchors.fill: parent;
property variant clickPos: "1,1"
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
mainwindow.pos = Qt.point(mainwindow.pos.x+delta.x,
mainwindow.pos.y+delta.y)
}
}
}
}
}
尽管您对透明度不感兴趣,但该应用程序展示了如何将QMainWindow
展示给QML。这允许QML应用程序在主窗口中进行更改。
点击蓝色矩形拖动窗口周围,并点击红色矩形在QML使用硬编码值来调整窗口的大小。当然,因为窗口是透明的,所以当你调整它的大小时,你将不会看到一个普通的不透明应用程序的视觉反馈。但是,调整大小操作起作用。请享用!
+0
我相信,如果您真的需要,您可以调整此代码以使用'QmlApplicationViewer'而不是'QDeclarativeView'。 – karlphillip
相关问题
- 1. JQuery:$(窗口).resize()不工作
- 2. PyQt4的窗口resize事件
- 3. QML窗口最小宽度
- 4. QML:拖动无框窗口
- 5. 无框pyqt/qml窗口
- 6. 从QML打开Qt窗口
- 7. $(窗口).resize()在移动设备上
- 8. jquery resize()调整窗口大小
- 9. 在$(窗口).resize间隔出格divresize
- 10. jQuery方向与$(窗口).resize ooops
- 11. 意外行为:绝对positiong&$(窗口).resize()
- 12. $(窗口).resize在IE中不工作
- 13. QT/QML从主窗口重新打开新窗口
- 14. 使用QML创建新窗口
- 15. 全屏时QML窗口不透明
- 16. QML打开GUI窗口和控制台
- 17. Qt没有正确显示QML窗口
- 18. 移动窗口保持Qml MouseArea
- 19. 将QML元素锚定到窗口
- 20. 如何从QML内创建新窗口?
- 21. QML查看加载新窗口
- 22. 从QML窗口返回父值
- 23. 将qml项目移出窗口左侧
- 24. QML SwipeView涵盖整个窗口
- 25. 如何使QML窗口无边界?
- 26. QML获取加载的qml窗口的winId
- 27. 如何使用子窗口中的句柄获取父窗口的resize事件?
- 28. 使用jQuery计算div窗口的高度resize使用jQuery
- 29. $(窗口).resize事件不工作100%顺利
- 30. 如果在窗口else语句resize在不触发
如果您创建了FRAMELESS窗口,我假设您不希望用鼠标光标移动它,对吧?所以我认为你可以使用['resize()'](http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#size-prop)。 – karlphillip
我应该澄清。是的,我创建了一个无框架窗口,但仅仅是因为我不想使用标准设计。 – Dcow
这是否意味着你想用鼠标移动窗口?考虑添加C++标记。 – karlphillip