crossplatform.ru

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

История благодарностей участнику AD ::: Спасибо сказали: 70 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
3.4.2009, 16:20 Литература по паттернам проектирования
Цитата(fsMark @ 3.4.2009, 16:58) *
Может кто нибудь порекомендовать литературу по патерам проектирования (желательно академического характера).
Заранее всем спасибо.

Вам лучше вот сюда заглянуть:
Литература
а именно, книжка - Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж.- "Приемы объектно-ориентированного проектирования.

P.S. опечатка в заголовке темы. Хорошо бы поправить! :)

P.P.S. Юрий, ну ты даешь! Слово с ошибкой написано!
fsMark,
31.3.2009, 9:36 wwWidgets
Коротенькое описание добавил! (собственно то же, что и здесь описание. Вечером поперевожу остальное - прошу не ругать, если немного затяну - так сложно по вечерам заставить себя делом заниматься)!
Litkevich Yuriy,
25.3.2009, 16:25 анекдот
Восхищаюсь людьми, создавшими аппарат из следующего анекдота! :)


Мужик пожаловался другу, что у него болит рука. Друг ему говорит:
- А вот тут в магазине автомат поставили, и он по одному анализу мочи
за десятку определяет что с тобой, да еще и рекомендации дает. Попробуй!
Ну, мужик думает: "Не может быть", но проверить охота; пописал в баночку,
принес. Засунул десятку, залил мочу в специальное отверстие, автомат
зашуршал, на нем загорелись огоньки, и выскочила бумажка. Там напечатано:
"У вас привычный вывих локтя. Делайте теплый компресс, избегайте поднятия
тяжестей. Через 2 недели все доложно пройти".
Мужик думает: "Ни фига, до чего дошла техника!" Всю дорогу домой думал,
может, все-таки этот агрегат можно перехитрить? Дома попросил жену
пописать немного в баночку, потом дочку, смешал все это, нашел в кошачьем
туалете какашку, бросил туда, разбавил водой из-под крана и в довершение
еще и сонанировал туда.
Ну, думает, держись, робот хренов, ни в жизнь ничего не угадаешь!
Приходит в магазин, бросает в автомат десятку, заливает свою адскую
смесь и ждёт. Автомат снова зашуршал, опять загорелись разноцветные
лампочки, и, как положено. выскочила бумажка. Берет ее мужик и читает:
"В вашей воде слишком много железа. Купите специальный фильтр. У вашей
кошки глисты. Купите таблетки в вет. лечебнице. Ваша дочь кокаинщица.
Скорее отправьте её в реабилитационную клинику. Ваша жена беременна
близнецами. Отец не вы. Найдите хорошего адвоката. Ну а сам-то ты,
мужик, если не перестанешь дрочить, вывих никогда не вылечишь. И перестань
рваные деньги сюда пихать, задолбал!
mihailikus,
19.3.2009, 15:40 QWizard
ExpertsSystem:: Page_Intro


В данном случае лучше, чтобы enum имел иия.
Например, так:
enum PAGES
{
Page_Intro,
Page_Func01,
// ...
};

Тогда можно будет использовать в качестве типа:
ExpertsSystem:: PAGES
.
Если же Вы имели что-то другое, то, пожалуйста, конкретнее проблему опишите! :)
FladeX,
7.3.2009, 23:15 Дополнительный виджет
GraphicWidget::GraphicWidget(QWidget *parent, Qt::WFlags flags): QWidget(parent, flags), rubberBandIsShown(false),
                rubber(new QRubberBand(QRubberBand::Rectangle, this))
{
    setupUi(this);
    setPlotSettings(PlotSettings());
    initCurves();
}
++Norton++,
7.3.2009, 16:20 Дополнительный виджет
Цитата(++Norton++ @ 7.3.2009, 16:15) *
Вроде все сделал так, но при компиляции выдается ошибка :( :
graphicwidget.cpp:200: error: 'curve_vec' was not declared in this scope

Я что-то где-то не дописал?

Его в классе объявить надо :) Вроде бы и так понятно! :))))
private:
QVector<QPointF> curve_vec;

Советую слегка подучить С++, а то вопросы иногда в ступор вводят! :)))))
++Norton++,
7.3.2009, 14:00 Дополнительный виджет
Добавить в класс 3 функции:
private:
    void drawCurves(QPainter* painter);
    QPointF initXY(double sx, double sy);
    void initCurves();


Ну и их описать :) :
/// Заполнения вектора с кривой (кривая y(x) = x)
void GraphicWidget::initCurves()
{
    curve_vec.append(QPointF(-100., -100.));
    curve_vec.append(QPointF(-10., -10.));
    curve_vec.append(QPointF(-1., -1.));
    curve_vec.append(QPointF(0., 0.));
    curve_vec.append(QPointF(1., 1.));
    curve_vec.append(QPointF(1.5, 1.5));
    curve_vec.append(QPointF(5., 5.));
    curve_vec.append(QPointF(10., 10.));
    curve_vec.append(QPointF(100., 100.));
}

/// Инициализация координат - преобразование из координат графика (sx,sy) в экранные (x,y)
QPointF GraphicWidget::initXY(double sx, double sy)
{
    QRect rect(graphWidget -> rect());
    double dx, dy;

    /// Вычисление смещений вдоль осей
    dx = sx - settings.maxX;
    dy = sy - settings.minY;

    /// Вычисление экранных координат
    double x = rect.right() + (dx * (rect.width() - 1) / settings.spanX());
    double y = rect.bottom() - (dy * (rect.height() - 1) / settings.spanY());

    return QPointF(x, y);
}

/// Отрисовка графика
void GraphicWidget::drawCurves(QPainter* painter)
{
    painter -> setPen(Qt::blue);
    QPolygonF polyline(curve_vec.size());
    for(register int i=0; i<curve_vec.size(); ++i)
        polyline[i] = initXY(curve_vec[i].x(), curve_vec[i].y());
    painter -> drawPolyline(polyline);
}


А затем в paintEvent() добавить следующее:
drawCurves(&painter);


В конструкторе добавить:
initCurves();


Вуаля. График нарисован. Все сделано! :))))
++Norton++,
7.3.2009, 13:11 Дополнительный виджет
Цитата(++Norton++ @ 7.3.2009, 11:02) *
И всетаки, как же строить графики? :)

Сегодня вечером. Впринципе, уже практически все есть. Вечером покажу!

Вот сделал масштабирование. И нажатие на некоторые кнопки:
+ - масштаб +
- - масштаб -
ALT+X - выход
ALT+Enter - показ на весь экран (и обратно).
class QPaintEvent;
class QPainter;
class QRubberBand;
class QKeyEvent;
class QResizeEvent;
class QCloseEvent;
class QShowEvent;
class QWheelEvent;
class QMouseEvent;

/// Виджет, где будет отрисовываться график
class GraphicWidget: public QWidget, public Ui::GraphicWidgetClass
{
    Q_OBJECT

private:
    PlotSettings settings;        ///< настройка для различных масштабов
    QRubberBand* rubber;        ///< "резиновая лента"
    bool rubberBandIsShown;        ///< флажок попадания курсора в "резиновую ленту"
    QPoint origin;                ///< начальные координаты выделяемой области

private:
    void drawGrid(QPainter *painter);

protected:
    void paintEvent(QPaintEvent* events);
    void keyPressEvent(QKeyEvent* events);
    void wheelEvent(QWheelEvent* events);
    void mousePressEvent(QMouseEvent* events);
    void mouseMoveEvent(QMouseEvent* events);
    void mouseReleaseEvent(QMouseEvent* events);
    void resizeEvent(QResizeEvent* events) { QWidget::resizeEvent(events); update(); }
    void closeEvent(QCloseEvent* events) { QWidget::closeEvent(events); }
    void showEvent(QShowEvent* events) { QWidget::showEvent(events); }

public:
    GraphicWidget(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~GraphicWidget();
    void setPlotSettings(const PlotSettings& sts) { settings = sts; settings.adjust(); update(); }
    void zoom(double delta) { settings.scale(delta, delta); settings.adjust(); update(); }
};


Source
#include <QRubberBand>
#include <QKeyEvent>
#include <QWheelEvent>
#include <QMouseEvent>


/// Отрисовка графика
void GraphicWidget::paintEvent(QPaintEvent* events)
{
    QPainter painter(this);
    drawGrid(&painter);

    QWidget::paintEvent(events);
}

/// Нажатие на кнопки клавиатуры
void GraphicWidget::keyPressEvent(QKeyEvent* events)
{
    switch(events -> key())
    {
    case Qt::Key_Plus:
        zoom(-1.0);
    break;
    case Qt::Key_Minus:
        zoom(1.0);
    break;
    case Qt::Key_Left:
        settings.scroll(-1.0, 0.0);
        update();
    break;
    case Qt::Key_Right:
        settings.scroll(1.0, 0.0);
        update();
    break;
    case Qt::Key_Up:
        settings.scroll(0.0, 1.0);
        update();
    break;
    case Qt::Key_Down:
        settings.scroll(0.0, -1.0);
        update();
    break;
    case Qt::Key_X:
        if(events -> modifiers() & Qt::ALT) close();
    break;
    case Qt::Key_Return:
        if(events -> modifiers() & Qt::ALT)
        {
            if(!isMaximized()) showMaximized();
            else showNormal();
        }
    break;
    default:
        QWidget::keyPressEvent(events);
    }
}

/// Изменение масштаба при движении колесика
void GraphicWidget::wheelEvent(QWheelEvent* events)
{
    int numDegrees = events -> delta() / 8;
    double numTicks = numDegrees / 15.0;
    
    zoom(numTicks);
    update();
}

/// Нажатие на кнопку - изменение масштаба
void GraphicWidget::mousePressEvent(QMouseEvent* events)
{
    QWidget::mousePressEvent(events);

    QRect r;
    switch(events -> button())
    {
    case Qt::LeftButton:                ///< если нажата левая кнопка мыши
        origin = events -> pos();
        rubberBandIsShown = true;
        setCursor(Qt::CrossCursor);
        r = QRect(origin, QSize());
        rubber -> setGeometry(r);
        rubber -> show();
    break;
    case Qt::RightButton:                ///< если нажата правая кнопка мыши
    break;
    default:
    break;
    }
}

/// Переопределение функции передвижения мыши
void GraphicWidget::mouseMoveEvent(QMouseEvent* events)
{
    if(rubberBandIsShown)
    {
        rubber -> setWindowOpacity(0.0);
        rubber -> setGeometry(QRect(origin, events -> pos()).normalized());
    }

    update();
}

/// Возвращение прежнего вида курсору и изменение масштаба
void GraphicWidget::mouseReleaseEvent(QMouseEvent* events)
{
    if(events -> button() == Qt::LeftButton && rubberBandIsShown)
    {
        rubberBandIsShown = false;
        unsetCursor();
        
        QRect rect = rubber -> geometry().normalized();
        if(rect.width() < 10 || rect.height() < 10)
        {
            double dx = rect.width() / settings.spanX();
            double dy = rect.height() / settings.spanY();
            settings.scroll(dx, dy);

            update();
            return;
        }
        PlotSettings prevSettings = settings;

        double dx = prevSettings.spanX() / width();
        double dy = prevSettings.spanY() / height();
        settings.minX = prevSettings.minX + dx * rect.left();
        settings.maxX = prevSettings.minX + dx * rect.right();
        settings.minY = prevSettings.maxY - dy * rect.bottom();
        settings.maxY = prevSettings.maxY - dy * rect.top();
        settings.adjust();

        rubber -> hide();
        update();
    }
}
++Norton++,
6.3.2009, 12:27 Функция mod
Тоже думаю, что деление по модулю. Аналог в С/С++ - %
++Norton++,
5.3.2009, 13:19 Дополнительный виджет
[attachment=473:disainer.JPG]

Обведенный в овальчик!
++Norton++,
5.3.2009, 12:32 Дополнительный виджет
Цитата(++Norton++ @ 5.3.2009, 12:21) *
Спасибо, все понятно кроме некоторых деталей:
1) Виджет graphWidget - это имеется ввиду GraphicsView? Или я что-то путаю?
2) На втором листинге исходник PlotSettings.cpp, правильно?

1) Нет. Зачем же? :) Обычный QWidget!
2) Да.

Продолжим. :)
Вот так приблизительно будет выглядеть исходники основного окна:
#ifndef GRAPHICWIDGET_H
#define GRAPHICWIDGET_H

#include "ui_GraphicWidget.h"
#include "PlotSettings.h"

#include <QtGui/QWidget>

class QPaintEvent;
class QPainter;

/// Виджет, где будет отрисовываться график
class GraphicWidget: public QWidget, public Ui::GraphicWidgetClass
{
    Q_OBJECT

private:
    PlotSettings settings;        ///< настройка для различных масштабов

private:
    void drawGrid(QPainter *painter);

protected:
    void paintEvent(QPaintEvent* event);

public:
    GraphicWidget(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~GraphicWidget();
    void setPlotSettings(const PlotSettings& sts) { settings = sts; settings.adjust(); update(); }
};

#endif // GRAPHICWIDGET_H



#include "GraphicWidget.h"

#include <QPainter>
#include <QRect>
#include <QString>
#include <algorithm>
using namespace std;

GraphicWidget::GraphicWidget(QWidget *parent, Qt::WFlags flags): QWidget(parent, flags)
{
    setupUi(this);

    /// Инициализация необходимых параметров
    setPlotSettings(PlotSettings());
}

GraphicWidget::~GraphicWidget()
{}

/// Отрисовка сетки
void GraphicWidget::drawGrid(QPainter *painter)
{
    QRect rect(graphWidget -> rect());
    if(!rect.isValid()) return;
    
    QRect boundString;    
    double great_max = max(settings.numXTicks, settings.numYTicks) + 1;
    for(register int i=0, j=0, k=0; i<=great_max; ++i, ++j, ++k)
    {
        if(j <= settings.numXTicks)                ///< отрисовка вдоль оси X
        {
            int x = rect.left() + (j * (rect.width() - 1) / settings.numXTicks);
            double label = settings.minX + (j * settings.spanX() / settings.numXTicks);
            QString s_label(QString::number(label, 'f', 3));

            painter -> setPen(Qt::black);
            painter -> drawLine(x, rect.top(), x, rect.bottom());

            int flags = Qt::AlignHCenter | Qt::AlignTop;
            boundString = painter -> boundingRect(boundString, flags, s_label);    
            painter -> drawText(x - (boundString.width() + 5), rect.bottom() - (boundString.height() + 5),
                            boundString.width(), boundString.height(), flags, s_label);
        }
        if(k <= settings.numYTicks)                ///< отрисовка вдоль оси Y
        {
            int y = rect.bottom() - (k * (rect.height() - 1) / settings.numYTicks);
            double label = settings.minY + (k * settings.spanY() / settings.numYTicks);
            QString s_label(QString::number(label, 'f', 3));

            painter -> setPen(Qt::black);
            painter -> drawLine(rect.left(), y, rect.right(), y);

            int flags = Qt::AlignRight | Qt::AlignTop;
            boundString = painter -> boundingRect(boundString, flags, s_label);    
            painter -> drawText(rect.left() + 7, y - boundString.height(),
                                boundString.width(), boundString.height(), flags, s_label);
        }
    }
    painter -> drawRect(rect.adjusted(0, 0, -1, -1));
}

/// Отрисовка графика
void GraphicWidget::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);
    drawGrid(&painter);

    QWidget::paintEvent(event);
}


В итоге должна появиться сетка графика. В данном случае выглядеть будет так:
[attachment=472:graphic.JPG]


Позже расскажу про масштабирование и попробуем построить простейший график (y(x) = x)
++Norton++,
5.3.2009, 11:52 Дополнительный виджет
Первое. Желательно создать новый проект. Основной класс GraphicWidget, для простоты, лучше унаследовать от QWidget! Затем добавить в этот виджет еще один виджет graphWidget и сделать компоновку с помощью QGridLayout!
Далее, следует добавить новые PlotSettings.cpp и PlotSettings.h файлы.
h-файл будет выглядеть так:
#ifndef PLOTSETTINGS_H
#define PLOTSETTINGS_H

#include <QPointF>
#include <cmath>

/// Абстрактный класс для задания диапазона значений по осям x и y
class PlotSettings
{
public:
    double minX;                        ///< минимальное значение по оси абсцисс
    double maxX;                        ///< максимальное значение по оси абсцисс
    int numXTicks;                        ///< количество делений на оси абсцисс
    double minY;                        ///< минимальное значение по оси ординат
    double maxY;                        ///< максимальное значение по оси ординат
    int numYTicks;                        ///< количество делений на оси ординат

protected:
    void adjustAxis(double& min, double& max, int& numTicks);

public:
    PlotSettings();
    void scroll(double dx, double dy);
    void scale(double delta_x, double delta_y);
    void adjust();
    void adjust(QPointF& point);
    double spanX() const { return fabs(maxX - minX); }
    double spanY() const { return fabs(maxY - minY); }
};

#endif



В чем-то создание этого виджета будет пересекаться с книгой Жасмина и Бланшета по Qt4! Но будут и отличия.
Итак, создали класс, который будет отвечать за масштабирование, перемещение и сетку нашего графика.


source
PlotSettings::PlotSettings(): minX(-50.), minY(-4.), maxX(50.), maxY(45.)
{
    numXTicks = 8;
    numYTicks = 8;
}

/// Увеличение/уменьшение значения minX, maxX, minY, maxY на интервал между 2-мя отметками
void PlotSettings::scroll(double dx, double dy)
{
    double stepX = spanX() / numXTicks;
    minX += dx * stepX;
    maxX += dx * stepX;

    double stepY = spanY() / numYTicks;
    minY += dy * stepY;
    maxY += dy * stepY;

    adjust();
}

/// Увеличение/уменьшение значения minX, maxX, minY, maxY на интервал между 2-мя отметками
void PlotSettings::scale(double delta_x, double delta_y)
{
    if((minX == maxX || minY == maxY) && delta_x < 0 && delta_y < 0) return;

    double stepX = spanX() / numXTicks;
    minX -= delta_x * stepX;
    maxX += delta_x * stepX;

    double stepY = spanY() / numYTicks;
    minY -= delta_y * stepY;
    maxY += delta_y * stepY;
}

/// Округление значений minX, minY, maxX, maxY
void PlotSettings::adjust()
{
    adjustAxis(minX, maxX, numXTicks);
    adjustAxis(minY, maxY, numYTicks);
}

/// Округление значений заданной точки point
void PlotSettings::adjust(QPointF& point)
{
    double mn_x = minX, mn_y = minY;
    int ticks_x = numXTicks, ticks_y = numYTicks;
    double mx_x = point.x(), mx_y = point.y();

    adjustAxis(mn_x, mx_x, ticks_x);
    adjustAxis(mn_y, mx_y, ticks_y);

    point.setX(mx_x);
    point.setY(mx_y);
}

/// Преобразование параметров в удобные значения
void PlotSettings::adjustAxis(double& min, double&  max, int& numTicks)
{
    const int MinTicks = 5;
    double grossStep = (max - min) / MinTicks;
    double step = pow(10.0, floor(log10(grossStep)));

    if(5 * step < grossStep)
        step *= 5;
    else if(2 * step < grossStep)
        step *= 2;

    numTicks = int(ceil(max / step) - floor(min / step));        
    if(numTicks < MinTicks)
        numTicks = MinTicks;

    min = floor(min / step) * step;
    max = ceil(max / step) * step;
}
++Norton++,
5.3.2009, 0:19 Дополнительный виджет
Цитата(++Norton++ @ 4.3.2009, 23:38) *
Столкнулся с такой проблемой, нужно написать программу, которая будет строить определенный график, но в Qt не нашел виджета-плоттера. :(
Подскажите пожалуйста, есть ли какая-нибудь возможность решить эту проблему? Как отобразить график? Может есть какие-нибудь дополнительные виджеты?

Если решишь делать своими руками - помогу. Можно обойтись и без Qwt! Я эту задачу решил и знаю как делать!
++Norton++,
4.3.2009, 20:14 анекдот
Две молодые женщины покинули бар в четвертом часу ночи, будучи
совершенно в стельку.
По пути домой, проходя через кладбище, им сильно захотелось по-большому.
Поняв, что туалетной бумаги нет, первая взяла свои трусы и
воспользовалась ими. Вторая оторвала кусок ленты от венка, стоящего
рядом у надгробья.
Наутро муж первой, найдя свою любимую мертвецки дрыхнущей, позвонил
своему другу - мужу второй.
- Послушай, я слегка встревожен, она никогда так долго не спала,
и к тому же... на ней нет трусов...
- Мне б твои заботы. Знаешь, что я вытащил у Ленки из жопы? (читает)
"Невыносимо смотреть, как ты покидаешь нас. Ты навсегда останешься
в нашей памяти. 13-я Пожарная Дружина."
mihailikus,
13.2.2009, 14:38 анекдот
Мужик приводит приятеля к врачу. Приятель слова вымолвить не может - воет. Врач спрашивает:
- Что с ним?
Мужик:
- Понимаете, я его за водкой послал. Еле наскребли на пару пузырей, а он, сука такая, углядел по дороге какой-то графинчик и купил его!
Врач:
- Вот упырь! Да я б ему этот графинчик в жопу запихнул бы!
Мужик:
- Так чего спрашиваете, если знаете?..
mihailikus,
12.2.2009, 15:14 Русская кодировка в Qt
В функции main() указать:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));    ///< Для строковых констант
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));        ///< Для функций перевода tr()

В своем коде сделать так:
if(!test.open(QIODevice::Append | QIODevice::Text)) { ui->statusLabel->setText(tr("Ругаюсь: Не могу открыть файл")); return 1; }

QTextStream out1(&test);
QTextStream out2(&counter);

out1 << "This is test: " << tr("Тест");
out2 << "final";

Скорее всего, поможет! ;)
++Norton++,
4.2.2009, 12:17 анекдот
Заходит мужик в ювелирный магазин. Девущка-продавщица:
- Ой, мужчина, как хорошо что вы к нам зашли, ко дню Святого Валентина у нас две недели 20% скидки, купите что-нибудь в подарок вашей девушке. > Вот кулончик золотой в форме сердечка, вашей девушке очень понравится.
Мужик грустно:
- У меня нет девушки...
Продавщица кокетливо:
- Не может быть, такой видный, красивый, высокий мужчина и нет девушки? Почему?!
Мужик грустно:
- Жена не разрешает...
mihailikus,
28.12.2008, 15:06 анекдот
Один курсант заблудился, и сел на каком-то поле. Вызвал по радио помощь.
Прилетает инструктор, глядь - самолет курсанта стоит на каком-то крошечном пятачке.
У старого аса взыграло самолюбие: какой-то курсант сел а я нет?!
Разворачивается, и почти вертикально - хрясь. Что-то поломалось. Выскакивает он из самолета и на молодого: почему тот, такой сякой, не сел на соседнее большое поле. Курсант и говорит:
- А я и сел на соседнее большое поле. А потом мы с колхозниками перетащили самолет сюда, что бы поле освободить для Вас.
mihailikus,
26.12.2008, 11:19 С наступающим Новым Годом
С Наступающим Новым Годом! :))) Всем удачи и успехов в новом году! Побольше денег, поменьше проблем, стабильности и счастья! :)

P.S. И желаю не спиться на праздниках! (10 дней выходных - это е#####ться можно, кошмар, короче)! Успехов. :)
alex977, Litkevich Yuriy,
12.12.2008, 18:29 Как правильно рисовать линии и точки...
Я бы еще добавил, что в h-файле описание выглядит следующим образом

protected:
void paintEvent ( QPaintEvent * event);
Shahid,
19.11.2008, 13:09 Надо написать html браузер
QString & QString::remove ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive )
QString & QString::remove ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive )
Цитата
QString & QString::remove ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive )
This is an overloaded member function, provided for convenience.
Removes every occurrence of the given str string in this string, and returns a reference to this string.
If cs is Qt::CaseSensitive (the default), the search is case sensitive; otherwise the search is case insensitive.
This is the same as replace(str, "", cs).
See also replace().

QString & QString::remove ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive )
This is an overloaded member function, provided for convenience.
Removes every occurrence of the character ch in this string, and returns a reference to this string.
If cs is Qt::CaseSensitive (the default), the search is case sensitive; otherwise the search is case insensitive.
Example:
QString t = "Ali Baba";
t.remove(QChar('a'), Qt::CaseInsensitive);
// t == "li Bb"
This is the same as replace(ch, "", cs).


QString & QString::replace ( const QString & before, const QString & after, Qt::CaseSensitivity cs = Qt::CaseSensitive )
Цитата
QString & QString::replace ( const QString & before, const QString & after, Qt::CaseSensitivity cs = Qt::CaseSensitive )
This is an overloaded member function, provided for convenience.
Replaces every occurrence of the string before with the string after.
If cs is Qt::CaseSensitive (the default), the search is case sensitive; otherwise the search is case insensitive.
Example:
QString str = "colour behaviour flavour neighbour";
str.replace(QString("ou"), QString("o"));
// str == "color behavior flavor neighbor"
bynet,
19.11.2008, 0:50 Надо написать html браузер
А что именно хочешь? Я не очень понимаю. Вот так обращаться к ним:
QString string = "Hello, World!";
for(int i=0; i<str.size(); ++i)
{
    QChar p = string[i];
     // какие-то действия с этим символом
}

Или еще что-то? :)
bynet,
17.11.2008, 10:40 анекдот
Стоматолог пациенту:
-И помните, ничто так не защищает ваши зубы 12 часов днём и 12 часов вечером, как уважительное отношение к окружающим!!
P.S. Что правда, то правда!


Так, наблюдение про фильмы...
"Армагедон" - к земле летит астероид- президент негр.
"Пятый Элемент" - к земле летит астероид - президент негр.
Обама - президент, что летит к земле???
mihailikus,
14.11.2008, 16:53 Нахождение нужного элемента в QListView
На англоязычном форуме подсказали правильное решение. :) Данная штука решается с помощью
QModelIndexList QAbstractItemModel::match ( const QModelIndex & start, int role, const QVariant & value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags( Qt::MatchStartsWith | Qt::MatchWrap ) ) const [virtual]

Вот описание слота, который решает мою проблему:
/// Поиск в левом списке номера, часть (или он весь) которого отражена в new_SN
void LicenceBuilder::findLeftSN(const QString& new_SN)
{
    if(new_SN.isEmpty()) return;

    QSqlTableModel model;
    model.setTable("DeviceList");
    model.select();
    QStringList listNames, selList;
    for(int i=0; i<model.rowCount(); ++i)
    {
        QSqlRecord record = model.record(i);
        listNames.append(record.value("serialNumber").toString());
    }
    foreach(QString name, listNames)
        if(name.indexOf(new_SN, 0, Qt::CaseInsensitive) != -1)
            selList.append(name);

    QModelIndexList indexList = model.match(model.index(0, 0), Qt::DisplayRole, selList.first());
    QModelIndex selectedIndex(indexList.first());
    listDBNumbers -> setCurrentIndex(selectedIndex);
}
haiflive,
11.11.2008, 10:32 анекдот
Идёт значит охотник по лесу. Весь нагружен, ружьё, патроны, собака рядом. А на встречу ему ещё один - без ружья, только с собакой.
- Слышь, а ты что без ружья ходишь?
- А я и без него могу!
- Ну-ка покажи!
Ну, тот видит - над ними утки полетели, взял собаку, подкинул, она схватила утку, упала, принесла хозяину.
Тот, который с ружьём в шоке.
- Блин, покажи ещё раз!
Ну, вся эта процедура проделывается ещё раз.
На окраине леса сидят два наркомана и курят траву:
- Ты видел ща над лесом два раза собака пролетала!
- Ага, а ты говорил шмаль хреновая!!!
mihailikus,

3 страниц V  < 1 2 3 >
RSS Текстовая версия Сейчас: 15.4.2024, 19:43