Авварон
Такой вопрос)
Можно ли допустим взять ту же вьюху(QTableView) и выводить в ней столько записей сколько помещается на отображение при этом использовать свой вертикальный скролл бар
C++ (Qt)
class TableView : public QTableView
{
...
public:
int numberRows;
}
bool TableView::viewportEvent(QEvent *event)
{
if(event->type == QEvent::Paint){
int hrow = rowHeight(0);
if(hrow > 0){
numberRows = viewport()->size().height() / hrow
}
else{
numberRows = 1;
}
return QTableView::viewportEvent(event);
}
Делаем нужную выборку из вектора
C++ (Qt)
std::vector<std::pair<Key, Type>> Core::GetTableData(int pos, nrows)
{
std::vector<std::pair<Key, Type>> v = threadsafe_unordered_map.get_vecctor();
std::vector<std::pair<Key, Type>> res;
for(int i = 0; i < nrows; ++i)
{
std::pair<Key, Type> p = v[pos + i];
res.push_back(p);
}
return res;
}
C++ (Qt)
class MainWindow : public QMainWindow
{
private:
std::vector<std::pair<Key, Type>> v;
}
MainWindow::MainWindow(...)
{
...
model = new TableModel(&v, this)
}
void MainWindow::UpDateTable()
{
v = core.GetTableData(ui->verticalScroll->sliderPosition(), ui->tableView->numberRows);
model->upDate(); //beginResetModel() endResetModel()
}
Или кривовато???
У меня используется мьюченный std::unordered_map ну чтобы threadsafe был и данные добавляются при этом формируется ключ, чтобы
если уже такие данные есть до мы просто их обновляем.
Поэтому при формирование вектора могут добавиться как в середину так и в начало и как использовать insert в таком случае я не понимаю?
Нужно как-то предварительно рассчитывать куда insert делать.