我遇到了一个问题,但不知道如何解决。
问题是我希望将要使用的QTableView对象发送给下一个函数。这样,我不需要为我拥有的所有表复制该函数。我可以做一个通用函数并重用它。但是要做到这一点,我需要发送QTableView以便添加我想添加的行...请查看我的代码的外观。代码就是我想要的代码。

void InputWindow::on_pushButton_ViewMilestone_clicked()
{

    QTableView *viewMilestone = new QTableView;
    viewMilestone->setModel(sourceMilestonesModel);
    viewMilestone->setContextMenuPolicy(Qt::CustomContextMenu);
    viewMilestone->resizeColumnsToContents();
    viewMilestone->setMinimumWidth(getVerticalSizeOfQTableView(viewMilestone));
    viewMilestone->show();

    connect(viewMilestone, SIGNAL(customContextMenuRequested(const QPoint&)),
            this, SLOT(showMenu(const QPoint&)));

}

void InputWindow::showMenu(const QPoint &pos, QTableView *tableView)
{
    QAction *insertRowAction = new QAction(this);
    insertRowAction->setText("Insert new row");

    connect(insertRowAction, SIGNAL(triggered()),
            this, SLOT(addNewRow()));

    QMenu *rightClickMenu = new QMenu(this);
    rightClickMenu->addAction(insertRowAction);
    rightClickMenu->popup(tableView->viewport()->mapToGlobal(pos));

}

void InputWindow::addNewRow(QTableView *qTblView)
{
    QAbstractItemModel *tableModel = qTblView->model();
    int rows = tableModel->rowCount();
    tableModel->insertRow(rows);
}

最佳答案

听起来QSignalMapper在这里可能会有所帮助。它旨在将多个QObject链接到单个插槽,并提供有关原始源的上下文。通常,它比MarioBlueSkies sender()机制更可靠,因为您可以更明确地控制针对Mapper注册的内容。

像这样

QSignalMapper *mapper = new QSignalMapper(this);
connect(mapper, SIGNAL(mapped(const QObject&)),
        this, SLOT(clicked(const QObject&)));

void InputWindow::on_pushButton_ViewMilestone_clicked()
{

    QTableView *viewMilestone = new QTableView;
    viewMilestone->setModel(sourceMilestonesModel);
    viewMilestone->setContextMenuPolicy(Qt::CustomContextMenu);
    viewMilestone->resizeColumnsToContents();
    viewMilestone->setMinimumWidth(getVerticalSizeOfQTableView(viewMilestone));
    viewMilestone->show();
    connect(viewMilestone, SIGNAL(customContextMenuRequested(const QPoint&)),                 signalMapper, SLOT(map()));
    signalMapper->setMapping(viewMilestone, viewMilestone);
}

关于c++ - customContextMenuRequested(const QPoint&)要具有customContextMenuRequested(const QPoint&,QTableView),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23673415/

10-11 00:22