我正在动态创建垂直布局中的QPushButtons列表。我目前正在使用“click”信号来表示某个功能。但是我想用鼠标右键来增加功能。防爆。通过右键单击打印鼠标所在的QPushButton的工具提示。
but = QtGui.QPushButton()
but.setText(cur);but.setCheckable(True)
but.setStyleSheet(_fromUtf8("text-align:right;background-color: rgb(50, 50, 50);"))
but.setToolTip(longName + "." + cur)
我正在查看“QMouseEvent”,“setMouseTracking”,“mousePressEvents”。但我不确定如何正确使用它们来获得我想要的结果。 我也可以通过“右键单击”打开QPushButton的自定义信号。
答案 0 :(得分:2)
您可以在处理程序中检查describe "PUT #update" do
before :each do
@request.env['devise.mapping'] = Devise.mappings[:user]
user_tom = FactoryGirl.create(:user, email: 'tom@test.com')
sign_in user_tom
end
it "changes user attributes" do
put :update, user: { email: 'jerry@test.com' }
subject.current_user.reload
assigns[:user].should_not be_new_record
expect(subject.current_user.email).to eq 'jerry@test.com'
expect(flash[:notice]).to eq 'You updated your account successfully.'
end
end
信号的鼠标按钮:
clicked
mouse button constants可以一起进行OR运算,允许您测试它们的不同组合。因此,上面的代码会在单击左键时检测到按下右键。
您也可以使用keyboard modifiers:
执行类似的操作 but.clicked.connect(self.buttonClicked)
...
def buttonClicked(self):
if QtGui.qApp.mouseButtons() & QtCore.Qt.RightButton:
print(self.sender().toolTip())
答案 1 :(得分:2)
通常,鼠标右键单击连接到上下文菜单。与
but.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
but.customContextMenuRequested.connect(handle_right_click)
您可以连接一个处理程序,可以用于鼠标右键单击。
如果您想要进行纯粹的鼠标右键单击操作,则应扩展QPushButton并覆盖mousePressEvent(self, event)
和mouseReleaseEvent(self, event)
。然后,您需要将按钮ContextMenuPolicy设置为QtGui.Qt.PreventContextMenu
以确保其投放:
窗口小部件没有上下文菜单,与NoContextMenu不同,处理不会延迟到窗口小部件的父窗口。这意味着保证所有鼠标右键事件都通过QWidget::mousePressEvent()和QWidget::mouseReleaseEvent()传递给窗口小部件。