crossplatform.ru

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

История благодарностей участнику lanz ::: Спасибо сказали: 107 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
6.7.2017, 13:16 data() MVC из скрипта возможно ?
Цитата(JohnZ @ 6.7.2017, 12:06) *
Это уже при линковке. Чё с этим делать хз ...

Это распространенная вещь, MOC не находит твой заголовочник.

Проверь что fpmodels.h включен в HEADERS в .pro файле
Попробуй перезапустить qmake (Build->Run qmake)
Пересобери.

Если не поможет, тащи сгенерированный Makefile, будем посмотреть :)
Цитата(JohnZ @ 6.7.2017, 12:06) *
Дык что-бы иметь одну универсальную, на все случаи ...

Так не бывает :lol:
А еще YAGNI ;)

Цитата(JohnZ @ 6.7.2017, 12:06) *
Дык скриптовую поддержку можно отдать "наружу" :) Как в ERP-системах.

Это если есть хорошее API между скриптом и сишной частью, иначе все равно придется лезть в сишный код/дергать тебя.

Цитата(JohnZ @ 6.7.2017, 12:06) *
Ни разу. В чём подвох ? :)

Тогда смысл ее выносить в скрипт? :)
JohnZ,
5.7.2017, 11:09 data() MVC из скрипта возможно ?
См. приложение.
Цитата
Дык по-любому все объекты получатся проксируемыми, или я чего-то не догоняю ... :(

Только те, у которых используется прокся :)
Цитата
... и ХТО такой SRP ? Просвети plz, если можно ссыль ... ?

Single Responsibility Principle из SOLID
https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
Цитата
Вот если-бы они "росли"

Prefer composition to inheritance :)
Цитата
Дык какая колонка чего должна показать и должна "разобраться" data() !? ... или я тебя не правильно понял :-(

В ScripProxy можно завести другие проперти, которые позволят фильтровать уже в ScripProxy::data, не дергая скрипт, например если скрипт умеет обрабатывать только 1 колонку, то можно для остальных и не вызывать коллбэк.
Цитата
LANZ - а можно по-подробнее сей момент "разжевать" ???

Тот же пример что выше - if по номеру колонки можно сделать в скрипте, тогда скрипт будет вызываться для всех колонок. А можно сделать в ScriptProxy::data и сравнивать с вынесенным property. Тогда скрипт будет вызываться только для одной колонки.
Цитата
и здесь, и если можно псевдо-кодом ?

Вроде того:
function data(row, col, model) { return model.data() }

args << engine->newQObject(sourceModel())
JohnZ,
27.6.2017, 16:18 Динамический вызов ф-ции в QT Script
В qscript можно использовать просто this вместо window для глобального объекта (по моему я так писал :lol:)
JohnZ,
13.4.2017, 9:30 #pragma pack и __attribute__
Цитата
Вроде бы работает, но меня не покидает ощущение, что что-то я сделала не так, или можно было покрасивее.

Лучшее враг хорошего, но тут правда есть что улучшить, поскольку __attribute__ это специфика GCC, а pragma - студии, то что вы будете делать когда кто то будет собирать ваш код под виндой с помощью например mingw? :lol:
Лучше использовать дефайны, определяющие компилятор, а не систему, например:
_MSC_VER
__GNUC__

Хотя и gcс в общем то поддерживают прагму.
https://gcc.gnu.org/onlinedocs/gcc-4.3.1/gc...ng-Pragmas.html
Анна,
19.1.2016, 19:46 QString объект из функции.
Цитата
принимает примерно следующий вид

Нет, RVO, означает что не создается временный объект для хранения значения, возвращаемого из функции.
Локальная переменная не отбрасывается, иначе бы qDebug() ничего не печатал бы.

Немного переделанный пример из википедии:
void returnStr(QString * _hiddenAddress) {
  *_hiddenAddress = "a";
}
Ponchikus,
25.12.2015, 15:37 Установка фильтра, да не простого, а с несколькими or
1. Вариант для ленивых
proxyModel.setFilterRegExp(r"Томаты|Огурцы|Картофель")
http://doc.qt.io/qt-5/qsortfilterproxymode...lterRegExp-prop
2. Для не очень ленивых, позволяющий фильтровать в коде а не в регекспах - перегрузить
http://doc.qt.io/qt-5/qsortfilterproxymode...ilterAcceptsRow
poluna,
21.12.2015, 15:44 python, аргументы класса
Интерпретатор говорит что объект типа "тип" нельзя использовать как dict (и он прав, нет метода __getitem__ :lol: )
Либо используйте __dict__, либо getattr
  for k in SimplePacket().__dict__.iterkeys():
    print k
    print SimpleView.__dict__[k]
    print getattr( SimpleView, k )

Вообще я не гуру питона, но не лучше ли использовать списки, кортежи или те же самые словари?
poluna,
16.12.2015, 14:53 Получение порядкового номера QTreeView
poluna, ну у меня ваш код вроде работает как надо, ЧЯДНТ? :lol:
Немножко поменял hidePopup, чтобы он сразу все не корячил:
    def hidePopup(self):
        if self._skipNextHide:
            self._skipNextHide = False
        else:
            self.setRootModelIndex(self.view().currentIndex().parent())
            self.setCurrentIndex(self.view().currentIndex().row())
            QtGui.QComboBox.hidePopup(self)
poluna,
16.12.2015, 12:44 Получение порядкового номера QTreeView
Цитата
"внемодельное" дерево

Ойойой, не слушайте его, он вас плохому научит! :lol:
По идее модель в комбобоксе и модель в дереве слева - это должна быть одна и та же модель.
Поэтому индекс от одного должен подходить к индексу от другого.

Т.е. вы сначала получаете выделенный индекс от дерева
(назовем его idx)

потом в комбобоксе делаете
combo->setRootModelIndex(idx.parent())
combo->setCurrentIndex(idx.row())

http://doc.qt.io/qt-4.8/qcombobox.html#setRootModelIndex
http://doc.qt.io/qt-4.8/qcombobox.html#currentIndex-prop
poluna,
15.12.2015, 16:48 QFileSystemModel и сигнал о перемещении файла
Цитата
просто надеялся, что хотя бы QFileSystemModel умеет фильтровать


Попробуйте посмотреть в dropMimeData, переопределить его, разобрать то что дропнуто.

Вот:
https://github.com/qtproject/qtbase/blob/3b...model.cpp#L1192
Там все очень просто сделано, и понятно как перегрузить.
dmsovetov,
3.12.2015, 9:50 Как получить доступ к объекту другого приложения, если получен адрес этого объекта
Записывайте в общую память флаг "активируйся!". И пусть приложение опрашивает этот флаг. Как только он поднят, вызываем activateWindow, сбрасываем флаг.
MishaUA,
17.11.2015, 9:30 QTextCursor и подсветка текста в QPlainTextEdit
На вскидку
ui->plainTextEdit->textCursor().charFormat()


Возвращает charFormat в позиции родного курсора. Поэтому когда выделение доезжает до этого места
то
textCursor->setCharFormat(ui->plainTextEdit->textCursor().charFormat()); //стирает выделение

не стирает выделение, а получает *charFormat.
Что из этого следует надо еще подумать. Смысл в том что charFormat не связан с курсором, это общие данные, которые используют оба курсора, отсюда и перемешивание.
Kroll,
11.11.2015, 10:07 Обмен сигнал-слотами крашится
Поскольку оба объекта в одном потоке, вызовы слотов происxодят как вызовы обычных функций и получается бесконечная рекурсия:
void a() {
b();
}
void b() {
a();
}

a();

Если хотите устроить такой обмен, используйте либо QTimer::singleShot(0, go/back), чтобы поток вернулся в цикл обработки событий, прежде чем вызывать метод.
Либо откажитесь от такого циклического вызова. Кстати зачем он вам? Возможно вы решаете не ту проблему.
cupersuper,
29.8.2015, 0:10 Что я не так делаю с указателями?
    if((_strList[i] == "point")||(_strList[i] == "poligon")||(_strList[i] == "line"))
    {
        if((_strList[i] != "=")||(_strList[i] != ".")||(_strList[i] != ",")||(_strList[i] != ":"))
        {

Это условие вообще лишнее, поскольку мы уже знаем, что _strList[i] это point, line или polygon.
Shaitan,
8.8.2015, 11:46 правильная ли реализация
Цитата
Как правильно или где правильно удалять fd?

Используйте deleteLater. С обычным delete объект удаляется, а потом управление возвращается в fileDownloaded уже удаленного объекта.

Цитата
Можно, конечно, скрестить ужа с ежом (bash с QT).

Не вижу в этом ничего предосудительного :lol:

Цитата
но хочеться только средствами QT :)

Но зачем?
rich,
7.8.2015, 13:05 правильная ли реализация
Из некритичного/отсутствующего.
1.
check *cck = new check();

cck не удаляется. Можно объявить локальной переменной(не указателем).
2. fd не удаляется (или не видно где удаляется)
3. "URL_TO_FILE" hardcoded.

Вообще мне все нравится, но я бы делал скачку файла отдельно, например через curl, а прога обрабатывала уже скачаный файл через pipe или еще как.
rich,
4.8.2015, 9:11 variable or field '*' declared void Qt
QList это шаблон, соответственно нужно указать с элементами какого типа вы хотите его использовать.
Например QList<int> или QList<QString>
https://ru.wikipedia.org/wiki/Шаблоны_C%2B%2B
Shaitan,
29.7.2015, 10:39 привязка переменных в QtScript
Цитата
obj.property("var_A")

Могу уже подзабыть кое что, но насколько я помню obj.var_A работает так же.
call_me_Frank,
28.7.2015, 21:35 привязка переменных в QtScript
Можно создать QObject и передать его в скрипт,
все Property этого объекта будут синхронно менятся в C++ и в скрипте.
http://doc.qt.io/qt-5/properties.html
call_me_Frank,
20.7.2015, 9:57 QRegExp как выловить квадратные скобки?
Попробуйте \\[ (два слеша, один для компилятора, другой для регекспа).
Shaitan,
15.7.2015, 18:50 QVariant data() роли.
Цитата
Это понятно, а как представление определяет с какой именно ролью вызывать эту функцию?? Т.е. как представление определяет что сейчас передается роль Qt::ToolTipRole, откуда оно узнаёт что мы передаётся роль 13(Qt::ToolTipRole) ?

Нужно ей тултип показать - она передает ToolTipRole,
Нужно ячейку перерисовать, передает DisplayRole,
В общем по мере надобности :lol: А уж представление знает когда что ему нужно.

А то какая роль за что отвечает - это соглашение.
Ponchikus,
15.7.2015, 18:16 QVariant data() роли.
Цитата
QVariant преобразуется в QSize, и изменит размер ячейки (10,10)??

Ну это зависит от реализации конкретного представления, может поменять, а может проигнорировать :lol:

Цитата
А как тогда модель определяет, какая именно роль в данный момент ей передается?? Это похоже на обработчика событий (QPaintEvent, QResizeEvent...)??

Да вот же она, передается как параметр:
QVariant MyModel::data( const QModelIndex & idx, Qt::ItemDataRole role )
Ponchikus,
15.7.2015, 17:43 QVariant data() роли.
Цитата
Я правильно понимаю? Это так ??

Есть две точки зрения
1. С точки зрения представления - внешний интерфейс модели:
У нас есть модель, неважно где мы ее взяли:
QAbstractItemModel * mdl;

в которой три строки
mdl->rowCount(); // возвращает 3

в которой есть один столбец
mdl->columnCount(); // возвращает 1

получим индекс первой строки первого столбца
QModelIndex idx = mdl->index(0, 0); //нумерация с 0

получим данные для этого элемента
idx.data( Qt::DisplayRole ) или mdl->data( idx, Qt::DisplayRole ); //возвращает QVariant который можно преобразовать в строку "29" (или в число 29, обычно это неважно)
idx.data( Qt::ToolTipRole ) или mdl->data( idx, Qt::ToolTipRole ); //возвращает QVariant который можно преобразовать в строку "Это число!" (например)
idx.data( Qt::DecorationRole ) или mdl->data( idx, Qt::DecorationRole ); //возвращает невалидный QVariant :(

теперь напишем в нужной ячейке текст, который мы получили ("29")
если пользователь навел мышку в ячейку, покажем подсказку ("Это число!")
не будем рисовать иконку, модель ничего не вернула :(

2. Та же самая модель, вид изнутри
class MyModel : public QAbstractListModel {
// .. конструктор
// .. объявления методов
  QVector<int> list = { 29, 15, 5 };
}

int MyModel::rowCount( .. ) {
  return list.size();
}

int MyModel:: columnCount( .. ) {
  return 1;
}

QVariant MyModel::data( const QModelIndex & idx, Qt::ItemDataRole role ) {
  if( role == Qt::DisplayRole ) return list[ idx.row() ];
  if( role == Qt::ToolTipRole ) return "Это число!"; // Для всех элементов подсказка одинаковая

  return QVariant(); // Больше никаких данных ассоциированных с этим элементом (и нет картинки :( )
}
Ponchikus,
15.7.2015, 16:40 QVariant data() роли.
Цитата
К примеру навели мышкой на элемент данных 29, и представление вызывает функцию data() с ролью подсказки (Qt :: ToolTipRole) т.е. передает в функцию индекс модели и константу 13.

Это верно.

Цитата
и именно от этого элемента представление вызывает роли?

Нужно прояснить, что значит "вызывает роли", пока я не понял :lol:

Цитата
И вот по третьему пункту не совсем понятно вот это -- "Роль указывает модели, данные какого типа будут переданы." Какие данные ??

QVariant, который вернется из функции data.
Ponchikus,
15.7.2015, 10:08 QVariant data() роли.
1. Стандартные роли используются стандартными видами в Qt
Здесь описано для чего нужна каждая
http://doc.qt.io/qt-4.8/qt.html#ItemDataRole-enum
Минимально необходимая это Qt::DisplayRole

Роли не вызываются, это просто числа. Представьте что скаждым элементом модели у вас ассоциировано некоторое количество данных:
- текст который показывается пользователю
- картинка
- подсказка
Когда мы говорим модели дай нам данные для элемента Х, мы указываем для чего именно нам нужны данные
Qt::DisplayRole - текст, покажем пользователю, модель должна вернуть текст
Qt::DecorationRole - картинку нарисуем, модель должна вернуть картинку
Qt::ToolTipRole - подсказку по данному элементу

2. Функцию data может вызвать кто угодно, обычно ее вызывает вид(представление)
Эта функция как раз для того чтобы получить данные которые содержит модель.

3. Обязательных ролей нет, но если не обеспечить хотя бы Qt::DisplayRole или Qt::DecorationRole, то ничего не отобразится.

Вот хорошее описание
http://doc.qt.io/qt-4.8/modelview.html
Ponchikus,

5 страниц V   1 2 3 > » 
RSS Текстовая версия Сейчас: 19.8.2017, 10:22