我有一段调用mousePressEvent的代码.我有左键单击输出光标的坐标,我有右键单击做同样的,但我也想右键单击打开上下文菜单.我到目前为止的代码是:
void plotspace::mousePressEvent(QMouseEvent*event)
{
double trange = _timeonright - _timeonleft;
int twidth = width();
double tinterval = trange/twidth;
int xclicked = event->x();
_xvaluecoordinate = _timeonleft+tinterval*xclicked;
double fmax = Data.plane(X,0).max();
double fmin = Data.plane(X,0).min();
double fmargin = (fmax-fmin)/40;
int fheight = height();
double finterval = ((fmax-fmin)+4*fmargin)/fheight;
int yclicked = event->y();
_yvaluecoordinate = (fmax+fmargin)-finterval*yclicked;
cout<<"Time(s): "<<_xvaluecoordinate<<endl;
cout<<"Flux: "<<_yvaluecoordinate<<endl;
cout << "timeonleft= " << _timeonleft << "\n";
returncoordinates();
emit updateCoordinates();
if (event->button()==Qt::RightButton)
{
contextmenu->setContextMenuPolicy(Qt::CustomContextMenu);
connect(contextmenu, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(ShowContextMenu(const QPoint&)));
void A::ShowContextMenu(const QPoint …Run Code Online (Sandbox Code Playgroud) 我在分层和zorderpython中苦苦挣扎.我正在使用带有三个相关元素的matplotlib进行3D绘图:surface_plot一个行星的A ,一个surface_plot围绕该行星的环,以及一个contourf显示行星的阴影投射到环上的图像.
我希望图形能够精确地显示这种情况在现实生活中的样子,环绕着行星,阴影位于相应位置的环上.如果影子在给定POV的行星后面,我希望阴影被行星阻挡,反之亦然,如果阴影位于行星前面,对于给定的POV.
需要说明的是,这只是一个分层问题.我的行星,戒指和阴影都正确地绘制.但是,阴影永远不会显示在地球的前面.它就好像行星正在"阻挡"阴影,即使行星在层次方面应该位于阴影之下.
我已经尝试了我能想到的每一件事,zorder并重新排列调用各种绘图元素的顺序.环DO正确地显示在行星前面,但阴影不会.
我的实际代码很长.这里是相关部分:
绘图设置:
def setup_saturn_plot(ax3, elev, azim, drawz, drawxy,view):
ax3.set_aspect('equal','box')
ax3.view_init(elev=elev, azim=azim)
if(view=="top" or view == "Top" or view == "TOP"):
ax3.dist = 5.5
if(view=="star" or view == "Star" or view == "STAR"):
ax3.dist = 5.0 #4.5 is best value
proj3d.persp_transformation = orthographic_proj
# hide grid and background
ax3.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax3.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax3.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax3.grid(False)
# hide z axis in …Run Code Online (Sandbox Code Playgroud)