LINUX.ORG.RU

Сообщения gwyllum

 

Ubuntu - как узнать разрядность дистрибутива

Форум — Desktop

Доброго времени суток, ребят помогите ламеру - необходимо узнать разрядность дистрибутива.

uname -a
Выдает

Linux welcometohell 3.8.0-29-generic #42-Ubuntu SMP Tue Aug 13 19:40:39 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/*release* 

Выдает:

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=13.04

DISTRIB_CODENAME=raring

DISTRIB_DESCRIPTION=«Ubuntu 13.04»

NAME=«Ubuntu»

VERSION=«13.04, Raring Ringtail»

ID=ubuntu

ID_LIKE=debian

PRETTY_NAME=«Ubuntu 13.04»

VERSION_ID=«13.04»

HOME_URL="http://www.ubuntu.com/"

SUPPORT_URL="http://help.ubuntu.com/"

BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

как еще можно узнать? Заранее спасибо

 ,

gwyllum
()

Qml Добавить элемент в список

Форум — Development

Доброго времени суток! Необходимо реализовать в QML дерево, в которое можно было бы добавлять элементы и сворачивать его. Попробовал делать так - беру структуру типа ListView :


    ListView {
        id: taskList
        anchors.fill: parent
        model: taskModel
        delegate: taskDelegate
        focus: true
    }

Вложенность имитируется за счет отступов текста. Сам список представляет собой QStingList, заполняется в main

    QStandardItemModel* tree = new QStandardItemModel();
    QList<QStandardItem*> firstLevel;
    firstLevel << new QStandardItem("0");
    firstLevel << new QStandardItem("1");
    firstLevel << new QStandardItem("2");
    QList<QStandardItem*> secondLevelA;
    secondLevelA << new QStandardItem("3");
    secondLevelA << new QStandardItem("4");
    QList<QStandardItem*> secondLevelB;
    secondLevelB << new QStandardItem("5");
    secondLevelB << new QStandardItem("6");
    secondLevelB << new QStandardItem("7");
    QList<QStandardItem*> thirdLevel;
    thirdLevel << new QStandardItem("8");
    thirdLevel << new QStandardItem("9");
    thirdLevel << new QStandardItem("10");
    secondLevelA[1]->appendColumn(thirdLevel);
    firstLevel[0]->appendColumn(secondLevelA);
    firstLevel[2]->appendColumn(secondLevelB);
    tree->appendColumn(firstLevel);
    TaskTree *taskTree = new TaskTree(tree);
    taskTree->setRootContext(viewer.rootContext());
    viewer.rootContext()->setContextProperty("taskTree", taskTree);

    QStringList taskIdsList = taskTree->toPlainList();
    viewer.rootContext()->setContextProperty("taskModel", QVariant::fromValue(taskIdsList));

    viewer.setMainQmlFile(QStringLiteral("qml/organizer/main.qml"));
    viewer.showExpanded();

При попытке вызвать у модели списка insert выдается сообщение, что такой метод не существует, т.к. нет его поддержки в QML. Подскажите пожалуйста, какую модель списка использовать, чтобы можно было добавлять новые элементы в список QML и чтобы обновлялось отображение дерева.

 , ,

gwyllum
()

c++ qt проблема с цветами

Форум — Development

Доброго времени суток, уважаемые форумчане! С-но, есть код:

void Shape::paint(QPainter *painter,
                    const QStyleOptionGraphicsItem *option,
                    QWidget *widget)
{
//проверка на выделение если выделен - красный контур
if(isSelected())
{
   painter->setPen(Qt::red);
  
}
else
{
    painter->setPen(Qt::black);
}
/////////////////////////////////////////////////////

QPen pen;

painter->setPen(pen);
painter->drawPath(m_shape);//сформированный контур объекта

painter->drawText(m_shape.boundingRect(), name);//имя объекта
}

Когда он писался, то проверялся на Windows и все отлично работало. При сборке под Liunx(Ubuntu 13.04) при выделении объекта мышью, его цвет не меняется, хотя все остальные функции - перемещение объекта и т.п. по-прежнему работают. Поэтому возник вопрос - что нужно исправить, чтобы код заработал?

Пробовал сделать вот так:

if(isSelected())
{
    QColor red=QColor(255,0,0);
   painter->setPen(red);
}

Но результат по-прежнему печален.

 ,

gwyllum
()

Qt тестирование - как запустить несколько тестов

Форум — Development

Доброго времени суток! Только начал изучать тестирование в Qt. Например, есть код:

void TestDiarryRecord::getDate()
{
    QDate actual=QDate(2010, 8,6);
    DiarryRecord rec=DiarryRecord("Date test record");

    rec.setDate(QDate(2010, 8,6));
    QDate expected=rec.getDate();

    QCOMPARE(actual, expected);
}
...
//other testing
...
//main.cpp:
QTest::qExec(new TestDiarryRecord, argc, argv);

Понятно, что если тест пройдет, то этот метод будет работать в любых ситуациях. Но есть ведь более сложные ситуации, когда одного теста недостаточно. Тогда нужна выборка тестов. Реализовать 10 методов типа getAnotherAnotherAnotherDate как-то не ок. Отсюда вопрос - как это реализовать? Мой ламерский опыт подсказал мне завести массив входных значений, получаемых и эталонных результатов и прогнать в цикле QCompare()

Но вот вопрос насколько это эффективно. И насколько соответствует экстремальному программированию?

Буду очень благодарен за ваши советы и прошу прощения за ламерские вопросы.

 , , ,

gwyllum
()

Qt pri-файлы

Форум — Development

Подскажите пожалуйста, как правильно использовать pri-файлы в Qt? Хотел раскидать исходники по папкам для лучшей наглядности. У меня есть файлыв папке shape:

shape/shape.cpp

shape/noeditshape.cpp

shape/shape.h

shape/noeditshape.h

Создаю файл shape.pri:

SOURCES += shape/shape.cpp
SOURCES += shape/noeditshape.cpp
HEADERS += shape/shape.h
HEADERS += shape/noeditshape.h
В pro-файле дописываю:
include(shape/shape.pri)
SUBDIRS += shape\
Пути корректные, в дереве проекта начинается показываться папка shape со всеми файлами. Однако, при компиляции выдается:

mingw32-make[1]: *** No rule to make target 'Shape.cpp', needed by 'debug/shape.o'. Stop.

Подскажите плз, что еще нужно донастроить?

 , ,

gwyllum
()

Qt QGraphicsitem редактирование мышью

Форум — Development

Доброго времени суток! С-но необходимо реализовать изменение объектов(наследуются от QGraphicsItem) с помощью мыши (resize) через контекстное меню. Само меню уже реализовано. Осталось, чтобы при нажатии на меню, пользователь мог мышью растягивать объект(пока стандартный прямоугольник). Я вижу несколько способов это делать:

1. В методах класса объекта: в paint() в случае выбора редактирования отображается не реальный объект, а прямоугольник в координатах объекта, но ширина-высота зависит от перемещения мыши. Дальше отлавливается нажатие клавиши enter и сохраняются новые координаты. Из трудностей - постоянно придется переопределять область отрисовки.

2. Переопределить класс сцены и рисовать все это дело там

3. Использовать главное окно. Ловить сигнал айтема, рисовать вокруг него изменямую мышью рамку и после нажатии клавиши [Enter] посылать объекту, что его размеры изменились

Подскажите пожалуйста, как сделать это правильнее? А то я новичок и не хочется делать через пятую точку.

 ,

gwyllum
()

Qt QGraphicsView::map(To|From)Scene

Форум — Development

Здравствуйте, объясните пожалуйста, что я не так делаю. Мне нужно получить координаты сцены для объектов. Грубо говоря, чтобы разные объекты имели одинаковые координаты. Пока если я создаю объект в координатах (300,300), то при помещении в координату (0,0) функция pos() возвращает координаты (-300, -300). Пользуюсь классом, наследуемым от QGraphicsItem. Пробовал сделать так:

 QPointF p=ui->gvScene->mapToScene(obj->pos().x(), obj->pos().y())        ;
    qDebug()<<p.x()<<p.y();
где ui->gvScene - GraphicsVew на котором отрисовываются объекты. Однако такой способ по-прежнему выдает (-300,-300) в нулевой координате. Причем, если я создам объект в координатах(100,100), то pos вернет соответственно (-100,-100)

Непонятно что я упустил. И еще не совсем понятно, почему QGraphicsItem тоже имеет методы map(To|From)Scene. В чем разница вызова этих методов для GraphicsView или для GraphicsItem?

Извините пожалуйста за ламерские вопросы

 ,

gwyllum
()

Qt QTableWidget изменение ячейки как различить

Форум — Development

Здравствуйте! С-но есть небольшая проблема. У меня имеются объекты на сцене и TableWidget, в котором записаны свойства выделенного объекта - координаты и имя. Каждый раз, когда я перемещаю выделенный объект, я посылаю сигнал главному окну, чтобы в таблице изменились значения. Это работает прекрасно. Теперь мне нужно обратное - при изменении в таблице значения координаты, нужно передвинуть выделенный объект в заданную точку. И вот тут начинаются проблемы - Слот cellChanged срабатывает каждый раз при перемещении объекта и возвращает его в ту же точку.

Пробовал вывести в отладку при перемещении значение координат выделенного объекта(1 столбец) и значение таблицы(2 столбец). Например, для координаты х:

283 283

284 283

284 284

284 284

285 284

Получается, что сперва изменяется координата объекта, но какого-то рожна в таблице остается старое значение. Поэтому координата x становится равной своему предыдущему значение, т.е. фактически не двигается

Можно ли как-то отделить изменение таблицы программно от изменения пользователем? Т.е. если пользователь нажал на ячейку и изменил, то перемещаем объект.

Заранее огромное спасибо!

 ,

gwyllum
()

Qt QObject::connect: No such signal

Форум — Development

Здравствуйте, извините за ламерский вопрос - пытаюсь связать сигналы создаваемого объекта с окном, на что мне выдается QObject::connect: No such signal EditorMovingObject::signal_itemChanged(QString name)

связываю так:

//class
class EditorMovingObject : public QObject, public QGraphicsItem
{
    Q_OBJECT
....
signals:

        void signal_itemChanged(QString name);
...

//in mainwindow:
  EditorMovingObject *mo=new EditorMovingObject(x,y, "asdfsdf");

QObject::connect(mo, SIGNAL( signal_itemChanged(QString name)),
                       this, SLOT(slot_itemChanged(QString name)));
Не могу понять, что я делаю не так?

 ,

gwyllum
()

Qt сигналы динамически создаваемых объектов

Форум — Development

Здравствуйте! Qt изучаю сравнительно недавно и возник вопрос - привязка сигнала к слоту возможна на уровне объектов класса. А что делать, если эти объекты создаются динамически? И непонятно сколько их будет и в какое именно время они будут созданы. Как в таком случае реализовать сигналы и слоты? Спасибо.

 ,

gwyllum
()

Qt QGraphicsItem.changed() - не отлавливает выделение

Форум — Development

Добрый день. С-но ламерский вопрос - пишу что-то вроде мини-редактора. При клике на любой элемент в таблице должны появляться свойства элементов, чтобы в дальнейшем пользователь мог их отредактировать.

Чтобы иметь доступ к элементам, добавил их в специальный список и делаю проверку так:

void MainWindow::paintEvent(QPaintEvent *)
{

    for(int i=0; i<mlist.size(); i++)
    {
        EditorMovingObject *mo=mlist[i];

      if (mo->isSelected())
      {
          ui->twProperties->setItem(0,1,new QTableWidgetItem(mo->name));
      }
      else
      {
          ui->twProperties->setItem(0,1,new QTableWidgetItem(""));
      }
    }

}
Однако это работает только один раз. Если я выбрал второй элемент, а потом обратно вернулся к первому, то ячейка таблицы не меняет свой текст. В чем это может быть дело? По идее, в paintEvent нажатие должно отлавливаться постоянно?

Извините за нубский вопрос

 ,

gwyllum
()

Qt QGraphicsitem::itemChange()

Форум — Development

Здравствуйте, уважаемые формчане. Извините за нубские вопросы, но я совсем запутался. Наследую от QGraphicsItem свой класс. Мне нужно, чтобы при выделении производились какие-то действия. В дальнейшем планирую наследовать дополнительно от QObject и посылать сигналы при изменении. Пробую простейшие действия:

QVariant MovingObject::itemChange(GraphicsItemChange change, const QVariant &value)
{
    if (change == ItemPositionChange)
    {
        // value это новое положение.
        QPointF newPos = value.toPointF();
        newPos.setX(x()); // ограничиваем по Х
        QRectF rect = scene()->sceneRect();
        if (!rect.contains(newPos))
        {
             // Сохраняем элемент внутри прямоугольника сцены.
             newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));
             newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));
        }
        return newPos;
    }

    return QGraphicsItem::itemChange(change, value);
}
На что компилятор ругнулся : ((MovingObject*)this)->MovingObject::x' cannot be used as a function Ладно, не критично пока, подумал я и заменил x() на число. Далее программа скомпилировалась, но ничего не произошло. Я попытался вывести в отладку значение change: ItemFlagsChange

ItemFlagsHaveChanged

ItemFlagsChange

ItemFlagsHaveChanged

ItemSceneChange

ItemSceneHasChanged

ItemVisibleChange

ItemVisibleHasChanged

ItemSelectedChange

ItemSelectedHasChanged

Т.е. я перемещаю объект, а он не отлавливает ItemPositionChange. В конструкторе я прописал:

    setAcceptHoverEvents(true);
    setAcceptDrops(true);;
        setFlag(QGraphicsItem::ItemIsMovable);
        setFlag(QGraphicsItem::ItemIsSelectable);
Подскажите пожалуйста, где я ошибаюсь :(

 ,

gwyllum
()

Qt QGraphicsScene.items() - получение данных пользовательского класса

Форум — Development

Здравствуйте, уважаемые форумчане! Мне необходимо добавлять на сцену пользовательские элементы, которые имеют дополнительные поля, такие как, например, имя. Для чего я создал отдельный класс и наследовал его от QGraphicsItem. Добавление на сцену объектов этого класса работает прекрасно. Но теперь мне нужно получить эти объекты. Код

    QList <QGraphicsItem*>objl;
    objl=scene.items();
не подходит, т.к. класс QGraphicsItem не содержит нужных полей, которые содержит наследуемый от него класс. Пробовал так:
    QList <MovingObject*>objl;
    objl=scene.items();
Но компилятор ругается error: no match for 'operator=' in 'objl = QGraphicsScene::items(Qt::SortOrder) const((Qt::SortOrder)1u)' Как поступить? Создать класс от сцены и переопределить там метод? Или я что-то упустил? Подскажите пожалуйста.

 ,

gwyllum
()

Qt QGraphicsItem узнать координату при перемещении

Форум — Development

Доброго времени суток! Передо мной стоит задача - при перемещении объектов по сцене узнавать их координаты. Объект класса, наследуемого от класса QGraphicsItem с переопределенным методом перерисовки.

С-но, проблему перемещения мышью я уже решил. Теперь мне нужно, чтобы на диалоге текст метки отображал координаты при перемещении объекта.

Не совсем понятно, где писать обработчик. По сути, нам необходимо менять текст метки, только если пользователь нажал на объект и попытался его перетянуть. Т.е. задействовано движение мыши. Пробовал поискать слоты в диалоге связаные с мышью и не нашел. Не ругайте пожалуйста за нубский вопрос, но как это реализовать? Мне копать в сторону переопределения метода отрисовки диалога и там постоянно запрашивать координаты объекта? Или нужно искать обработку действий мыши? Подскажите плз.

 ,

gwyllum
()

MySQL как лучше хранить матрицу

Форум — Development

Доброго времени суток! Подскажите пожалуйста, как лучше хранить двумерный массив? Суть в том, что у меня в базе должны хранится карты высот. Каждая карта представляет собой двумерный массив размерностью 720*720.

Я почитал советы - некоторые предлагают для хранения массива использовать отдельную таблицу. Но у меня таких записей будет порядка 5000 штук. Как-то наверное много таблиц получится.

Конечно самый простой вариант хранить данные в тексте. Но парсинг текста требует много времени. Может кто еще что посоветует?

Заранее огромное спасибо!

gwyllum
()

Qt редактирование многоугольников

Форум — Development

Доброго времени суток всем! С-но, встала передо мной небольшая задачка - знакомый попросил написать примитивный редактор уровней. Суть в том, что уровни состоят из многоугольников, которые в дальнейшем будут затекстурированы. Есно задача редактора создавать многоугольники, редактировать и сохранять их координаты в файл. Начал я копать в данном направлении. Вот задача: 1. В редакторе можно создать фигуру(по умолчанию 3,4,5-угольник) 2. Есть режим редактирования объекта и режим редактирования вершин. Выбирается мышью. 2. В режиме редактирования вершин, каждая вершина фигуры доступна для перемещения, после чего фигура изменяется(можно не в реальном времени, а после отпускания мыши) 3. В режиме редактирования объекта, его можно перемещать или вращать 4. В идеале, хотелось бы иметь возможность добавления новых вершин

А теперь вопрос, как это реализовать в теории? На каком уровне работать с объектами? Допустим, отдельную вершину можно сделать классом, наследуемым от QGraphicsItem. Переопределить метод paint(), добавить возможность передвижения мыши. Но как сделать, чтобы все вершины одного элемента соединялись линиями? И как сделать, чтобы в режиме редактирования объекта осуществлялось именно перемещение-вращение всего многоугольника? Или же может стоит сделать класс Многоугольника, у которого есть динамический список вершин? С одной стороны это плюс в том плане, что проще будет текстурировать. В общем, решил я лучше сперва спросить умных людей. Подскажите плз, как бы вы это реализовали в теории?

 ,

gwyllum
()

Qt QtSql: No such file or directory

Форум — Development

Доброго времени суток всем! С-но возникла у меня проблема при сборке нового проекта в Qt. Создал проект, прописал

#include <QtSql>

Хрен там - сказал компилятор. fatal error: QtSql: No such file or directory

-Хорошо, сказал я и прописал в *.pro файл строку

QT += sql

Хрен там - сказал компилятор. fatal error: QtSql: No such file or directory

-Хорошо, сказал я и сделал очистку и пересборку проекта.

Хрен там - сказал компилятор. fatal error: QtSql: No such file or directory

Вот тут я конкретно завис. Другие проекты ранее созданные не ругаются на отсутствие файла и все работает. И вот сейчас не совсем понятно, что делать. То ли Qt Creator переустанавливать, то ли еще где-то ошибку искать... может кто сталкивался с подобной проблемой?

 , ,

gwyllum
()

qt наследование от QGraphicsRectItem

Форум — Development

Пытаюсь создать свой класс на основе QGraphicsRectItem

#ifndef CCITY_H
#define CCITY_H

#include <QGraphicsRectItem>
#include <QString>

class CCity :public QGraphicsRectItem
{
private:
    CCity();



    CCity(QString coords, QString name);

public:

    int x,y;

    QString name, temp;
};

#endif // CCITY_H


На что компилятор ругается:

error: QGraphicsRectItem::QGraphicsRectItem(const QGraphicsRectItem&)' is private

error: within this context

Прошу прощения за глупый вопрос, но что я не так делаю?

 , ,

gwyllum
()

Qt прокрутка qPainter

Форум — Development

С-но стоит задача отрисовки карты, которая имеет достаточно большие размеры. Помимо этого стоит задача при наведении на объект менять цвет. Отрисовываю с помощью

void Dialog::paintEvent(QPaintEvent *)
{
     QPainter painter(this);
вопрос в том, как все это дело прокручивать. вроде есть QScrollArea, но там нужно указать виджет. Пробовал указать сам диалог в качестве объекта, окно вообще пропадает.

Может в qPainter есть возможность поменять центр отрисовки? Тогда с помощью скролов можно было бы менять центр отрисовки, т.е. фактически прокручивать карту.

И еще вопрос вдобавок. Про qPainter написано, что он служит для низкоуровневого вывода. Означает ли это, что этот вывод будет быстрее, чем QGraphicScene?

 , ,

gwyllum
()

Как получить координаты gis из PostgreSQL

Форум — Development

Доброго времени суток! Необходимо разработать небольшое приложение на Qt, которое бы отображало данные из Open Street Map. Установил себе PostgreSQL, установил расширение postgis для работы с OSM. С помощью imposm переконвертировал OSM в Postgre-БД. Все работает. Проблема встала с получением этих данных. Таблицы дорог, городов, рек содержат поле geomerty вида «010200002031BF0D00340000004BB16D3........DF0F7B45C41». Не совсем понятно, как извлекать из этого точки, линии, окружности.

Может кто уже сталкивался с подобной проблемой?

Огромное спасибо!

 , imposm, , ,

gwyllum
()

RSS подписка на новые темы