我想在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和选项吗?
答案 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)));