С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 60
1

Проблема с клиент-сервером на Qt

02.08.2019, 00:57. Показов 1331. Ответов 10
Метки qt (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, столкнулся с такой проблемой: написал простенькое приложение на Qt (Телефонная книга), в котором QTableView с моделью QAbstractTableModel
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
struct Contact{
    QString name;
    QString number;
    bool operator ==(const Contact &other) const
    {return name==other.name&& number==other.number;}
};
inline QDataStream &operator<<(QDataStream &stream, const Contact &contact)
{
    return stream << contact.name << contact.number;
}
 
inline QDataStream &operator>>(QDataStream &stream, Contact &contact)
{
    return stream >> contact.name >> contact.number;
}
 
class TableModel : public QAbstractTableModel
{
    Q_OBJECT
 
 
public:
    TableModel(QObject *parent = 0);
    TableModel(const QVector<Contact>& contacts,QObject *parent=0);
    int rowCount(const QModelIndex &parent)const;
    int columnCount(const QModelIndex& parent)const;
    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    Qt::ItemFlags flags(const QModelIndex &index) const;
    bool setData(const QModelIndex &index, const QVariant &value, int role);
    bool insertRows(int position, int rows, const QModelIndex &index=QModelIndex());
    bool removeRows(int position, int rows, const QModelIndex &index=QModelIndex());
    const QVector<Contact> &getContacts()const;
private:
    QVector<Contact> contacts;
};
Прописал некоторые методы (удаление/добавление/поиск контактов). Нужно прикрутить сервер, а уже написанное приложение сделать клиентом (как вариант). Суть в том, что нужно сделать так, чтобы я данная "таблица" хранилась на сервере и я мог её редактировать и скачивать. Есть какие-то идеи, как можно это сделать ?
С Qt работаю совсем недавно, а с клиент-серверными приложениями тем более.

Видел пару вариантов с SQL, но хотелось бы обойтись без него.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2019, 00:57
Ответы с готовыми решениями:

Проблема с поддержанием соединения с сервером
Здравствуйте, Уважаемые участники форума. Пишу клиент-серверное приложение. Возникает проблема при...

Клиент не соединяется с сервером
Доброго времени суток! Не соединяется Клиент с базой. Проблема скорее всего в...

непонятки с клиент-сервером
использую компоненты TCPclient &amp; TCPserver. имеются 2 компьютера с выходом в интернет. но IP Aдрес...

Клиент (Qt) не соединяется с сервером на Си
Доброго времени суток! Помогите, пожалуйста, разобраться с вопросом. Есть сервер, написанный на СИ...

10
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
02.08.2019, 15:15 2
Серелизация структур уже есть, остаётся ее на одной стороне в сокет в виде QByteArray засунуть, а с другой получить и десереализовать.
0
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 60
02.08.2019, 15:19  [ТС] 3
Я как человек, который далек от приложений вида клиент-сервер хотел бы узнать следующие: 1) Таким образом смогу ли я через клиент непосредственно менять все на сервере? 2) На сервере тоже нужно определить модель (QAbstractTableModel) с методами добавления и прочего ?
Если есть какие-нибудь примеры, ну или что-то, где про это можно почитать? Буду благодарен
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
02.08.2019, 15:38 4
Цитата Сообщение от AlexChek Посмотреть сообщение
Таким образом смогу ли я через клиент непосредственно менять все на сервере?
При желании можно все.

Цитата Сообщение от AlexChek Посмотреть сообщение
2) На сервере тоже нужно определить модель (QAbstractTableModel) с методами добавления и прочего ?
Это только от тебя зависит, можешь делать, можешь в файл записывать.
0
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 60
02.08.2019, 17:24  [ТС] 5
Просто впервые делаю что-то подобное, а на просторах интернета нашел много тем, где обсуждалась также клиент-серверная модель, но с SQL. Поэтому я и спрашиваю, что примерно нужно сделать, чтобы на сервере у меня хранилась эта телефонная книга, а в клиенте я мог ее редачить и скачивать с сервера.
Понятно, что многое зависит от меня, но ведь не все. Возможно то, что мне хотелось бы вовсе невозможно и мне придется переделывать все под SQL. А также хотелось бы узнать немного про архитектуру, что нужно по сути хранить на сервере.
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
02.08.2019, 21:24 6
AlexChek, ты не понимаешь как храняться данные.

Данные это набор байтов (текста) в файле, храниться он там может как угодно, главное его разпарсить к нужному формату. Для хранения на сервере не нужно ничего отображать, ты хранить данные в файле, и просто достаешь из него.

Таблица - это просто если ты захочешь увидеть телефонную книгу, а хранимая информация не объязательно должна быть видна.
0
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 60
02.08.2019, 22:59  [ТС] 7
Хорошо, с этим я согласен, но тогда как быть, если мне нужно через клиента поменять значения в справочнике, который у сервера.
0
489 / 382 / 74
Регистрация: 29.05.2018
Сообщений: 1,178
03.08.2019, 18:22 8
Цитата Сообщение от AlexChek Посмотреть сообщение
как быть, если мне нужно через клиента поменять значения в справочнике
Для этого у каждой записи в справочнике должно быть ещё одно поле, int id, по которому можно идентифицировать запись в книге. Тогда можно через id и соответствующие методы обращаться к каждой записи и делать с ней всё, что заблагорассудится.

Честно говоря, я уже возился с текстовой базой данных, и скажу, что на SQL (даже под простейшей SQLite) ваша задача решится в разы легче. Копайте в эту сторону. Тем более, что под базы данных SQL есть специально заточенная модель QSqlTableModel, которую при незначительной доработке можно отображать в QTableView.
0
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 60
03.08.2019, 18:45  [ТС] 9
А есть какие-нибудь примеры или какой-нибудь материал по клиент-серверным приложениям с SQL? Я встречал несколько постов на подобную тематику, но там не особо понятно было, что да как
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.08.2019, 19:11 10
Решений вопроса может быть вагон и маленькая тележка.
Как пример у меня в продакшене работает 3-х звенная архитектура: СУБД-Сервер приложений-Клиент.
Сервер приложений по запросу от клиента читает из СУБД данные, серелизует их в структуры (С++), далее эти структуры упаковываются в QByteArray и высылаются клиенту.
Клиент у себя из QByteArray десереализует в С++ структуры, с которыми потом работает.
Изменения данных идет в виде патчей, т.е отдельной структурой, которая описывает только произошедшие на клиенте изменения.
Другими словами была структура
C++ (Qt)
1
2
3
4
5
6
struct Item
{
uint id;
QString name;
QString caption;
}:
поменялось поле name, то на сервер летит патч только с id и изменениями по этому полю в виде [старое значение]/[новое значение], остальные поля в патче не участвуют.
0
489 / 382 / 74
Регистрация: 29.05.2018
Сообщений: 1,178
03.08.2019, 19:32 11
AlexChek, почитайте Шлее, у него там всё просто и понятно описано, как работать с SQLite.
0
03.08.2019, 19:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.08.2019, 19:32
Помогаю со студенческими работами здесь

Клиент периодически не пингуется с сервером
Передо мной стоит две задачи: настроить VPN сервер и создать папку общего пользования. Для этого...

Клиент не соединяется с DHCP-сервером
Установил на debian пакет isc-dhcp-server. В файле /etc/dhcp/dhcpd.conf записано: subnet...

Друзья! клиент-сервером на сокетах
в общем задание нетрудное, необходимо реализовать клиент-сервер. на сервере генерится массив случ....

Почтовый клиент 1С 8.2: Соединение закрыто сервером
при выполнении кода: Почта=Новый ИнтернетПочта; Профиль=Новый ИнтернетПочтовыйПрофиль; ...


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

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