Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
1

Костыль со скрытием колонки

24.10.2020, 16:35. Показов 578. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, форум. Кратко - есть таблица и драг дроп строк, но работает всё корректно только тогда, когда НЕ скрыта первая колонка, а она у нас инфой, которую нельзя показать клиенту.
Как выкрутиться так, чтобы Qt думал, что она скрыта, но чтобы она не была отображена?
Не работает всё нормально, скорее всего, из-за того, что модель QSqlTableModel использует субд sqlite, которая не может в нумерацию строк. Другую бд использовать нельзя.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2020, 16:35
Ответы с готовыми решениями:

Не могу разобраться со скрытием.
Я пишу прогу на 4 формах. Что и куда мне нужно прописать, чтоб она не была видна в панели задач и в...

Скрытием полей регистрации
Добрый день! Из формы "обратного звонка" необходимо убрать "ИМЯ" и поле для него и аналогично для...

Аякс поиск с скрытием блоков
есть конструкция: <input type="text" > <div class="accordion"> <section...

Управление выводом и скрытием окна с помощью кнопок
Вот то, что нужно сделать и желательно, чтобы было понятно самому: Есть 4 кнопки с разными...

2
1544 / 721 / 313
Регистрация: 02.05.2020
Сообщений: 1,604
26.10.2020, 10:05 2
Если тут продолжение этой ветки, то скрытие перврй колонки ничего не меняет вроде как:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <QApplication>
#include <QWidget>
#include <QTableView>
#include <QSqlTableModel>
#include <QMimeData>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSortFilterProxyModel>
 
class Model: public QSqlTableModel
{
public:
  Model(): QSqlTableModel(nullptr)
  {}
  Qt::ItemFlags flags(const QModelIndex& index) const
  {
    return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | QSqlTableModel::flags(index);
  }
  Qt::DropActions supportedDropActions() const
  {
    return Qt::CopyAction | Qt::MoveAction;
  }
};
 
class ProxyModel: public QSortFilterProxyModel
{
  QList<int> order;
public:
  ProxyModel(): QSortFilterProxyModel(nullptr)
  {
    int i;
    Model* model = new Model();
    model->setTable("table1");
    model->select();
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    for (i = 0; i < model->rowCount(); ++i)
      order.append(i);
    setSourceModel(model);
  }
  bool lessThan(const QModelIndex &left, const QModelIndex &right) const
  {
    return order.indexOf(left.row(), 0) > order.indexOf(right.row(), 0);
  }
  QMimeData* mimeData(const QModelIndexList &indexes) const
  {
    QMimeData *mimeData = new QMimeData();
    QByteArray encodedData;
    QDataStream stream(&encodedData, QIODevice::WriteOnly);
    stream << indexes[0].row();
    mimeData->setData("application/x-qabstractitemmodeldatalist", encodedData);
    return mimeData;
  }
  bool canDropMimeData(const QMimeData *data,
    Qt::DropAction action, int row, int column, const QModelIndex &parent) const
  {
    Q_UNUSED(action)
    Q_UNUSED(row)
    Q_UNUSED(column)
    Q_UNUSED(parent)
    if (!data->hasFormat("application/x-qabstractitemmodeldatalist"))
        return false;
    return true;
  }
  bool dropMimeData(const QMimeData *data,
      Qt::DropAction action, int row, int column, const QModelIndex &parent)
  {
    if (!canDropMimeData(data, action, row, column, parent))
        return false;
    if (action == Qt::IgnoreAction)
        return true;
 
    int r;
    int dropRow;
    if (row != -1)
        dropRow = row;
    else if (parent.isValid())
        dropRow = parent.row();
    else
        dropRow = rowCount(QModelIndex()); 
    QByteArray encodedData = data->data("application/x-qabstractitemmodeldatalist");
    QDataStream stream(&encodedData, QIODevice::ReadOnly);
    stream >> r;
 
 
    if (dropRow > r)
        --dropRow;
 
    order.move(r, dropRow);
    sort(0, Qt::DescendingOrder);
    static_cast<Model*>(sourceModel())->select();
 
    return true;
  }
};
 
 
class Window: public QTableView
{
public:
  Window() : QTableView(nullptr)
  {
    resize(500, 500);
 
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    db.open();
    QSqlQuery query(db);
    query.exec("CREATE TABLE table1 (id INT, name TEXT);");
    query.exec("INSERT INTO table1 (id, name) VALUES (0, 'a');");
    query.exec("INSERT INTO table1 (id, name) VALUES (1, 'b');");
    query.exec("INSERT INTO table1 (id, name) VALUES (2, 'c');");
    query.exec("INSERT INTO table1 (id, name) VALUES (3, 'd');");
    query.exec("INSERT INTO table1 (id, name) VALUES (4, 'e');");
 
    ProxyModel* model = new ProxyModel();
    setModel(model);
    setSortingEnabled(true);
 
    setDragDropMode(QAbstractItemView::DragDropMode::InternalMove);
    setDragEnabled(true);
    setAcceptDrops(true);
    setDropIndicatorShown(true);
    viewport()->setAcceptDrops(true);
    setDefaultDropAction(Qt::MoveAction);
    setDragDropOverwriteMode(false);
 
    setColumnHidden(0, true);
  }
};
 
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  Window window;
  window.show();
  return app.exec();
}
0
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
26.10.2020, 10:52  [ТС] 3
Цитата Сообщение от kapbepucm Посмотреть сообщение
Если тут продолжение этой ветки, то скрытие перврй колонки ничего не меняет вроде как:
да, этой задаче уже месяца 3-4, и этот висяк низко-приоритетный заставляет меня тратить личное время в выходные, когда есть желание вернуться к ней. Я понимаю, что где-то в коде косяк, но перепроверено уже всё лярд раз за это время, хз почему так. Поэтому, хочу просто закостылить пока и пометить ToDo.
Как будет время, попробую переписать часть того кода с базой и кинуть сюда, может что-то и найдется.
0
26.10.2020, 10:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2020, 10:52
Помогаю со студенческими работами здесь

реализация сетки координат со скрытием/показом по нажатию хоткея
Задача: реализовать построение координатной сетки, в зависимости от системы координат и её...

костыль для IE...
Делаю на сайте менюшку с выезжающей панелью. Сбоку видна вкладка, при наведении на которую...

Жуткий костыль по питанию
В общем принесли ноутбук (lenovo z510), диагноз - не включается. Не было никакой реакции, при...

Необходимо протестировать костыль
#include &lt;iostream&gt; #include &lt;type_traits&gt; template &lt; typename ReturnType , typename ......

Не могу найти костыль
program treugolnik; var a,b,c:Integer; cos_ab,cos_bc,cos_ac,sin_ab,sin_bc,sin_ac,ab,bc,ac:real;...

Убрать костыль typedef
#include &lt;iostream&gt; using std::cout; #include &lt;cstring&gt; using std::strlen; template...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru