В моем проекте я создал прозрачный и бескаркасный QMainWindow, а затем создал QmlApplicationViewer. Мне нужно уметь перетаскивать и изменять размер окна. Как я могу это сделать?Окно Resize Qml
ответ
Это приложение представляет собой небольшое изменение одного представленного здесь, чтобы иметь дело с 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. Конечно, поскольку окно прозрачно, у вас не будет визуальной обратной связи обычного непрозрачного приложения, когда вы измените его размер. Но операция изменения размера работает. Наслаждайтесь!
Я надеюсь, что вы сможете адаптировать этот код для использования 'QmlApplicationViewer' вместо' QDeclarativeView', если вам действительно нужно. – karlphillip
Если вы создали окно FRAMELESS, я предполагаю, что вы не собираетесь его перемещать с помощью курсора мыши, правильно? Поэтому я думаю, вы можете использовать ['resize()'] (http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#size-prop). – karlphillip
Мне следовало бы разъяснить. Да, я создал бескаркасное окно, но только потому, что не хочу использовать стандартный дизайн. – Dcow
Означает ли это, что вы хотите переместить окно с помощью мыши или нет? Подумайте о добавлении тега C++. – karlphillip