Menu to for going to specific column

Columns are sorted alphabetically.
This commit is contained in:
eelke 2022-04-11 19:15:00 +02:00
parent a7d4a5f13d
commit c20427e10d
2 changed files with 52 additions and 7 deletions

View file

@ -36,6 +36,7 @@ CrudTab::CrudTab(IDatabaseWindow *context, QWidget *parent)
m_SortFilterProxy->setSortRole(CustomSortRole); m_SortFilterProxy->setSortRole(CustomSortRole);
ui->tableView->setModel(m_SortFilterProxy); ui->tableView->setModel(m_SortFilterProxy);
ui->tableView->setSortingEnabled(true); ui->tableView->setSortingEnabled(true);
m_SortFilterProxy->sort(0, Qt::AscendingOrder);
ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
@ -103,13 +104,52 @@ void CrudTab::on_actionRemove_rows_triggered()
void CrudTab::headerCustomContextMenu(const QPoint &pos) void CrudTab::headerCustomContextMenu(const QPoint &pos)
{ {
auto menu = new QMenu(this); if (!headerContextMenu)
buildHeaderContextMenu();
QAction *action = new QAction(QIcon(":/icons/script_go.png"), tr("Refresh"), this);
action->setShortcut(QKeySequence(Qt::Key_F5));
connect(action, &QAction::triggered, this, &CrudTab::refresh);
menu->addAction(action);
auto horizontal_header = ui->tableView->horizontalHeader(); if (headerContextMenu)
menu->popup(horizontal_header->mapToGlobal(pos)); {
auto horizontal_header = ui->tableView->horizontalHeader();
headerContextMenu->popup(horizontal_header->mapToGlobal(pos));
}
}
void CrudTab::gotoColumn(QString column)
{
for (int i = 1; i < m_crudModel->columnCount(); ++i)
{
auto name = m_crudModel->headerData(i, Qt::Horizontal).toString();
if (name == column)
{
auto index = ui->tableView->currentIndex();
index = ui->tableView->model()->index(index.row(), i);
ui->tableView->setCurrentIndex(index);
break;
}
}
}
void CrudTab::buildHeaderContextMenu()
{
delete headerContextMenu;
headerContextMenu = new QMenu(this);
auto columnMenu = headerContextMenu->addMenu("Go to column");
std::vector<QString> columnNames;
for (int i = 1; i < m_crudModel->columnCount(); ++i)
columnNames.push_back(m_crudModel->headerData(i, Qt::Horizontal).toString());
std::sort(columnNames.begin(), columnNames.end());
for (auto& columnName : columnNames)
{
auto action = new QAction(columnName, this);
columnMenu->addAction(action);
connect(action, &QAction::triggered, this,
[this, columnName] ()
{
gotoColumn(columnName);
}
);
}
} }

View file

@ -14,6 +14,7 @@ namespace Ui {
class OpenDatabase; class OpenDatabase;
class CrudModel; class CrudModel;
class QMenu;
class CrudTab : public QWidget { class CrudTab : public QWidget {
Q_OBJECT Q_OBJECT
@ -34,11 +35,15 @@ private:
CrudModel *m_crudModel = nullptr; CrudModel *m_crudModel = nullptr;
QSortFilterProxyModel *m_SortFilterProxy = nullptr; QSortFilterProxyModel *m_SortFilterProxy = nullptr;
QMenu *headerContextMenu = nullptr;
void initActions(); void initActions();
void buildHeaderContextMenu();
private slots: private slots:
void on_actionRemove_rows_triggered(); void on_actionRemove_rows_triggered();
void headerCustomContextMenu(const QPoint &pos); void headerCustomContextMenu(const QPoint &pos);
void gotoColumn(QString column);
}; };