首页| 论坛| 消息

标题:QAction一定要放在menubar中才能出发shortcut吗?
作者:jemyzhang
日期:2013-12-12 12:10
内容:

Qt5.1
QAction如果放在contextMenu中,setShortcut没有效果。加入menubar才能够触发shortcut。

请问是否这样?右键菜单中的action设置的shortcut是否就一定没有用?


#1 [dbzhang800 12-12 13:50]
不清楚你如何得出的这种结论。
据我所知,QAction的shortcut不光在context Menu可以起作用,而是,“在任何一个QWidget及其派生类中,QAction的shortcut都可以起作用”
#2 [jemyzhang 12-12 16:07]
引用第1楼dbzhang800于2013-12-12 13:50发表的:
不清楚你如何得出的这种结论。
据我所知,QAction的shortcut不光在context Menu可以起作用,而是,“在任何一个QWidget及其派生类中,QAction的shortcut都可以起作用”
以下是我的测试代码, ui->menuBar->addAction(m_act); //如果不加这一行,快捷键不起作用

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->textEdit,SIGNAL(customContextMenuRequested(QPoint)),
this,SLOT(showContextMenu(QPoint)));
m_act = new QAction("&Paste",this);
m_act->setShortcut(tr("Ctrl+D"));
connect(m_act, SIGNAL(triggered()),this, SLOT(PasteContent()));
ui->menuBar->addAction(m_act);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showContextMenu(QPoint pt)
{
QMenu *menu = ui->textEdit->createStandardContextMenu();
menu->addSeparator();
menu->addAction(m_act);
menu->exec(mapToGlobal(pt));
delete menu;
}
void MainWindow::PasteContent()
{
QString txt = QApplication::clipboard()->text();
ui->textEdit->setText(txt);
}
#3 [dbzhang800 12-12 16:28]
是的,你必须将QAction加入到一个QWidget或其派生类的对象中。
在你的例子中,你完全也可以 this->addAction(m_act) 嘛
#4 [jemyzhang 12-12 16:39]
引用第3楼dbzhang800于2013-12-12 16:28发表的:
是的,你必须将QAction加入到一个QWidget或其派生类的对象中。
在你的例子中,你完全也可以 this->addAction(m_act) 嘛
果然可以,你太棒了!非常感谢!
#5 [dbzhang800 12-12 16:46]
题外,如果你只需要快捷键的话,直接用 QShortcut 就行了,没必要用QAction进行一下中转

<< 1 2 >> (1/2)

回复 发表
主题 版块