Ответы пользователя по тегу Qt
  • Как записать в файл (QT)?

    EXL
    @EXL
    Энтузиаст
    void ScriptWidget::onSaveButtonClick()
    {
        QFile updateScriptFile("update-script");
        if (!updateScriptFile.open(QFile::WriteOnly | QFile::Text)) {
            QMessageBox::critical(this, tr("I/O Error"), tr("Error opening file %1\n"
                                                            "Error: %2")
                                  .arg(updateScriptFile.fileName())
                                  .arg(updateScriptFile.errorString()));
            return;
        }
    
        QTextStream out(&updateScriptFile);
        out << ui->textEdit->toPlainText(); // Get text from the QTextEdit Widget
        updateScriptFile.close();
        emit signalSendMessageToStatusBar(QString(tr("File Saved.")));
    }


    Я так записываю, вроде все работает.
    Используй документацию и Assistant.
    Ответ написан
    Комментировать
  • Подкиньте пару хороших книг по Qt (С++)

    EXL
    @EXL
    Энтузиаст
    1. Бланшет, Саммерфилд - Qt4 Программирование GUI на С++. 2ed. - 2008
    2. Шлее Макс - Профессиональное программирование на C++. +CD. Qt 4.8. (В подлиннике) - 2012
    3. Марк Саммерфилд - Qt Профессиональное программирование (High tech) - 2011
    4. Андрей Боровский - Qt4.7+. Практическое программирование на C++ - 2012
    5. Юрий Земсков - Qt4 на примерах

    Первая книга от создателей Qt, в первых главах рассмотрено создание приложения для работы с таблицами (этакий мини Excel). Так что в прямом смысле за день можно разобраться во всех тонкостях создания подобных приложений.
    Вторая книга от известного в Qt-сообществе программиста, очень подробный и толстый справочник по виджетам, их описание и примеры использования. Имеется несколько глав по JavaScript/QML/QtQuick. Однозначный Must Have.
    Третья книга от одного из программистов, разрабатывающих Qt. В ней рассказано о профессиональной разработке приложений. В чем-то является продолжением первой книги.
    Четвертая книга от отечественного программиста, рассмотрены в основном принципы разработки сложных приложений. Отдельный разделы посвящены программированию трехмерной и интерактивной графики, баз данных, многопоточных приложений и созданию собственных виджетов.
    Пятая книга на мой взгляд уже устарела. Её вполне заменяет Макс Шлее.

    Это все книги по Qt 4.X.X на русском языке, известные мне (не считая редакций). Если кто-то знает ещё, пожалуйста отпишитесь.

    По Qt 5 книг пока нету. Макс Шлее сказал, что начнет работу над новой книгой с выхода версии Qt 5.2. По поводу книг для Qt 5 см. ответ ниже. Но не стоит забывать, что у Qt документация одна из самых лучших и вполне способна заменить книгу. Поэтому настоятельно рекомендую пользоваться Qt Assistant при возникновении затруднений.

    По C++ рекомендую конечно классику:
    Прата С. - Язык программирования С++. Лекции и упражнения - 2011
    Ответ написан
    1 комментарий
  • MinGW или MSVC: какой компилятор выбрать для приложений на Qt под Windows?

    EXL
    @EXL
    Энтузиаст
    Я за MinGW, хотя бы потому, что он использует собственный Runtime, работающий на ВСЕХ MS Windows OS, начиная с Win95. В случае с Qt - начиная с 2000/XP. Без всяких установок Visual C++ Redistributable/Visual C++ Runtime и дополнительных библиотек. Просто добавляем в проектный файл такие строки: QMAKE_LFLAGS +=-static-libgcc -static-libstdc++
    Ответ написан
    7 комментариев
  • Анимация в виджете qt на qpainter - как поставить паузу?

    EXL
    @EXL
    Энтузиаст
    Вы неправильно рисуете. Попробуйте так:

    qpaintwidget.cpp:
    #include "qpaintwidget.h"
    
    #include <QPainter>
    #include <QDebug>
    
    QPaintWidget::QPaintWidget(QWidget *parent)
        : QWidget(parent)
    {
        offset = 0;
        resize(800, 600);
    
        paintTimer = new QTimer(this);
        paintTimer->start(10);
        connect(paintTimer, SIGNAL(timeout()), this, SLOT(updatePixmap()));
    }
    
    void QPaintWidget::paintEvent(QPaintEvent *)
    {
        QColor whitebrush = Qt::white;
        QColor blackbrush = Qt::black;
        QColor redbrush = Qt::darkRed;
        QPainterPath path;
        QPainter painter(this); // Создаём новый объект рисовальщика
        painter.setRenderHint(QPainter::Antialiasing);
        painter.setPen(Qt::NoPen);
        painter.translate(1 + offset, 0);
        painter.setBrush(whitebrush);
        painter.drawRect(0, 0, width(), height());
        QPoint triangle[3] = {
            QPoint(180, 450),
            QPoint(220, 450),
            QPoint(200, 555),
        };
        painter.setBrush(blackbrush);
        painter.drawEllipse(10, 15, 380, 380);
        painter.setBrush(redbrush);
        painter.drawEllipse(35, 8, 330, 330);
        painter.setBrush(whitebrush);
        painter.drawEllipse(50, -5, 300, 330);
        painter.setBrush(blackbrush);
        painter.drawPolygon(triangle, 3);
        path.setFillRule(Qt::WindingFill);
        path.addRect(180, 250, 40, 200);
        path.addRect(150, 250, 100, 20);
        painter.drawPath(path);
        painter.setBrush(whitebrush);
        painter.drawEllipse(120, 260, 60, 20);
        painter.drawEllipse(220, 260, 60, 20);
    }
    
    void QPaintWidget::updatePixmap()
    {
        (offset >= 810) ? offset = 0 : offset+=5;
        qDebug() << offset;
        repaint();
    }
    
    QPaintWidget::~QPaintWidget()
    {
    
    }


    qpaintwidget.h:
    #ifndef QPAINTWIDGET_H
    #define QPAINTWIDGET_H
    
    #include <QWidget>
    #include <QTimer>
    
    class QPaintWidget : public QWidget
    {
        Q_OBJECT
    
        int offset;
        QTimer *paintTimer;
    protected:
        void paintEvent(QPaintEvent *);
    private slots:
        void updatePixmap();
    public:
        QPaintWidget(QWidget *parent = 0);
        ~QPaintWidget();
    };
    
    #endif // QPAINTWIDGET_H


    И несколько советов:
    1. Во-первых, никогда не используйте sleep() или Sleep() (в Windows) в программах на Qt. Так как при вызове этой функции замораживается основной thread, в котором как раз и происходит рендеринг GUI. Отсюда тормоза программы и пр.

    2. Никогда не начинайте названия своих классов с буквы Q или q, так как тогда их легко спутать с теми классами, которые входят в библиотеку. Если вам так нужен префикс в имени класса, используйте заглавную C (Class), т. е. ваш класс должен иметь название CPaintWidget или просто PaintWidget.
    Ответ написан
  • Как собрать Qt 4.8.5 из исходников для Linux?

    EXL
    @EXL
    Энтузиаст
    Я сталкивался с такой же проблемой. Можете почитать статью по ссылке выше, там весьма подробная инструкция по сборке Qt 4.8.5
    В вкратце, проблема в том, что в вашем окружении рабочего стола (KDE) используется Qt 4.8.4, и соответственно между библиотеками возникает конфликт. Решить его можно так:
    1. Поставить пакет dbus-dev:
    sudo apt-get install libdbus-1-dev
    2. Сконфигурировать Qt приблизительно такой командой:
    ./configure -platform linux-g++ -opensource -confirm-license -xrender -fontconfig -opengl -dbus -prefix /opt/QtSDKs/Qt4.8.5-x86_64-all

    3. Пересобрать.

    Если вам необходима поддержка бэкенда для GStreamer'a (для работы с аудио/видео) - не забудьте указать при конфигурировании -glib -phonon -phonon-backend и доустановить необходимые хедеры.
    Ответ написан