crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику ufna ::: Спасибо сказали: 29 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
2.2.2012, 13:27 Доступность FTP сервера в сети
Цитата(hawk @ 2.2.2012, 13:55) *
я тоже так думал сделать,но как программе "понять", что сервер пингуется и теперь доступен??


ну.. пингануть его :) стучишься на определенный порт, смотришь ответ. если есть - "возможно доступен", если нет - то недоступен.
hawk,
16.1.2012, 14:05 Поиск файлов
делай маску для .png и .PNG и все. остальные - не нужны, если что будут во "все файлы".
skaz54,
26.10.2011, 19:11 Служба Windows на QT
Цитата(Авварон @ 26.10.2011, 18:57) *
есть то ли qtservice то ли как-то так для этих целей.


+1

Хотя сервисы лучше писать платфомозависимые, имхо.
silver47,
16.10.2011, 19:45 Можно ли с помощью Qt определить частоту монитора?
ладно, переиначу - Qt мало лезет в настройки ОС, посвященные железу :)
registr,
4.5.2011, 17:34 Кросс-компиляция для WinCe_x86
хочет ее, скачай да выдай :) не обязательно чтобы она была. А там по результату :)
tp4,
9.1.2011, 23:59 Помогите разобаться с потоками.
Чет мне подсказывает, что закидывать в while() сообщениями без пауз - это не лучший метод :) виджеты живут в основном потоке, но если они получают неприрывный поток сигналов, они это отрабатывают и не дают возможности сигналам и событиям перемещения прийти.
franza,
29.12.2010, 18:34 Различия типов int и short
AD,

Типы данных привязаны к байтам, а не к битам, поэтому если битность у системы другая и байт к примеру 9 бит или 12 бит (С и С++ работают с 8 и выше битами по стандарту), то соответственно размер типов меняется, но "Type int is an integral type that is larger than or equal to the size of type short int, and shorter than or equal to the size of type long".

Таким образом, если отбросить вопросы битности и байтности, то инт - тупо больше или равно шорт. И разница как раз в больше или равно, не более чем.
AD,
27.12.2010, 6:48 [msvc] Ошибки компиляции
Я сталкивался в двух проявлениях:

1. В списке инклюдов windows.h и excpt.h должны стоять сразу перед winnt.h

2. Поместить $(_ARCHFAM_) или $(ARCHFAM) в препроцессор definition, или добавить /D "_X86_" или /D "X86" в коммандную строку билда
igor_bogomolov,
8.12.2010, 14:03 Еффект тени вокруг объекта
Блин, я минут пять тупил где там тень ))

Дешевый - под объект помещается еще один объект, который рисует это из восьми кусочков .png, заготовленных заранее. При изменении размера - менять и размер подложки.
wiz29,
26.11.2010, 7:18 QGraphicsItem + QGraphicsView
Бери у айтема также данные из transform(), учитывай scale - отсюда получишь координаты виджета в координатах родителя.

Дело в том, что трансформация - очень хитрая штука, работающая именно в координатах самого айтема, а не родителя. Просто проследи логику изменения именно в таком ключе.
crashsp,
11.11.2010, 11:26 Почему-то начало каждый раз компилировать весь проект заново.
Смотря что за файл :)
mva,
16.10.2010, 21:57 загрузка картинки на сайт методом пост multipart/form-data
file кстати тоже не задаешь. Сделай как у меня - это проверенный вариант
eldar85,
16.10.2010, 21:23 загрузка картинки на сайт методом пост multipart/form-data
ну ты key неверно задаешь

сделай как в моем примере, поставь key вместо моего __PARAM_NAME__, а его значение - вместо "__your PARAM_NAME data in TEXT__"
eldar85,
16.10.2010, 13:04 загрузка картинки на сайт методом пост multipart/form-data
В принципе, все очень просто - http://ufna.ru/2010/10/16/qt-post-multipart-form-data
eldar85,
6.10.2010, 11:23 Реальный размер QWidget
Цитата(Алексей1153 @ 6.10.2010, 12:20) *
в конструкторе он тоже должен работать. Но косяк не в этом. А в том, что вызывать для получения размеров нужно в обработчике paintEvent - ведь там будешь графику рисовать свою


дак в конструкторе оно и работает. Именно такой размер имеет виджет в случае автора. Только потом он его размещает к примеру на лейауте - и при размещении размер изменяется. А если сделать просто show() - то будет то, что size() в конструкторе и даст.

Потому эти данные нужно брать в paintEvent, если это именно для отрисовки нужно.
anater,
2.10.2010, 11:20 Виджеты разной прозрачности
ну я на эти две строчки ссылку и кидал ))
edwardoid,
17.9.2010, 18:29 подключение плагинов
Я вообще делаю .png где могу и не парюсь о плагинах )))


а так:

1. делаешь в коде после создания QApp:

    // Plugins directory changins
    QStringList list_path;
    QDir dir = QDir(app.applicationDirPath()+"/plugins/");
    list_path << dir.absolutePath () << app.libraryPaths ();
    app.setLibraryPaths( list_path  );


2. плагины из папки <qt_dir>/plugins/... копируешь в папку plugins у себя у проги, сохраняя структуру. Не забывая про дебаг и релиз версии.

3. профит
Алексей1153,
27.8.2010, 16:44 Можно ли поменять размеры кнопок в QToolBar
QToolBar *tb = new QToolBar();
tb->setIconSize(...);
wiz29,
27.8.2010, 16:43 Intelligent scissors
Если h(x) = 0 (а это и есть эвристическая функция), то мы получим не алгоритм Дейкстры, а обход графа в ширину, это немного разные вещи :)

очередь с приоритетом писал сам, на основе QList для хранения самой очереди и QSet для быстрой отсечки "есть/нет" в очереди. Не факт что оптимально, но для моих целей работает как часы. Список Closed у меня тоже свой, но все основано на QHash - у меня просто стандартизированный под мой проект интерфейс.

вот еще ссылочка хорошая, там по некоторым алгоритмам хорошо написано: http://khpi-iip.mipk.kharkiv.edu/library/d...gsu/oglav6.html

дядька из КГУ нашего писал, плюс я сам немного лапку для создания некоторых шагов приложил :)
wiz29,
27.8.2010, 15:37 Intelligent scissors
а теперь поподробнее про ньюанс. В чем конкретно он выражается, если веса просчитаны? Что-то еще влияет на маршрут?

если учавствуют всего две вершины, то путь находится куда быстрее именно алгоритмом A*, тем более на больших полях где число точек глобально. Я его использую на гпс навигаторах для прокладки маршрута по десяткам тысяч точек и работает - секунды, на компе - менее полсекунды на самых диких атласах. Могу скинуть код-схему алгоритма.

ну если отставить пути, то что занимает большее количество времени? Какая часть? Как я понял, основные части:

1. просчет весов графа
2. построение путей
3. что-то дальше

какие пропорции по временным затратам?
wiz29,
27.8.2010, 11:42 Загрузка исходника html страницы
Извини за резкость, но задача в ассистанте разобрана на кучу раз.

Минимальный пример:

a_teststate.h
//-----------------------------------------------------------------------------
// File: a_teststate.h
//
// Desc:
//-----------------------------------------------------------------------------

#ifndef A_TESTSTATE_H
#define A_TESTSTATE_H

#include <QObject>

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>

//--------------------------------------------------------------------------------------
// Name: cTestState
// Desc:
//--------------------------------------------------------------------------------------
class cTestState :
        public QObject
{
    Q_OBJECT

public:
    // Constructor & destructor
    //----------------------------------------------------------------------------------
    cTestState(QObject *parent = 0);
    ~cTestState();

    QNetworkAccessManager* networkManager() { return pNetManager; }

private:
    //
    //----------------------------------------------------------------------------------
    QNetworkAccessManager *pNetManager;

public slots:
    // control
    //----------------------------------------------------------------------------------
    void slotReadyRead();
    void slotError(QNetworkReply::NetworkError);
    void slotFinished();

};

#endif



a_teststate.cpp
//-----------------------------------------------------------------------------
// File: a_teststate.cpp
//
// Desc:
//-----------------------------------------------------------------------------

#include "a_teststate.h"

#include <QDebug>

//--------------------------------------------------------------------------------------
// cTestState class constructor
//--------------------------------------------------------------------------------------
cTestState::cTestState(QObject *parent)
    : QObject(parent)
{      
    pNetManager = new QNetworkAccessManager(this);

    QNetworkRequest request;
    request.setUrl(QUrl("http://ufna.ru/"));

    QNetworkReply *reply = pNetManager->get(request);
    connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
                this, SLOT(slotError(QNetworkReply::NetworkError)));
    connect(reply, SIGNAL(finished()), this, SLOT(slotFinished()));
}

//--------------------------------------------------------------------------------------
cTestState::~cTestState() {}

//=============================================================================
// PUBLIC SLOTS
//=============================================================================

//--------------------------------------------------------------------------------------
void cTestState::slotReadyRead()
{
    qDebug() << "cTestState::slotReadyRead()";
}

//--------------------------------------------------------------------------------------
void cTestState::slotError(QNetworkReply::NetworkError error)
{
    qDebug() << "cTestState::slotError("
            << error << ")";
}

//--------------------------------------------------------------------------------------
void cTestState::slotFinished()
{
    qDebug() << "cTestState::slotFinished()";

    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    reply->deleteLater();

    // Вывод загруженной страницы
    QByteArray data = reply->readAll();
    QString str = QString::fromUtf8(data);
    qDebug() << str;
}





а, счас проверим

Цитата(kwisp @ 27.8.2010, 12:35) *
ufna,
тебе же говорят - сервер не дает страничку если ты не браузер. я сейчас только что проверил. надо под браузер шифроваться для этого надо знать значени полей http запроса отправляемого браузером. я их наизусть не помню - поставлю wireshark посмотрю. )


счас проверим. В принципе, там проверка либо по яве, либо по тому что шлется в юзер-агент.
RazrFalcon,
25.8.2010, 13:39 QGraphicsView Линейка
Писалось это в далеком (для меня) 2007ом, поэтому решение совершенно не оптимальное. Пока времени оформить в полноценный класс нет, в текущей реализации пару параметров нужно заменить ручками так, как может Ваше приложение.

В моем приложении !!SCENE_SIZE - это размер того прямоугольника, который всегда центрирован в окне, т.е. сцены "за ним" для вьюхи нет. Это можно заменить размером сцены, тогда будет именно для всей сцены.

!!ZOOM в коде - думаю совершенно ясно - это насколько сцена вся наша отмасштабирована.

Сейчас отметки начинаются так же, как на скрине выше - от центра по горизонтали и от LT угла по вертикали.

В принципе, код прозрачен, сложного ничего нет - кому нужно, немного допилите под свои нужды. Время будет, переделаю в полноценный по управлению класс для использования (т.к. для нормальной линейки нужно и нормальное управление положением точек, DPI, учет положения виджетов, "умное" определение толщины скроллов и т.п.).

Ах, да - !!DOTS_PER_SM - это количество точек в сантиметре при зуме в 1.0, т.е. настройка dpi через сантиметры.

Может еще что забыл вырезать, в общем если какие вопросы - отвечу. У меня этот класс еще и за создание и упарвление направляющими отвечает, я его подрезал чтобы не мешало.


a_control_line.h
//-----------------------------------------------------------------------------
// File: a_control_line.h
//
// Desc:
//-----------------------------------------------------------------------------

#ifndef A_CONTROL_LINE_H
#define A_CONTROL_LINE_H

#include <QWidget>
#include <QPixmap>
#include <QGraphicsView>

//--------------------------------------------------------------------------------------
// Name: cControlLine
// Desc:
//--------------------------------------------------------------------------------------
class cControlLine
    : public QWidget
{
    Q_OBJECT

public:
    cControlLine(QGraphicsView* controlledView, bool isHorizontal = true, QWidget *parent = 0);
    ~cControlLine() {}

    virtual void paint(QPainter *) {}
    bool preferImage() const { return m_prefer_image; }

private:
    void paintToStatic(QPainter * paint = 0);

public slots:
    void setPreferImage(bool pi) { m_prefer_image = pi; }
    void updateMe() { updated = false; update(); }

protected:
    void paintEvent(QPaintEvent *);
    void changeEvent(QEvent *event );
    void resizeEvent( QResizeEvent * event );

private:
    QPixmap m_tile;
    QImage *static_image;
    QGraphicsView *pView;

    bool updated;
    bool m_horizontal;
    bool m_prefer_image;

};

#endif


a_control_line.cpp
//-----------------------------------------------------------------------------
// File: a_control_line.cpp
//
// Desc:
//-----------------------------------------------------------------------------

#include "a_control_line.h"

#include <QBrush>
#include <QMenu>
#include <QPainter>
#include <QPainterPath>
#include <QPixmapCache>
#include <QScrollBar>
#include <QtEvents>

extern QPixmap cached(const QString &img);

//--------------------------------------------------------------------------------------
// cControlLine class constructor
//--------------------------------------------------------------------------------------
cControlLine::cControlLine(QGraphicsView* controlledView, bool isHorizontal, QWidget *parent)
    : pView(controlledView), m_horizontal(isHorizontal), QWidget(parent), m_prefer_image(true)
{
    m_tile = QPixmap(100, 100);
    m_tile.fill(Qt::white);

    static_image = 0;
    updated = false;

    if( m_horizontal )
        setFixedHeight(20);
    else
        setFixedWidth(20);
}

//--------------------------------------------------------------------------------------
void cControlLine::paintEvent(QPaintEvent *e)
{
    QPainter painter;
    if (preferImage()) {
        if( (!updated) || (!static_image) ){
            paintToStatic(&painter);
        }
        painter.begin(this);
        painter.setClipRect(e->rect());
        painter.drawImage(e->rect(), *static_image, e->rect());
        painter.end();
    }
    else {
        painter.begin(this);
        painter.fillRect(0, 0, width(), height(), QBrush(Qt::black));
        painter.end();
    }
}

//--------------------------------------------------------------------------------------
void cControlLine::paintToStatic(QPainter *painter)
{
    if( static_image )
        delete static_image;

    static_image = new QImage(width(), height(), QImage::Format_RGB32);

    painter->begin(static_image);

    painter->setRenderHint(QPainter::Antialiasing);
    painter->setRenderHint(QPainter::SmoothPixmapTransform);

    painter->save();
    painter->drawTiledPixmap(rect(), m_tile);
  
    QLinearGradient linearGradient(0,0,width(),height());

    linearGradient.setColorAt(0.0, Qt::white);

    if( this->isEnabled() ) {
        //linearGradient.setColorAt(0.5, Qt::lightGray);
    }
    else
        linearGradient.setColorAt(0.5, QColor(225, 225, 225));

    linearGradient.setColorAt(1.0, Qt::white);

    painter->setPen(Qt::NoPen);
    painter->setBrush(linearGradient);

    painter->drawRect(0,0,width(),height());

    painter->restore();

    painter->save();
    // HORIZONTAL
    //----------------------------------------------------------------------------------
    if( m_horizontal ) {
        int posX = 0;
        if( !pView->horizontalScrollBar()->isVisible() ) {
            posX = width()/2;
            if( pView->verticalScrollBar()->isVisible() )
                    posX -= 9;      // Нужно правильно изменить значение ширины этого скроллбара
        }
        else
            posX = ( !!SCENE_SIZE.width() * !!ZOOM ) / 2
                     - pView->horizontalScrollBar()->value();

        painter->setRenderHint(QPainter::Antialiasing, false);

        if( this->isEnabled() )
            painter->setPen(QPen(QColor(28, 175, 255, 255), 1));
        else
            painter->setPen(QPen(QColor(94, 198, 255, 225), 1));

        painter->setBrush(Qt::NoBrush);

        painter->drawLine(0, height()-1, width()-1, height()-1);
        painter->drawLine(posX, 4, posX, height()-1);

        int perCm = !!DOTS_PER_SM;
        int dimsR = (width()-posX) / perCm * 4 / !!ZOOM;

        // LINES
        //----------------------------------------------------------------------------------
        for( int i = 1; i <= dimsR; i++ ) {
            if( i % 2 == 1 )
                painter->drawLine(posX+i*perCm/2*!!ZOOM, 15,
                                                      posX+i*perCm/2*!!ZOOM, height()-1);
            else if( i % 10 == 0 )
                painter->drawLine(posX+i*perCm/2*!!ZOOM, 4,
                                                      posX+i*perCm/2*!!ZOOM, height()-1);
            else
                painter->drawLine(posX+i*perCm/2*!!ZOOM, 13,
                                                      posX+i*perCm/2*!!ZOOM, height()-1);
        }

        int dimsL = posX / perCm * 4 / !!ZOOM;
        for( int i = 1; i <= dimsL; i++ ) {
            if( i % 2 == 1 )
                painter->drawLine(posX-i*perCm/2*!!ZOOM, 15,
                                                      posX-i*perCm/2*!!ZOOM, height()-1);
            else if( i % 10 == 0 )
                painter->drawLine(posX-i*perCm/2*!!ZOOM, 4,
                                                      posX-i*perCm/2*!!ZOOM, height()-1);
            else
                painter->drawLine(posX-i*perCm/2*!!ZOOM, 13,
                                                      posX-i*perCm/2*!!ZOOM, height()-1);
        }

        // TEXTS
        //----------------------------------------------------------------------------------
        painter->save();

        if( this->isEnabled() )
            painter->setPen(Qt::black);
        else
            painter->setPen(Qt::darkGray);

        painter->drawText(posX+2, 12, "0");

        for( int i = 1; i <= dimsR; i++ )
            if( i % 5 == 0 )
                painter->drawText(posX+i*perCm*!!ZOOM+2, 12, QString("%1").arg(i*10) );

        for( int i = 1; i <= dimsL; i++ )
            if( i % 5 == 0 )
                painter->drawText(posX-i*perCm*!!ZOOM+2, 12, QString("%1").arg(i*10) );

        painter->restore();
    }
    // VERTICAL
    //----------------------------------------------------------------------------------
    else {
        int posY = 0;
        if( !pView->verticalScrollBar()->isVisible() )
            posY = ( height()-!!SCENE_SIZE.height() * !!ZOOM ) / 2;
        else
            posY -= pView->verticalScrollBar()->value();

        painter->setRenderHint(QPainter::Antialiasing, false);

        if( this->isEnabled() )
            painter->setPen(QPen(QColor(28, 175, 255, 255), 1));//255, 100, 30, 255), 1));
        else
            painter->setPen(QPen(QColor(94, 198, 255, 225), 1));

        painter->setBrush(Qt::NoBrush);

        painter->drawLine(width()-1, 0, width()-1, height()-1);
        painter->drawLine(4, posY, width()-1, posY);

        int perCm = !!DOTS_PER_SM;
        int dimsD = (height()-posY) / perCm * 4 / !!ZOOM;
        // LINES
        //----------------------------------------------------------------------------------
        for( int i = 1; i <= dimsD; i++ ) {
            if( i % 2 == 1 )
                painter->drawLine(15, posY+i*perCm/2*!!ZOOM,
                                                      width()-1, posY+i*perCm/2*!!ZOOM);
            else if( i % 10 == 0 )
                painter->drawLine(4, posY+i*perCm/2*!!ZOOM,
                                                      width()-1, posY+i*perCm/2*!!ZOOM);
            else
                painter->drawLine(13, posY+i*perCm/2*!!ZOOM,
                                                      width()-1, posY+i*perCm/2*!!ZOOM);
        }

        int dimsU = posY / perCm * 4 / !!ZOOM;
        for( int i = 1; i <= dimsU; i++ ) {
            if( i % 2 == 1 )
                painter->drawLine(15, posY-i*perCm/2*!!ZOOM,
                                                      width()-1, posY-i*perCm/2*!!ZOOM);
            else if( i % 10 == 0 )
                painter->drawLine(4, posY-i*perCm/2*!!ZOOM,
                                                      width()-1, posY-i*perCm/2*!!ZOOM);
            else
                painter->drawLine(13, posY-i*perCm/2*!!ZOOM,
                                                      width()-1, posY-i*perCm/2*!!ZOOM);
        }

        // TEXTS
        //----------------------------------------------------------------------------------
        painter->save();

        if( this->isEnabled() )
            painter->setPen(Qt::black);
        else
            painter->setPen(Qt::darkGray);

        painter->drawText( 0, posY-18, width()-1, 20, Qt::AlignRight | Qt::AlignBottom , "0");

        for( int i = 1; i <= dimsD; i++ )
            if( i % 5 == 0 )
                painter->drawText(0, posY+i*perCm*!!ZOOM-18, width()-1, 20, Qt::AlignRight | Qt::AlignBottom, QString("%1").arg(i*10) );

        for( int i = 1; i <= dimsU; i++ )
            if( i % 5 == 0 )
                painter->drawText(0, posY-i*perCm*!!ZOOM-18, width()-1, 20, Qt::AlignRight | Qt::AlignBottom, QString("%1").arg(i*10) );

        painter->restore();
    }
    painter->restore();

    updated = true;
    painter->end();
}

//--------------------------------------------------------------------------------------
void cControlLine::changeEvent( QEvent *event )
{    
    if( event->type() == QEvent::EnabledChange ) {
        updated = false;
        update();
    }
}

//--------------------------------------------------------------------------------------
void cControlLine::resizeEvent( QResizeEvent * event )
{
    QWidget::resizeEvent( event );
    updateMe();
}

Litkevich Yuriy,
15.8.2010, 10:50 QScrollArea, скоролы не появляются
Если у тебя QMainWindow родитель MainWindow класса, то ничего странного. Создай обычный виджет, ему присваивай лейаут, а в MainWindow делай setCentralWidget или чет такое.
RazrFalcon,
15.8.2010, 10:48 BRE, kibsoft
С Днем Рождения!!! :drinks: :drinks: :drinks:
BRE,
21.6.2010, 8:49 [РЕШЕНО] Объединение изображений QPixMap
проверяй что-то еще, к примеру theFile

у меня данный код работает именно так, как должен.
JuryS1806,

2 страниц V   1 2 >
RSS Текстовая версия Сейчас: 7.10.2024, 11:30