2017-06-13 85 views
1

我使用Qt 4.8.4为我的GUI-C++编写的项目。现在我合并到Qt版本5.7。经过一段适应我的代码的漫长过程,我终于打开了我的GUI。但是,当我跑我的计算代码我仍然得到这个错误:Qt C++错误没有匹配函数调用'QString :: QString(KeySequence)'

为调用 '的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; 
} 

回答

2

QString没有一个构造函数一个QKeySequence作为参数。你必须使用QKeySequence::toString

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

谢谢你! – user3443063