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();
}

 

posted @ 2020-02-25 22:08  偷税的月亮  阅读(168)  评论(0)    收藏  举报