为行或列添加Rightclick并在QT C ++中添加复制选项

时间:2017-01-25 07:03:01

标签: c++ qt

我想在QT c ++中添加righclick和右键单击选项到剪贴板选项?我们怎么做呢?

我现有的代码是

 void OTPWindow::initLogTable()
 {

      QList<OtpLog> logs;
      int ret = otpRepo.fetchOtpLogs(logs);
      if( ret != errorCodes::SUCCESS )
       {
        QMessageBox msgBox(QMessageBox::Critical, QString("OTP"),
                           QString("OTPLogs could not be fetched"),QMessageBox::Ok, this);
        msgBox.exec();
        QLOG_ERROR() << "fetchLogs error " << ret;
        return;
     }

     QStandardItemModel *model = new QStandardItemModel(0,5,this); //5 columns
     model->setHorizontalHeaderItem(0, new QStandardItem(QString("Date")));
     model->setHorizontalHeaderItem(1, new QStandardItem(QString("Customer")));
     model->setHorizontalHeaderItem(2, new QStandardItem(QString("Server")));
     model->setHorizontalHeaderItem(3, new QStandardItem(QString("Author")));
     model->setHorizontalHeaderItem(4, new QStandardItem(QString("Description")));

     for(QList<OtpLog>::Iterator lIt = logs.begin(); lIt != logs.end(); lIt++)
    {
        OtpLog& log = *lIt;
        QList<QStandardItem*> row;
        row.push_back(new QStandardItem(log.when.toString("dd MMM yyyy, hh:mm")));
        row.push_back(new QStandardItem(QString(log.customer)));
        row.push_back(new QStandardItem(QString(log.server)));
        row.push_back(new QStandardItem(QString(log.author)));
        row.push_back(new QStandardItem(QString(log.reason)));

        model->appendRow(row);
     }

    // set the data model
    ui->tblLog->setModel(model);

   // set the column widths
   int tw = ui->tblLog->width() - 5;
   int w = tw / 6;

   for(int i=0; i<4;i++)
   {
       ui->tblLog->setColumnWidth(i,w);
       tw -= w;
   }
   ui->tblLog->setColumnWidth(4,tw);

 }

任何人都可以帮助如何在右键单击中添加righclick和选项吗?

1 个答案:

答案 0 :(得分:2)

您可以通过将setContextMenuPolicy设置为Qt :: CustomContextMenu并将窗口小部件连接到自定义插槽来添加自定义上下文菜单。

步骤1:设置上下文菜单策略

tblLog->setContextMenuPolicy(Qt::CustomContextMenu);

第2步:上下文菜单的插槽功能

public slots:
void customMenuRequested(QPoint pos);

和函数定义

void MyWidget::customMenuRequested(QPoint pos){
    QModelIndex index=table->indexAt(pos);
    QMenu *menu=new QMenu(this);
    QAction *action1 = new QAction("Action 1", menu);
    menu->addAction(action1);
    menu->popup(tblLog->viewport()->mapToGlobal(
    QObject::connect(action1, SIGNAL(triggered(bool)), this, SLOT(MenuAction1(bool)));
    }

步骤3:将来自tbllog的customContextMenuRequested连接到您的插槽功能

QObject::connect(tbllog, SIGNAL(customContextMenuRequested(QPoint)),
    SLOT(customMenuRequested(QPoint)));