• Как сделать удаленный доступ для к программе под windows для нескольких пользователей (аля RDP)?

    @rPman
    На текущий момент, если пользователей - до десятка (больше сложнее чисто технически) проблему одновременной работы нескольких пользователей за одним компютером можно решить аппаратным способом. А точнее с помощью ibik aster.

    При этом, работать все будет нативно, без прослоек, т.е. можно запускать 3d приложения/игры, никаких лагов и задержек.

    Одно время майкрософту очень не нравилось это приложение, хз как они там это урегулировали, с точки зрения лицензии, как это описывают лицензионные специалисты майкрософт - любое использование windows workstation несколькими людьми - преступление, даже если два человека за одной клавиатурой играют в hotseat игру. Если я верно понял, дальше болтологии запрет не ушел (скорее всего через суд этот маразм не будет урегулирован в пользу майкрософта).

    Необходимо к одному компьютеру подключить нужное количество мониторов (видеокарты обычно имеют 3-4 порта, можно в одну машину вставить любые самые дешевые gpu, хоть через рейзеры), клавиатур и мышек (usb удленители, в т.ч. есть по ethernet кабелю до 200 метров). Приложение ibik aster (примерно в 100 раз дешевле лицензий на windows server) и настраиваешь рабочие места - каждому свой монитор, клавиатуру, мышку, звуковуха (если использовать телевизор с динамиками, то по hdmi будет идти звук) и даже свой ip адрес (там как то не совсем корректно реализовано но в каких то случаях работает).

    На сегодняшний день это самый лучший способ (с точки зрения денег) организации рабочих мест 'одно железо - несколько пользователей', без особых проблем с совместимостью (очень небольшое количество приложений могут специально запрещать себя запускать одновременно, но я помню, даже игры у меня шли под разными пользовательскими профилями, если их устанавливать в разные каталоги на диске, тупо дублируя). А для дома так вообще максимальная рекомендация - в подавляющем большинстве случаев активно ковыряющемуся отдельный компьютер, а остальным - второй, всеравно 99% времени это браузер и пара игрушек, друг другу мешать не будут.

    p.s. Само собой, то же самое можно сделать на linux бесплатно. multiseat штатными утилитами если 1 gpu на одно рабочее место, если же на одну видеокарту нужно несколько рабочих мест, тогда сложнее, с помощью xephyr (это xserver в окне) и чуть чуть скриптов.

    upd. кстати, это можно совместить с vnc/rustdesk/... настраиваешь фейковые мониторы (заглушки стоят 100-200р), без клавиатуры и мышки, каждое рабочее место настраиваешь свой vnc, и к этому монстру можно подключаться удаленно по сети. Тонкие клиенты можно сделать хоть из смартфона/смарт_тв
    Ответ написан
    1 комментарий
  • Как сохранять предыдущие изображения в qt?

    Вам надо рисовать на QGraphicsScene а не на виджете. Иначе постоянно будут возникать проблемы.
    Ответ написан
    Комментировать
  • QAbstractTableModel или QSqlTableModel?

    @timao Автор вопроса
    Если кто-то наткнётся:
    В итоге отнаследовался от QAbstractTableModel и сделал практически копию QSqlTableModel, но с одним нюансом: данные загружаются пакетами по 25 строк. К большому удивлению, таблица не подвисает при интенсивной прокрутке. Почти не заметно глазу. Ключевые куски кода:
    QVariant DynamicSqlTableModel::data(const QModelIndex &index, int role) const {
    	if (role == Qt::DisplayRole) {
    		initializePackageByRow(index.row());
    		return data_list[index.row()].value(index.column());
    	}
    	return QVariant();
    }
    void DynamicSqlTableModel::initializePackageByRow(int row) const {
    	for (int i = data_list.size(); i <= row; i+= package_size) {
    		QString package_query = setLimit(query, QString("%1, %2").arg(i).arg(package_size)); //моя строковая ф-я
    
    		QSqlQuery q = QSqlQuery();
    		q.setForwardOnly(true);
    		if (!q.exec(package_query))  {
    			emit error(logger(q, LOG));
    			return;
    		}
    		while(q.next())
    			data_list.push_back(q.record());
    	}
    }
    Ответ написан
    Комментировать