Qt C++ Ошибка, нет соответствующей функции для вызова 'QString::QString(KeySequence)'

Я использовал Qt 4.8.4 для своего GUI-проекта, написанного на C++. Теперь я слился с Qt версии 5.7. После долгого процесса адаптации моего кода я наконец открыл свой графический интерфейс. Но когда я запускаю свой код расчета, я все равно получаю эту ошибку:

нет соответствующей функции для вызова 'QString::QString(KeySequence)'

в этих строках:

  action = popup->addAction(EnhTableWidget::tr("&Copy") + QLatin1Char('\t') + QString(QKeySequence(QKeySequence::Copy)));
  ...
  action = popup->addAction(EnhTableWidget::tr("Delete") + QLatin1Char('\t') + QString(QKeySequence(QKeySequence::Delete)));
  ...
  action = popup->addAction(EnhTableWidget::tr("Select All") + QLatin1Char('\t') + QString(QKeySequence(QKeySequence::SelectAll)));

Кажется, что использование QKeySequence неправильно. С сайта Qt я не вижу проблемы.

Кто-нибудь знает, что не так?

Благодарю вас !

Это (часть) моего кода:

 #include "EnhTableWidget.h"
 #include <QKeyEvent>
 #include <QApplication>
 #include <QClipboard>
 #include <QHeaderView>
 #include <QKeySequence>
 #include <QAction>

 EnhTableWidget::EnhTableWidget(QWidget *parent) :
  QTableWidget(parent)
 {}


 void EnhTableWidget::keyPressEvent(QKeyEvent *event)
 {
       if ( event->matches(QKeySequence::Copy) )
        copy();
       else if ( event->matches(QKeySequence::Delete) || event->key() == Qt::Key_Backspace )
        deleteSelected();
       else if ( event->matches(QKeySequence::SelectAll) )
        selectAll();
       else
        QTableWidget::keyPressEvent(event);
 }


QMenu *EnhTableWidget::createStandardContextMenu()
  {
    QMenu *popup = new QMenu(this);
    popup->setObjectName(QLatin1String("qt_edit_menu"));
    QAction *action = 0;

  #ifndef QT_NO_CLIPBOARD

    action = popup->addAction(EnhTableWidget::tr("&Copy") + QLatin1Char('\t') + QString(QKeySequence(QKeySequence::Copy)));
    action->setEnabled(!selectionModel()->selectedIndexes().isEmpty());
    connect(action, SIGNAL(triggered()), SLOT(copy()));

  #endif

    action = popup->addAction(EnhTableWidget::tr("Delete") + QLatin1Char('\t') + QString(QKeySequence(QKeySequence::Delete)));
    action->setEnabled(isEnabled() && !selectionModel()->selectedIndexes().isEmpty());
    connect(action, SIGNAL(triggered()), this, SLOT(deleteSelected()));

        if (!popup->isEmpty())
              popup->addSeparator();

    action = popup->addAction(EnhTableWidget::tr("Select All") + QLatin1Char('\t') + QString(QKeySequence(QKeySequence::SelectAll)));
    action->setEnabled(isEnabled());
    connect(action, SIGNAL(triggered()), SLOT(selectAll()));

  return popup;
 }

person user3443063    schedule 13.06.2017    source источник


Ответы (1)


QString не имеет конструктора, который принимает QKeySequence в качестве аргумента. Вы должны использовать QKeySequence::toString.

action = popup->addAction(tr("&Copy") + QLatin1Char('\t') + QKeySequence(QKeySequence::Copy).toString());
person thuga    schedule 13.06.2017
comment
Спасибо, что было!! - person user3443063; 13.06.2017