我希望能够显示QMenu
项目的工具提示QAction
.我所取得的最好成绩就是将一个悬停的信号连接QAction
到一个QTooltip
节目:
connect(action, &QAction::hovered, [=]{
QToolTip::showText(QCursor::pos(), text, this);
});
Run Code Online (Sandbox Code Playgroud)
问题是有时程序会将工具提示定位在菜单下方,特别是在更改菜单时.
有没有办法强制工具提示显示在顶部?
我已经建立了QMenu MainMenu
我的上顶MainWindow
在我的应用程序.每个人都习惯了,我有以下QMenu
主菜单:
文件 - 编辑 - SuperHeavyExpertMenus - 设置 - 帮助
我想SuperHeaverExpertMenus
在程序启动时最初隐藏子树,因为它会包含很多设置,这可能会使初学者用户感到困惑.
例如,我想SuperHeavyExpertMenu
在"设置"中的复选框为真时显示该子树.
我可以隐藏孩子QActions
的的QMenu
上述S,争夺QAction:setVisible(false)
.但我能做到这一点QMenu
吗?
有没有办法隐藏QMenu
?
我正在用GUI编写的应用程序PySide
.我设置了QMenu
一个QPushButton
,添加了几个QActions
via QMenu.addAction
.为了进一步说明这些行动给用户我说QToolTip
的这些带QAction.setToolTip
.
当我运行GUI时,我QToolTip
将无法显示.下面发布的示例再现了同样的问题,任何想法?
提前致谢
import sys
from PySide import QtGui
class Example(QtGui.QPushButton):
def __init__(self, parent = None):
super(Example, self).__init__(parent)
self.setText('TestMenu')
self.setToolTip('This is a Test Button')
menu = QtGui.QMenu(self)
action_1 = menu.addAction('Action1')
action_1.setToolTip('This is action 1')
action_2 = menu.addAction('Action2')
action_2.setToolTip('This is action 2')
action_3 = menu.addAction('Action3')
action_3.setToolTip('This is action 3')
action_4 = menu.addAction('Action4')
action_4.setToolTip('This is action 4')
self.setMenu(menu)
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = …
Run Code Online (Sandbox Code Playgroud) 我有一个QAction
在QMenu
.当QAction
是triggered()
我想知道哪个按钮做到了.
connect(YourAction, SIGNAL(triggered()), this, SLOT(actionclicked()));
void MainWindow::actionclicked(QMouseEvent *e)
{
if (e->buttons() == Qt::RightButton)
}
Run Code Online (Sandbox Code Playgroud)
我不能做这样的事情,因为triggered()
没有这样的论点.
我对PyQt还是个新手,但我真的不知道为什么会这样.
我有一个我这样创建的主窗口:
class MainWindow(QtGui.QMainWindow):
#initialize
def __init__(self):
#Call parent constructor
super(MainWindow, self).__init__()
#Load the interface
self.ui = uic.loadUi(r"Form Files/rsleditor.ui")
#Show the ui
self.ui.show()
Run Code Online (Sandbox Code Playgroud)
当我想用以下方法覆盖close事件时:
def closeEvent(self, event):
quit_msg = "Are you sure you want to exit the program?"
reply = QtGui.QMessageBox.question(self, 'Message',
quit_msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
self.saveSettings()
event.accept()
else:
event.ignore()
Run Code Online (Sandbox Code Playgroud)
我读过我必须把uic.loadUI
电话换成:
self.ui = uic.loadUi(r"Form Files/rsleditor.ui", self)
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我的所有行为都开始被掀起三次.我很确定我在添加它之前正确设置信号和插槽.有帮助吗?
pyuic文件:
RSLEditorClass.setIconSize(QtCore.QSize(24, 24))
self.centralWidget = QtGui.QWidget(RSLEditorClass)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralWidget.sizePolicy().hasHeightForWidth())
self.centralWidget.setSizePolicy(sizePolicy)
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
self.vLayMain = QtGui.QVBoxLayout(self.centralWidget) …
Run Code Online (Sandbox Code Playgroud) 我的目标是制作带有标签分隔符的菜单。因此,我正在运行以下代码:
QMenu *menu = new QMenu;
QAction *group1 = menu->addSeparator();
group1->setText("Group of actions #1");
menu->addAction("Action #1");
menu->addAction("Action #2");
menu->addAction("Action #3");
QAction *group2 = menu->addSeparator();
group2->setText("Group of actions #2");
menu->addAction("Action #1");
menu->addAction("Action #2");
menu->addAction("Action #3");
QToolButton btn;
btn.setText("Click me");
btn.setMenu(menu);
btn.setPopupMode(QToolButton::InstantPopup);
btn.show();
Run Code Online (Sandbox Code Playgroud)
并得到这个
而不是这个(我是由MS Paint创建的:))
怎么了?
编辑:是的,还有另一个类似这样的问题(QMenu中的非交互式项目),但是可能存在更简单的方法吗?
解决方案之一是使用“融合”主题:)我刚刚将以下代码添加到int main
函数中:
int main(int argc, char *argv[]) {
QApplication::setStyle("Fusion");
QApplication a(argc, argv);
...
Run Code Online (Sandbox Code Playgroud) 我对Qt非常陌生,我需要使用QTest
命名空间和来模拟点击QTest::mouseClick
。我的问题是我想单击QMenu
定义为的条目,QAction
但是该mouseClick
函数不允许我将其作为参数传递(仅QWidgets
或QWindows
)。
我在这里可以做什么?
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <cassert>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction* back = new QAction(this);
back->setVisible(true);
back->setShortcut(QKeySequence("Ctrl+M"));
bool cres = connect(back, SIGNAL(triggered(bool)), this, SLOT(mySlot()));
assert(cres);
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我尝试捕获Ctrl+M
关键事件。我不想将操作放在菜单中。connect
返回true,但从mySlot
不调用。在菜单中插入动作后,快捷方式可以正常工作。我做错了什么?
这是GUI的快照.我想通过单击QMenu
对象帮助来执行简单的操作.该QMenu
对象没有任何子菜单.
你能告诉我如何只在QMenu
点击时执行操作这是我尝试过的,但我得到了一个空输出.
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QSignalMapper>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void createActions();
QSignalMapper *pSignalMapper;
private slots:
void help();
};
#endif // MAINWINDOW_H
Run Code Online (Sandbox Code Playgroud)
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
createActions();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::createActions()
{
pSignalMapper = new …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Google 地图上创建类似于放大、缩小的按钮;我想要只和图标一样大的按钮:
http://codegeekz.com/wp-content/uploads/google-maps-jquery.jpg
(我很抱歉没有发布图片,显然没有足够的声誉)。
我正在尝试使用 QAction 但由于某种原因,按钮没有出现。我已经使用 QAction 在另一个项目中创建按钮,但复制所有相关代码并没有成功(实例根本没有出现)。这些是必需品:
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QAction>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
protected slots:
void addEntry();
private:
QAction *addButton;
};
#endif // MAINWINDOW_H
Run Code Online (Sandbox Code Playgroud)
主窗口.cpp
#include "mainwindow.h"
#include <QHBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget *window = new QWidget;
QVBoxLayout *container = new QVBoxLayout();
//Horizontal add/subtract layout------------------------------------
QHBoxLayout *layer1 = new QHBoxLayout();
QAction *addButton = new QAction((QIcon("/home/kyle/Desktop/add1.png")),"Add Entry", this);
addAction(addButton);
connect(addButton, SIGNAL(triggered()), …
Run Code Online (Sandbox Code Playgroud)