Russian Qt Forum
Ноябрь 22, 2024, 04:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 8 9 [10] 11   Вниз
  Печать  
Автор Тема: Помощь для новичков  (Прочитано 127181 раз)
SUser
Гость
« Ответ #135 : Июль 26, 2018, 07:25 »

Здравствуйте!
Надеюсь кто-нибудь сможет помочь и тапками не закидаете.
Использую QT с проектом без QT на с++  Смеющийся

1) Проблема с кириллицей.
Стандартный способ в main с setlocale (LC_ALL, "russian"); или 0, "rus" не срабатывает и в консоль все равно выводятся иероглифы (вместо "Привет мир!" Выводится: "Р?С?РёР?РчС' Р?РёС?!").
Пробовал преобразование в ANSI или 1251 через not++ не помогает. Хотел на коленке быстро собрать простой код, но не тут то было. Может кто-нибудь подсказать, как решить эту проблему кроме использования транслита?

2) Добавление компилятора студии MVS.
Использовал компилятор MinGW 5.3.0 for C++. Не стал при установке QT ставить дополнительно компилятор MVS, думаю мб с ним проблема бы решилась (и появилось куча новых   Веселый).
Вопрос: можно-ли автоматически добавить его в QT? Чтобы он со своего источника скачал или где взять оффлайн версии официальные? На сайте кроме онлайновых загрузчиков самой программы найти не удалось.

Благодарю!
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #136 : Июль 26, 2018, 07:40 »

Возможно, стоит заменить кодировку файла исходников на cp1251 или dos866.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #137 : Июль 26, 2018, 10:47 »

Чтобы раз и навсегда закрыть проблему с кракозябрами используйте  в своих Qt проектах исходники в кодировке UTF-8. Если в программе используются внешние данные в другой кодировке, то иногда необходима перекодировка. Чтобы понять принцип работы кодека, мне в свое время помогло это объяснение: http://www.sql.ru/forum/867419/qt-kak-polzovatsya-qtextcodec-dlya-bulochnikov-i-chaynikov
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Gena00X
Гость
« Ответ #138 : Декабрь 22, 2018, 01:38 »

Здравствуйте.
У меня возникла такая проблема:
Я хочу считать файл с данными по 3d модели: координаты точек поверхности (порядка 500 тысяч точек) + номера точек входящих в полигон (порядка миллиона полигонов, по три точки на каждый).
Создаю объект типа myPoint объект типа myPoligon. Читаю файл с координатами точек (он нормально считывается, точки рисуются в openGL), создаю QList<myPoint> и пишу точки туда, читаю файл с номерами точек для полигонов (он тоже нормально считывается). Потом начинаю создавать полигоны, алгоритм такой:
берём первые три числа из файла с номерами точек для полигонов, ищем в массиве точки с соответствующими номерами, создаём new myPoligon(pt1, pt2, pt3) и пишем его в QList<myPoligon>
Эта система прекрасно работала с маленькими модельками (2-3 тысячи точек) но когда я взял реальный файл с указанными выше параметрами, экспортированный из другой программы, программа начала во-первых жутко тормозить (миллион полигонов создаётся чуть ли не сутки), а во вторых вылетать с жалобами на ошибку выделения памяти.
Что тут можно сделать?

Текст программы:
mainwindow.h:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include "mypoint.h"
#include "opengl.h"
#include "mypoligon.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();


 OpenGL GL;

    QString pointpath; //путь к файлу с точкам

//QList<myPoint*> MyPointList; //список точек

myPoint getpoint(QString str); //функция преобразования строки в точку.
myPoint *pt; //глобально объявленная ссылка на объект точки.
myPoligon *poligon;//глобально объявленная ссылка на объект полигона.

int NN = -1;
private slots:
    void on_pathButton_clicked();

    void on_readButton_clicked();

    void on_getPoints_clicked();

    void on_MyPointsOutput_clicked();



    void on_OpenGL_clicked();

    void on_GetTriIndexes_clicked();



    void on_newPoligon_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mypoint.h"
#include "opengl.h"
#include <opengl.h>
#include "mypoligon.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    pointpath = ui->lineEdit->text();
    GL.vertexRedy = false;
    GL.poligonRedy = false;


}

MainWindow::~MainWindow()
{
    delete ui;

}





void MainWindow::on_pathButton_clicked()
{
    //получение пути к файлу из QFileDialog
    pointpath = QFileDialog::getOpenFileName(this);
     ui->lineEdit->setText(pointpath);

     ui->textEdit->append("file path get complite");
}




void MainWindow::on_readButton_clicked()
{
    //открытие файла и чтение (работает)
    QFile file(pointpath);
    if(file.open(QIODevice::ReadOnly)){


    }
    ui->textEdit->append("file open complite");
}



void MainWindow::on_getPoints_clicked()
{int i;
    QFile file(pointpath);
    if(file.open(QIODevice::ReadOnly)){
while(!file.atEnd()){
pt = new myPoint;
QString str = file.readLine();
if(i > NN){
pt->getPoint(str);
GL.MyPointList.push_back(pt);

if(pt->color>GL.colorMax) GL.colorMax = pt->color;
i=0;}
i++;
}
ui->textEdit->append("pointList: "+QString::number(GL.MyPointList.count()));
}
}


void MainWindow::on_MyPointsOutput_clicked()
{

for (int i = 0; i< GL.MyPointList.count();++i){
   ui->textEdit->append(QString::number(GL.MyPointList[i]->returnVector3D().x()) + " " +QString::number(GL.MyPointList[i]->returnVector3D().y()) + " " +QString::number(GL.MyPointList[i]->returnVector3D().z()) + " " +QString::number((float)(GL.MyPointList[i]->returnColor())));
    }
ui->textEdit->append(QString::number(GL.colorMax));
}



void MainWindow::on_OpenGL_clicked()
{

    GL.resize(600,600);

    GL.show();
    GL.updateGL();

}

void MainWindow::on_GetTriIndexes_clicked()
{   QString str = "C:/Users/Геннадий/Desktop/Аспирантура/Программа расчёта ИК-заметности/с полигонами (триугольники) ++/";

    QString str2 = "треугольники";
    QFileDialog::Options opt;

    QFile trifile(QFileDialog::getOpenFileName(this,str2,str));
    if(trifile.open(QIODevice::ReadOnly| QIODevice::Text)){
        ui->textEdit->append("trifile open");
    }
    QList<QString> sList;
    while(!trifile.atEnd()){
        sList.push_back((trifile.readLine()));
    }

    ui->textEdit->append("sList created"+QString::number(sList.count()));

    QList<QString>::iterator ii;
    for(ii=sList.begin(); ii != sList.end(); ++ii){
        GL.vertexIndexes.push_back((*ii).section(',',0,0).toFloat());
        GL.vertexIndexes.push_back((*ii).section(',',1,1).toFloat());
        GL.vertexIndexes.push_back((*ii).section(',',2,2).toFloat());
    }
ui->textEdit->append("vertexIndexes: "+QString::number(GL.vertexIndexes.count()));
    QList<float>::iterator ff;
    int i;
    i=1;
    ui->textEdit->append("print vertexIndexes");
    for(ff=GL.vertexIndexes.begin(); ff != GL.vertexIndexes.end(); ff++){
        ui->textEdit->append(QString::number((*ff))+" "+QString::number(GL.MyPointList[(*ff)]->color));
        i++;
    }
    ui->textEdit->append("print vertexIndexes complite"+QString::number(GL.vertexIndexes.count()));
    GL.vertexRedy = true;

}

void MainWindow::on_newPoligon_clicked()
{  

    for(int i=0;i<=GL.vertexIndexes.count()-3;i = i+3){

    poligon = new myPoligon((*(GL.MyPointList[GL.vertexIndexes[i]])),(*(GL.MyPointList[GL.vertexIndexes[i+1]])),(*(GL.MyPointList[GL.vertexIndexes[i+2]])));


    GL.MyPoligonList.push_back(poligon);
    qDebug(QString::number(i).toUtf8());

    }

    ui->textEdit->append("создано "+QString::number(GL.MyPoligonList.count())+" полигонов");
    GL.poligonRedy = true;
}

mypoint.h:
Код:
#ifndef MYPOINT_H
#define MYPOINT_H

#include <QWidget>
#include <QGLWidget>
#include <QVector3D>

class myPoint : public QWidget
{

Q_OBJECT

private:




public:
    QVector3D point;
    myPoint(QWidget *parent = 0);
    myPoint(const myPoint &other);
    ~myPoint();

     GLfloat color;
     void getPoint(QString str );
     GLfloat returnColor();
     QVector3D returnVector3D();

signals:

public slots:
};

#endif // MYPOINT_H

mypoint.cpp:

#include "mypoint.h"
#include <QWidget>


myPoint::myPoint ( QWidget* parent) : QWidget(parent)
{

}

myPoint::myPoint (const myPoint &other ) : QWidget( )
{
point = other.point;
color = other.color;
}

myPoint::~myPoint()
{

}



void myPoint::getPoint(QString str)
{
    point = QVector3D(str.section(";",0,0).toFloat(),str.section(";",1,1).toFloat(),str.section(";",2,2).toFloat());
    color = (GLfloat)str.section(";",3,3).toFloat();
}

GLfloat myPoint::returnColor()
{
    return color;
}







QVector3D myPoint::returnVector3D()
{
    return point;
}
mypoligon.h:
Код:
#ifndef MYPOLIGON_H
#define MYPOLIGON_H


#include <QWidget>
#include <QGLWidget>
#include <QVector3D>
#include "mypoint.h"


class myPoligon : public QWidget
{

Q_OBJECT

private:




public:
    myPoint point1, point2, point3;
    myPoligon(QWidget *parent = 0);
    myPoligon(const myPoligon &other);
    myPoligon(myPoint pt1, myPoint pt2, myPoint pt3);
    ~myPoligon();

    float S();
    float SS; //площадь полигона

    GLfloat color;
    GLfloat getColor();

    QVector3D center;
    QVector3D normal;

signals:

public slots:
};

#endif //MYPOLIGON_H

mypoligon.cpp:

#include "mypoligon.h"
#include <QWidget>
#include "mypoint.h"


myPoligon::myPoligon( QWidget* parent) : QWidget(parent)
{

}

myPoligon::myPoligon (const myPoligon &other ) : QWidget( )
{

}

myPoligon::myPoligon(myPoint pt1, myPoint pt2 , myPoint pt3)
{
point1.point =  pt1.point;
point2.point =  pt2.point;
point3.point =  pt3.point;
color = (pt1.color + pt2.color + pt3.color)/3.0;
center = QVector3D((pt1.point.x()+pt2.point.x()+pt3.point.x())/3.0,(pt1.point.y()+pt2.point.y()+pt3.point.y())/3.0,(pt1.point.z()+pt2.point.z()+pt3.point.z())/3.0 );
normal = QVector3D::crossProduct(pt1.point-pt3.point,pt3.point-pt2.point);
}

myPoligon::~myPoligon()
{

}

float myPoligon::S()
{
SS=QVector3D().dotProduct(point1.point-point2.point,point1.point-point3.point);
return SS;
}

GLfloat myPoligon::getColor()
{
    return color;
}

opengl.h:
Код:
#ifndef OPENGL_H
#define OPENGL_H
#include <QWidget>
#include <QGLWidget>
#include <QKeyEvent>
#include "mypoint.h"
#include "mypoligon.h"

class OpenGL : public QGLWidget
{
    Q_OBJECT
protected:
   void initializeGL();
   void resizeGL(int nWidth, int nHeight);
   void paintGL();


public:
    OpenGL(QWidget *parent = 0);

void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);

QPoint pressPosition;
GLfloat xAxisRotation;
GLfloat yAxisRotation;
GLfloat zAxisRotation;
GLfloat currentHeight;
GLfloat currentWidth;
GLfloat zoom;
GLfloat translateX;
GLfloat translateY;
GLfloat colorMax;
QList<float> vertexIndexes; //номера вершин в каждом треугольнике.
bool vertexRedy;
bool poligonRedy;
QList<myPoint*> MyPointList; //список точек
QList<myPoligon*> MyPoligonList;//список полигонов

};

#endif // OPENGL_H
opengl.cpp:
Код:
#include "opengl.h"
#include <QDebug>
#include "mainwindow.h"

OpenGL::OpenGL(QWidget* parent) : QGLWidget(parent)
{

}


void OpenGL::initializeGL()
{
    glClearColor(0.5, 0.5, 0.5, 0.5);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    //glShadeModel(GL_FLAT); //отключает плавные переходы цветов
   glEnable(GL_CULL_FACE); //если включено - задние грани не видны
     zoom = 1.0;


}
void OpenGL::resizeGL(int nWidth, int nHeight)
{
    glMatrixMode(GL_PROJECTION);
    if(nWidth < nHeight){
    nWidth = nHeight;
    }
    else
    {
      nHeight = nWidth;
    }
    glLoadIdentity();

    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

    glViewport(0, 0, (GLint)nWidth, (GLint)nHeight);

    currentHeight =(GLint)nWidth;
    currentWidth =(GLint)nHeight;


}
void OpenGL::paintGL()
{
    glMatrixMode(GL_MODELVIEW); //
                                // глобальная система координат
        glLoadIdentity();       //

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPointSize(15);


    glRotatef(yAxisRotation, 0.0, 1.0, 0.0);
    glRotatef(xAxisRotation, 1.0, 0.0, 0.0);
    glRotatef(zAxisRotation, 0.0, 0.0, 1.0);
    glScalef(zoom, zoom, zoom);
    glTranslatef(translateX,translateY,0);





if(!MyPointList.empty()){
    glBegin(GL_POINTS);
    QList<myPoint*>::iterator pt;
    for(pt = MyPointList.begin(); pt!=MyPointList.end();++pt){

        glColor3f((*pt)->color/colorMax,0,0);
glVertex3f((*pt)->returnVector3D().x(),(*pt)->returnVector3D().y(),(*pt)->returnVector3D().z());
    }
   glEnd();
};




   if(poligonRedy){
       glBegin(GL_TRIANGLES);

       QList<myPoligon * >::iterator pol;
       for(pol = MyPoligonList.begin(); pol != MyPoligonList.end(); ++pol){

           glColor3f((*pol)->getColor()/colorMax,0,0);
           glVertex3f((*pol)->point1.point.x(),(*pol)->point1.point.y(),(*pol)->point1.point.z());

           glVertex3f((*pol)->point2.point.x(),(*pol)->point2.point.y(),(*pol)->point2.point.z());

           glVertex3f((*pol)->point3.point.x(),(*pol)->point3.point.y(),(*pol)->point3.point.z());
       }
        glEnd();
   };


   if(poligonRedy){


       QList<myPoligon * >::iterator pol;

       for(pol = MyPoligonList.begin(); pol != MyPoligonList.end(); ++pol){
glBegin(GL_LINE_STRIP);
glLineWidth(1);
           glColor3f(1,1,1);
           glVertex3f((*pol)->center.x(),(*pol)->center.y(),(*pol)->center.z());
           glVertex3f((*pol)->normal.x()+(*pol)->center.x(),(*pol)->normal.y()+(*pol)->center.y(),(*pol)->normal.z()+(*pol)->center.z());
glEnd();
       }

   };





}//Close PaintGL




void OpenGL::mousePressEvent(QMouseEvent *event)
{
    pressPosition = event->pos();


}

void OpenGL::mouseMoveEvent(QMouseEvent *event)
{



    xAxisRotation += (180 * ((GLfloat)event->y() - (GLfloat)pressPosition.y())) / (currentHeight);
    yAxisRotation += (180 * ((GLfloat)event->x() - (GLfloat)pressPosition.x())) / (currentWidth);

    pressPosition = event->pos();


    updateGL();
}



void OpenGL::keyPressEvent(QKeyEvent *event)
{
     if(event->key()==Qt::Key_PageUp){
        zoom += 0.01;

        updateGL();
    }
    else if(event->key()==Qt::Key_PageDown){
        zoom -= 0.01;

        updateGL();
    }
    else if(event->key()==Qt::Key_Enter){

         xAxisRotation = 0.0;
         yAxisRotation = 0.0;
        updateGL();
    }
    else if(event->key()==Qt::Key_Right){
        translateX += 0.1;
        updateGL();
    }
    else if(event->key()==Qt::Key_Left) {
        translateX -= 0.1;
        updateGL();
    }
    else if(event->key()==Qt::Key_Up) {
        translateY += 0.1;
        updateGL();
    }
    else if(event->key()==Qt::Key_Down) {
        translateY -= 0.1;
        updateGL();
    }
     else if(event->key()==Qt::Key_Q){

zAxisRotation += 0.1;
updateGL();
     }
}

сам проект: https://yadi.sk/d/a7X69v_7aoZ9nw
« Последнее редактирование: Декабрь 22, 2018, 13:52 от Gena00X » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #139 : Декабрь 22, 2018, 11:05 »

1) Вертексы и полигоны (в общем случае фейсы) - это сырые, "рудиментарные" данные число которых может быть огромно. Поэтому для их хранения нужно использовать контейнеры с минимальными накладными расходами, такие как QVector или std::vector (а не QList). Только это сократит расход памяти уже вдвое.

2) По тем же причинам делать Polygon наследником жирного QObject - грубая ошибка.

3) Переписывать вертексы в полигон - плохо не только из-за перерасхода памяти в неск раз, но и по многим др причинам (подробности опускаем). Полигон хранит индексы вертексов, пусть это делает его методы чуть менее удобными - не беда.

4) Пользуйтесь тегом для обрамления кода, а если код достаточно велик (как в данном случае), то хорошим тоном считается выложить минимальный компилируемый проект в zip'e. A выцарапывать с форума копи/пастой никто не захочет.
Записан
Gena00X
Гость
« Ответ #140 : Декабрь 22, 2018, 13:57 »

Спасибо большое!
Кстати, не подскажете, на счёт опущенных вами других причин что можно почитать?
п.с.
Теги поставил, проект добавил.
« Последнее редактирование: Декабрь 22, 2018, 16:13 от Gena00X » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #141 : Декабрь 22, 2018, 18:31 »

Кстати, не подскажете, на счёт опущенных вами других причин что можно почитать?
Вот навскидку еще парочка

1) Начинающий обычно находится в счастливом неведении полагая что "вертекс" - это просто "точка" (3d координата) - и все. Это не так. Вертекс практически всегда имеет нормаль (не путать с нормалью к полигону), часто UV (без которых модель неполноценна), а нередко и цвет и/или матрицу(ы) бампа. И это только стандартные данные, а в задаче могут быть (и часто есть) еще и кастомные. Нормальная поверхность имеет "валентность" 5-6 (т.е. один вертекс используется 5-6 полигонами). Поэтому дублирование тонны данных в полигоны становится просто неприемлемо/невыносимо.

2) Многие операции (напр деформации) меняют позицию или другие данные вертексов оставляя "топологию" неизменной. При хранении вертексов в отдельном контейнере проблем нет - просто обсчитываем каждый эл-т контейнера. А вот если храним в полигонах..

Справедливости ради отметим что хранение данных в полигонах все-таки есть (per-face data), пример - популярный obj файл. Но и в этом случае хранятся индексы (а не сами значения).

Короче: полигон хранит индексы, нарушать эту традицию - обычно себе дороже
Записан
Gena00X
Гость
« Ответ #142 : Декабрь 23, 2018, 14:13 »

Цитировать
Вот навскидку еще парочка
Спасибо! Но вообще я имею в виду не конкретно этот вопрос, а в целом на счёт работы с 3d в C++ что имеет смысл почитать? Чтоб не плодить в дальнейшем подобные ошибки
« Последнее редактирование: Декабрь 23, 2018, 14:14 от Gena00X » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #143 : Декабрь 23, 2018, 17:03 »

Но вообще я имею в виду не конкретно этот вопрос, а в целом на счёт работы с 3d в C++ что имеет смысл почитать? Чтоб не плодить в дальнейшем подобные ошибки
Это просто недостаток программистского опыта, не вижу здесь какой-то связи с 3d.

Что читать.. Ну достаточно создать тему с подобным вопросом - и недостатка в советах "открыть книгу" не будет  Улыбающийся Правда и эффективность этого "почитать" очень невелика, поэтому я бы посоветовал исходить из решаемых задач. Напр сейчас визуализируете нормали к полигонам, а возможно понадобятся нормали к вертексам. Если так то ими и займитесь, толку будет больше чем что-то читать "вообще".
Записан
Zusykss
Гость
« Ответ #144 : Декабрь 13, 2019, 19:37 »

Что-то в последнее время развелось много новичков и однотипных тем. Часть из них уже перекочевала в мои джабберные контакты.  Улыбающийся В джаббере есть конференция по Qt, но она не для новичков. В общем, я создал конференцию в джаббере: qt-for-beginner@conference.jabber.ru, в которую приглашаю новичков и терпимых к новичкам людей. Сам там буду постоянно торчать и оказывать посильную помощь. Надеюсь, тема не бредовая и кому-нибудь понравится и пригодится.

ЗЫ: А вот несколько ссылок по jabber для тех, кто про него ничего не знает:
Страничка Вики
    http://ru.wikipedia.org/wiki/Jabber
Сайт
    http://www.jabber.ru/

Вот так можно войти в конференцию в QIP'е
А вот так в QIP 2010


Не получилось вас найти пытался через приложение Pidgin
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #145 : Декабрь 13, 2019, 20:19 »

Jabber уже давно умер. По крайней мере, для меня.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #146 : Май 06, 2020, 12:28 »

Предлагаю создать сервер в дискорде=)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #147 : Май 06, 2020, 19:04 »

почему не слак? больше подходит для написания кода
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #148 : Май 06, 2020, 19:47 »

Слак денег стоит.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #149 : Май 06, 2020, 19:52 »

Создал сервер в Дискорде. Может, реально кому-то будет полезно.
https://discord.gg/AWVVFw9
« Последнее редактирование: Май 12, 2020, 08:43 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: 1 ... 8 9 [10] 11   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 23.