2017-06-13 4 views
1

J'ai utilisé Qt 4.8.4 pour mon projet graphique écrit en C++. Maintenant, j'ai fusionné à Qt Version 5.7. Après un long processus d'adaptation de mon code, j'ai finalement ouvert mon interface graphique. Mais quand je lance mon calcul code je reçois toujours cette erreur:Qt C++ Erreur aucune fonction correspondante pour l'appel à 'QString :: QString (KeySequence)'

pas de fonction concordante pour appel à 'QString :: QString (keySequence)'

dans ces lignes:

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))); 

Il semble que l'utilisation de QKeySequence est incorrecte. Du site Qt je ne peux pas voir le problème.

Est-ce que quelqu'un sait ce qui ne va pas?

Merci!

Ceci est (en partie) mon code:

#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; 
} 

Répondre

2

QString n'a pas un constructeur qui prend un QKeySequence comme argument. Vous devez utiliser QKeySequence::toString.

action = popup->addAction(tr("&Copy") + QLatin1Char('\t') + QKeySequence(QKeySequence::Copy).toString()); 
+0

Merci cela wasit !! – user3443063