Qt - QPushButton快捷方式没有琐事

时间:2017-05-24 19:23:36

标签: c++ qt

我无法通过QtCreator将快捷方式绑定到QPushButton

我所做的是在QDialog中放置一个按钮,并使用自动连接将clicked()信号连接到插槽。然后,我在表单编辑器中将属性QAbstractButton::shortcut设置为 Ctrl + N

当我点击按钮时,插槽会被触发,但是当我按下快捷键时,没有任何反应。

以下是ui文件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="text">
    <string>PushButton</string>
   </property>
   <property name="shortcut">
    <string>Ctrl+N</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

这是我的Dialog类的代码(标头和源已合并):

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0) :
        QDialog(parent), ui(new Ui::Dialog)
    {
        ui->setupUi(this);
    }

private slots:
    void on_pushButton_clicked()
    {
        qDebug() << "click!";
    }

private:
    Ui::Dialog *ui;
};

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);
    Dialog dialog;
    dialog.show();
    return app.exec();
}

我设法让它在菜单栏中使用了一个动作,我不明白为什么它似乎不起作用。

我使用的是Qt 5.8.0。

2 个答案:

答案 0 :(得分:0)

您可能正在开发一个macOS,ControlModifier对应Command keysMetaModifier对应Control key对应documented by Qt:< / p>

  

注意:在macOS上,ControlModifier值对应于Command   Macintosh键盘上的键,MetaModifier值对应   到控制键。

QKeySequence的文档也提供了相关信息:

  

注意:在macOS上,引用&#34; Ctrl&#34;,Qt :: CTRL,Qt :: Key_Control和   Qt :: ControlModifier对应于Macintosh上的Command键   键盘,以及&#34; Meta&#34;,Qt :: META,Qt :: Key_Meta和   Qt :: MetaModifier对应于Control键。

因此,您应该按Command + N来触发快捷方式。

答案 1 :(得分:0)

我通过创建一个触发与按钮相同的插槽的菜单栏操作解决了这个问题。

由于快捷方式(仅在我的情况下)仅使用菜单操作,我相信这是一个不错的选择,因为我想要快捷方式的按钮触发了我的应用程序的主要插槽之一。

我做了以下事情:

  • 使用操作
  • 替换按钮的自动连接插槽
  • 将按钮的clicked()信号连接到操作triggered()信号
  • 设置操作的快捷方式