Ответы пользователя по тегу Qt
  • Как сделать, чтобы дочерняя форма помнила свое состояние при повторном открытие?

    Gremlin92
    @Gremlin92
    Целеустремленный
    Надо сохранять в файл и при открытии записывать из него данные
    Ответ написан
  • Преобразовать из кодировки 866 в 1251 или utf8?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    Так заработало
    std::string dnp2 = QTextCodec::codecForName("IBM-866")->fromUnicode(buf).data();
    Ответ написан
    Комментировать
  • Как открыть dbf Qt?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    odbcad32.exe в ней настроил драйвер и заработало
    Ответ написан
    Комментировать
  • Не пишет по русски в консоли?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    Так решил, но дбф кода не найти
    #include <QtSql/qsqldatabase.h>
    #include <QtSql/qsqlerror.h>
    #include <QtSql/qsqlquery.h>
    
    #include <iostream>
    #pragma comment(lib,"Qt6Sqld.lib")
    
    ...
        QSqlDatabase dbase = QSqlDatabase::addDatabase("QODBC");
        dbase.setDatabaseName("Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;");
        if (!dbase.open()) {
            setlocale(LC_ALL, "ru_RU.UTF-8");
            std::cout<< "Ошибка SQL>" << dbase.lastError().text().toStdString();
            return;
        }
        QSqlQuery query(dbase);
        query.exec("CREATE TABLE D:\\TABLE(field integer, field2 integer)");
    ...

    65035087a5d4c527644723.png
    Ответ написан
    Комментировать
  • Как создать событие срабатывающее на выделение ячейки, точнее возвращающая номер строки этой ячейки?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    С помощью людей в интернете получилось так
    QObject::connect(&tableworkers, &QTableWidget::cellClicked, [this](int row, int column) {
           std::cout<<"row="<<row<<" column="<<column<<std::endl;
                });
    Ответ написан
    Комментировать
  • Можно ли подружить glubuild2dmipmaps и qt?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    Короче как я понял надо переписать на qt загрузку изображений из LoadWelcome() через qimage и ShowWelcome() тоже придется переписать на qtшный bind() такого вида
    QOpenGLTexture* texture;
        QImage image1;
    void MyWidget::initializeGL()
    {
    	//QOpenGLContext* ctx = new QOpenGLContext();
        QOpenGLFunctions* f = QOpenGLContext::currentContext()->functions();
        f->glClearColor(0,0,0,0); // заполняем экран белым цветом
        glEnable(GL_DEPTH_TEST); // задаем глубину проверки пикселей
        glShadeModel(GL_FLAT); // убираем режим сглаживания цветов
        glEnable(GL_CULL_FACE); // говорим, что будем строить только внешние поверхности
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // фигуры будут закрашены с обеих сторон
    	gluLookAt(0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
    	image1.load("welcome.png"); // загружаем изображение в переменную image1
    	// конвертируем изображение в формат для работы с OpenGL:
    	texture = new QOpenGLTexture(image1.mirrored());
    	texture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
    	texture->setMagnificationFilter(QOpenGLTexture::Linear);
    }
    void MyWidget::Show()
    {
    	texture->bind();
    	//glColor4f(1,0,0,0); // задаем цвет
    	glBegin(GL_QUADS); // говорим, что рисовать будем прямоугольник
    	// задаем вершины многоугольника
    	glTexCoord2f(1, 1);
    	glVertex2f(0.5, 0.5);
    	glTexCoord2f(0, 1);
    	glVertex2f(-0.5, 0.5);
    	glTexCoord2f(0, 0);
    	glVertex2f(-0.5, -0.5);
    	glTexCoord2f(1, 0);
    	glVertex2f(0.5, -0.5);
    	glEnd();
    }
    Ответ написан
    Комментировать
  • Почему не отправляются сообщения QTcpSocket Qt 5.12.12?

    Gremlin92
    @Gremlin92
    Целеустремленный
    У вас массив сокетов, а где перебор их в цикле на стороне сервера? Именно поэтому активен только последний клиент
    Ответ написан
    Комментировать
  • Не получается запустить код?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    3акомментировал в хидере в классе QOBJECT и диструктор, добавил реали3ацию конструктора в MainWindow.cpp:
    MainWindow::MainWindow(QWidget* parent)
        : QMainWindow(parent)
    {
        setWindowTitle(tr("Window"));
        setGeometry(0, 0, 1000, 700);
    }

    и в основном main.cpp добавил
    #include <iostream>
    #include <QtWidgets/QApplication>
    #include "MainWindow.h"
    
    #pragma comment(lib,"Qt5Widgets.lib")
    
    int main(int argc,char*argv[])
    {
        QApplication a(argc, argv);
        QWidget qw;
        //qw.show();
        MainWindow mw(&qw);
        mw.show();
        return a.exec();
    }
    Ответ написан
    Комментировать
  • Проблема с символами в qtablewidget?

    Gremlin92
    @Gremlin92 Автор вопроса
    Целеустремленный
    Тупанул надо было копировать строки, а не присваивать
    Task* task_ = new Task();
        for (int i = 0; i < nrows; i++)
        {
            task_->id = atoi(PQgetvalue(res, i, 0));
            strcpy(task_->task , PQgetvalue(res, i, 1));
            task_->parentTask = atoi(PQgetvalue(res, i, 2));
            strcpy(task_->executor , PQgetvalue(res, i, 3));
            char* ddl = PQgetvalue(res, i, 4);
            ddl[4] = ddl[7] = '\0';
            task_->dateDeathLine->tm_year = atoi(&ddl[0]) - 1900;
            task_->dateDeathLine->tm_mon = atoi(&ddl[5]) - 1;
            task_->dateDeathLine->tm_mday = atoi(&ddl[8]);
            ddl = PQgetvalue(res, i, 5);
            ddl[4] = ddl[7] = '\0';
            task_->dateStart->tm_year = atoi(&ddl[0]) - 1900;
            task_->dateStart->tm_mon = atoi(&ddl[5]) - 1;
            task_->dateStart->tm_mday = atoi(&ddl[8]);
            strcpy(task_->status , PQgetvalue(res, i, 6));
    
            strcpy(task_->oldtask , PQgetvalue(res, i, 7));
            cout << " Id: " << task_->id;
            cout << " Task: " << task_->task;
            cout << " Parent: " << task_->parentTask;
            cout << " Executor: " << task_->executor;
    
            char* date_string = new char[50];
            strftime(date_string, 50, " %Y-%m-%d", task_->dateDeathLine);
            cout << " DeathLine: " << date_string;
    
            strftime(date_string, 50, "%Y-%m-%d", task_->dateStart);
            cout << " Start: " << date_string;
            cout << " Status: " << task_->status;
            cout << " Oldtask: " << task_->oldtask << endl;
            vTask.push_back(task_);
        }
    Ответ написан
    Комментировать
  • Как сделать так, чтобы окно открывалось один раз и единственный(как при регистрации)?

    Gremlin92
    @Gremlin92
    Целеустремленный
    Создайте файл с нулём например считайте изфайла число, если оно ноль создать окно, показать сообщение и записать в файл вместо ноля единицу, потом при открытии с единицей окно не будет показываться, можете после этот файл шифровать и дешифровать чтобы его не правили из блокнота и не ставили ноль. Можете тот же ноль хранить в бд а потом записать на его место единицу, и т . д.
    Ответ написан
    Комментировать