在我的項目中,我創建了一個透明的無框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