QMenu не может прочитать слот функции

Мое намерение - создать контекстное меню для копирования содержимого ячейки в буфер обмена. С помощью sender() я могу связать одну и ту же функцию с двумя разными QTableWidget. Все работает, кроме этого сообщения об ошибке:

"QObject::connect: Несовместимые аргументы отправителя/получателя QAction::triggered(bool) --> MainWindow::copyToClipboard(QTableWidget*,int,int)"

Это часть кода, которая генерирует ошибку

void MainWindow::ProvideContextMenu(const QPoint& pos) // this is a slot
{
    QTableWidget *tw = (QTableWidget *)sender();
    int row = tw->currentRow();
    int col = tw->currentColumn();
    QMenu menu;
            menu.addAction(QString("Test Item"), this,
                   SLOT(copyToClipboard(QTableWidget *, int,int)));
            menu.exec(tw->mapToGlobal(pos));
}

void MainWindow::copyToClipboard(QTableWidget *tw, int row, int col) {
    clipboard = QApplication::clipboard();
    clipboard->setText(tw->item(row, col)->text());
}

Я часами искал официальную документацию, но ничего не нашел по этому поводу. Есть решение?


person user3713179    schedule 05.06.2014    source источник


Ответы (1)


Из документации:

Механизм сигналов и слотов типобезопасен: сигнатура сигнала должна совпадать с сигнатурой принимающего слота. (На самом деле слот может иметь более короткую сигнатуру, чем сигнал, который он получает, потому что он может игнорировать дополнительные аргументы.) Поскольку сигнатуры совместимы, компилятор может помочь нам обнаружить несоответствие типов при использовании синтаксиса на основе указателя на функцию. Строковый синтаксис SIGNAL и SLOT обнаружит несоответствие типов во время выполнения.

Это виновник:

menu.addAction(QString("Test Item"), this,
               SLOT(copyToClipboard(QTableWidget *, int,int)));

У вас не может быть таких несовпадающих параметров сигнального слота. Вы можете подключать только слоты, которые не имеют параметров или одного логического значения к триггерному (логическому) сигналу. Вы должны пересмотреть свой дизайн.

person lpapp    schedule 05.06.2014