1.求子集,2.动态创建action
功能待完善
#ifndef MYMAINWINDOW_H #define MYMAINWINDOW_H #include <QMainWindow> #include <QTableView> #include <QStandardItemModel> #include <QItemSelectionModel> #include <QMenu> #define FixedColumnCount 8 class MyMainWindow : public QMainWindow { Q_OBJECT private: QTableView *_tableView; QStandardItemModel *_standardItemModel; QItemSelectionModel *_itemSelectionModel; QMenu *_menu; public: MyMainWindow(QWidget *parent = nullptr); ~MyMainWindow(); bool eventFilter(QObject* obj, QEvent *event); void createActions(const QStringList &textList); void subset(); public slots: void setTextSlot(); }; #endif // MYMAINWINDOW_H
#include "mymainwindow.h" #include <QEvent> MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent) { // 界面 _tableView = new QTableView(); setCentralWidget(_tableView); resize(800, 600); // model/view _standardItemModel = new QStandardItemModel(6, FixedColumnCount, this); _itemSelectionModel = new QItemSelectionModel(_standardItemModel); _tableView->setModel(_standardItemModel); _tableView->setSelectionModel(_itemSelectionModel); _tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); _tableView->setSelectionBehavior(QAbstractItemView::SelectItems); _tableView->installEventFilter(this); _menu = new QMenu(this); } MyMainWindow::~MyMainWindow() { } bool MyMainWindow::eventFilter(QObject *obj, QEvent *event) { if(obj == _tableView && event->type() == QEvent::ContextMenu) { if(_tableView->currentIndex().isValid()==true) { _menu->exec(cursor().pos()); } } return QWidget::eventFilter(obj, event); } // 在tableview上动态创建actions void MyMainWindow::createActions(const QStringList &textList) { for(int i = 0; i < textList.size(); i++) { QString text = textList.at(i); _menu->addAction(text, this, SLOT(setTextSlot())); } } void MyMainWindow::setTextSlot() { // 获取action QAction *action = static_cast<QAction *>(sender()); QString text = action->text(); // 获取选中item,通过以下方式,或者通过QAbstractItemview的selectedIndexes方法 QModelIndexList indexList = _itemSelectionModel->selectedIndexes(); // 设置model for(int i = 0; i < indexList.size(); i++) { QModelIndex index = indexList.at(i); _standardItemModel->setData(index, text); } } // 求多个字符串序列的子集 void MyMainWindow::subset() { }
#include "mymainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MyMainWindow w; w.show(); return a.exec(); }

浙公网安备 33010602011771号