crossplatform.ru

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

История благодарностей участнику lanz ::: Спасибо сказали: 104 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
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,
8.7.2015, 23:29 Вытащить индекс из модели для мапера
Цитата
Дык это я у модели хотел спросить, какую строку она отображает, что-бы с неё взять ключ и по нему заполнить диалог...

Модель не отображает никакой строки. Конкретная строка отображается именно во вью, в данном случае QWidgetMapper.
QWidgetMapper же и отвечает за заполнение подотчетного виджета.
Какая строка конкретно выделена для этого диалога можно спросить у того вью, в котором выделяются строки и потом сделать
setCurrentIndex() на нее.

Цитата
Нужно что-бы в зависимости от значения поля в БД QComboBox сам выбирал нужную строку, по номеру, типа switch-а ?

Это автоматически делает QWidgetMapper.
JohnZ,
7.7.2015, 16:33 QSerialPort
Цитата
А вот еще один вопрос, что если мне приходящие куски пакетов анализировать и искать в них два байта, которые отвечают за тип сообщения, если два байта найдены, считывать оставшуюся часть пакета,

В принципе нормальный подход, главное не перепутать эти два байта с двумя байтами данных, которые выглядят так же.
leonneon_89,
24.5.2015, 19:05 Запись AT команд в виртуальный COM-порт
Возможны два варианта,
1. Все байты записаны ДО вызова wait
2. Запись длится дольше 200 мс

Попробуйте убрать таймаут, и посмотрите что получится. Если все равно возвращает false, значит первый вариант.
Lya_Inventor,

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