Menu to for going to specific column
Columns are sorted alphabetically.
This commit is contained in:
parent
a7d4a5f13d
commit
c20427e10d
2 changed files with 52 additions and 7 deletions
|
|
@ -36,6 +36,7 @@ CrudTab::CrudTab(IDatabaseWindow *context, QWidget *parent)
|
|||
m_SortFilterProxy->setSortRole(CustomSortRole);
|
||||
ui->tableView->setModel(m_SortFilterProxy);
|
||||
ui->tableView->setSortingEnabled(true);
|
||||
m_SortFilterProxy->sort(0, Qt::AscendingOrder);
|
||||
|
||||
ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
|
@ -103,13 +104,52 @@ void CrudTab::on_actionRemove_rows_triggered()
|
|||
|
||||
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();
|
||||
menu->popup(horizontal_header->mapToGlobal(pos));
|
||||
if (headerContextMenu)
|
||||
{
|
||||
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);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ namespace Ui {
|
|||
|
||||
class OpenDatabase;
|
||||
class CrudModel;
|
||||
class QMenu;
|
||||
|
||||
class CrudTab : public QWidget {
|
||||
Q_OBJECT
|
||||
|
|
@ -34,11 +35,15 @@ private:
|
|||
CrudModel *m_crudModel = nullptr;
|
||||
QSortFilterProxyModel *m_SortFilterProxy = nullptr;
|
||||
|
||||
QMenu *headerContextMenu = nullptr;
|
||||
|
||||
void initActions();
|
||||
void buildHeaderContextMenu();
|
||||
|
||||
private slots:
|
||||
void on_actionRemove_rows_triggered();
|
||||
void headerCustomContextMenu(const QPoint &pos);
|
||||
void gotoColumn(QString column);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue