У меня есть QTableView * tableView. Когда пользователь выбирает файлы / папки в tableView и щелкает правой кнопкой мыши -> и выбирает «Распечатать эти элементы», я хочу, чтобы моя программа печатала эти имена в текстовый файл или присваивала строку. Как я могу это сделать? Спасибо.
frmainwindow.h:
private slots:
void showContextMenuRequested(QPoint pos);
frmainwindow.cpp:
#include "frmainwindow.h"#include "ui_frmainwindow.h"
FrMainWindow::FrMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::FrMainWindow)
{
ui->setupUi(this);
model1->setRootPath("c:\\");
ui->tableView->setModel(model1);
connect(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this,
SLOT (showContextMenuRequested(QPoint)));
}
FrMainWindow::~FrMainWindow()
{
delete ui;
}
void FrMainWindow::showContextMenuRequested(QPoint pos)
{
QMenu *contextMenu = new QMenu(this);
contextMenu->addAction(new QAction("Print these items", this));
contextMenu->popup(ui->tableView->viewport()->mapToGlobal(pos));
}
Прежде всего, подключите ваше действие к слоту обработки:
QAction* action = new QAction("Print these items", this);
connect(action, SIGNAL(triggered(), this, SLOT(printItems())));
Затем вы можете получить доступ к выбранным индексам tableView->selectionModel()->selectedIndexes()
и с помощью этих индексов получить доступ к данным model1->data(index)
:
void printItems()
{
QFile file(QLatin1String("file.txt"));
file.open(QIODevice::WriteOnly);
QModelIndexList indexes = ui->tableView->selectionModel()->selectedIndexes();
foreach (QModelIndex index, indexes)
{
file.write(model1->data(index).toString().toLatin1());
}
}