Qt 如何将上下文菜单添加到qml QDeclarativeView?
我需要我的qml小部件中的ContextMenu。 我有一个解决方案:创建QGraphicsProxyWidget,它包含QMenu,但有一个问题:上下文菜单在主窗口外不可见。如何将主窗口设置为菜单的父窗口? 自定义组件是个坏主意-我需要QMenu的可能性:exec、actions、弹出窗口和其他 Main.qmlQt 如何将上下文菜单添加到qml QDeclarativeView?,qt,qml,qmenu,Qt,Qml,Qmenu,我需要我的qml小部件中的ContextMenu。 我有一个解决方案:创建QGraphicsProxyWidget,它包含QMenu,但有一个问题:上下文菜单在主窗口外不可见。如何将主窗口设置为菜单的父窗口? 自定义组件是个坏主意-我需要QMenu的可能性:exec、actions、弹出窗口和其他 Main.qml import QtQuick 1.1 import CustomComponents 1.0 Rectangle { width: 360 height: 360
import QtQuick 1.1
import CustomComponents 1.0
Rectangle {
width: 360
height: 360
QMLContextMenu {
id: menu
}
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton | Qt.LeftButton
onClicked: {
if(mouse.button === Qt.RightButton)
menu.exec(mouse.x, mouse.y);
else
Qt.quit();
}
}
}
main.cpp
#include <QApplication>
#include "qmlapplicationviewer.h"
#include <QtCore>
#include <QtDeclarative>
#include <QtGui>
class QMLContextMenu : public QGraphicsProxyWidget
{
Q_OBJECT
public:
QMLContextMenu(QGraphicsItem* parent = 0) : QGraphicsProxyWidget(parent)
{
menuWidget = new QMenu("my menu");
setWidget(menuWidget);
}
public slots:
QString exec(int x, int y)
{
menuWidget->clear();
menuWidget->addAction("hello world!");
menuWidget->addSeparator();
menuWidget->addAction("or not...");
//menuWidget->show();
QAction *pResultAction = menuWidget->exec(QPoint(x, y));
QString text;
if(pResultAction)
text = pResultAction->text();
return text;
}
private:
QMenu *menuWidget;
};
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
qmlRegisterType<QMLContextMenu>("CustomComponents", 1, 0, "QMLContextMenu");
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/quick1/main.qml"));
viewer.showExpanded();
return app->exec();
}
#包括
#包括“qmlapplicationviewer.h”
#包括
#包括
#包括
类QMLContextMenu:公共QGraphicsProxyWidget
{
Q_对象
公众:
QMLContextMenu(QGraphicsSitem*parent=0):QGraphicsProxyWidget(parent)
{
menuWidget=newqmenu(“我的菜单”);
setWidget(menuWidget);
}
公众时段:
QString执行器(整数x,整数y)
{
menuWidget->clear();
menuWidget->addAction(“你好,世界!”);
menuWidget->addSeparator();
菜单Widget->addAction(“或不…”);
//菜单Widget->show();
QAction*preltaction=menuWidget->exec(QPoint(x,y));
QString文本;
if(预作用)
text=预设动作->text();
返回文本;
}
私人:
QMenu*菜单Widget;
};
Q_DECL_导出int main(int argc,char*argv[])
{
QScopedPointer应用程序(createApplication(argc,argv));
qmlRegisterType(“CustomComponents”,1,0,“QMLContextMenu”);
QmlApplicationViewer;
setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
setMainQmlFile(QLatin1String(“qml/quick1/main.qml”);
viewer.showExpanded();
返回app->exec();
}
使用listview创建您自己的矩形。但这样做会有很多问题,因为在QML1中,qml小部件不能是顶级窗口。我做到了:
使用listview创建自己的矩形。但这样做会有很多问题,因为在QML1中,qml小部件不能是顶级窗口。我做到了:
我不能回答你的问题。但为什么不直接走这条路呢。下面是QML和Javascript中上下文菜单实现的示例。我不能回答你的问题。但为什么不直接走这条路呢。下面是QML和Javascript中上下文菜单实现的示例。