crossplatform.ru

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

История благодарностей участнику lanz ::: Спасибо сказали: 113 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
23.12.2014, 20:08 Еще раз про QProcess
m_process->deleteLater();
m_process = new QProcess(this);

Как обычно все.

Соединение слотов-сигналов само разорвется.
pwp2008,
22.12.2014, 20:26 Еще раз про QProcess
Второй вариант гораздо менее уязвим к ошибкам программиста. Он не будет грузить больше систему(оверхед на создание объекта невелик). С первым вариантом гораздо больше проблем, потому что автоматически создается разделяемое состояние, которое надо будет учитывать/анализировать/очищать при перезапуске. Проще выкинуть весь объект.
pwp2008,
19.12.2014, 20:53 QProcess из QThread
Вот здесь пишут что так не стоит делать, симптомы те-же что и у вас:
http://www.qtcentre.org/threads/23552-Is-a...ead-safe-in-Qt4

Тред вам и не нужен, подключитесь к сигналам процесса в основном потоке.
pwp2008,
9.12.2014, 20:39 Qwt. как повернуть надписи под осями
Мне кажется как то так:
http://qwt.sourceforge.net/class_qwt_scale...00c1dd391023320
Trisch,
26.11.2014, 22:13 Проблемы редактирования DOM модели
1. Хэш никак с этим не связан. У меня все удаляется даже если закоментарить clear()
Память течет, именно потому что вы сказали.
Уберите хэш вообще, насовсем. Здесь он не нужен пока, только все запутывает.
Утекает вот отсюда:
    if (i >= 0 && i < domNode.childNodes().count()) {
        QDomNode childNode = domNode.childNodes().item(i);
        DomItem *childItem = new DomItem(childNode, i, this);
        childItems[i] = childItem;
        return childItem;
    }


Зачем вам параллельная иерархия DomItem которую вы пересоздаете каждый раз когда не найден элемент в хэше? Модель может работать и с кутешным DOM-деревом. Тоже сильно все упростит.

2. http://qt-project.org/doc/qt-4.8/qabstract...l#beginMoveRows
Или можете просто вызвать dataChanged для обоих строк после того как поменяете их внутри своей модели.

3. У меня все работает :lol: Не скачет.
JohnZ,
23.10.2014, 19:19 PyQt model Trisch,
21.10.2014, 22:09 QTableWidget, WordWrap и высота строки
Цитата
Позвольте с вами не согласиться.

Хорошо, но чтобы это в последний раз :lol:

Из исходников qt:
Вот здесь значение которое вы передали сохраняется в роли Qt::TextAlgnmentRole
qtablewidget.h
    inline void setTextAlignment(int alignment)
        { setData(Qt::TextAlignmentRole, alignment); }

А вот место где оно достается:
qstyleditemdelegate.cpp
    value = index.data(Qt::TextAlignmentRole);
    if (value.isValid() && !value.isNull())
        option->displayAlignment = Qt::Alignment(value.toInt());

И далее:
qcommonstyle.cpp
 const QRect layoutRect = QStyle::alignedRect(option->direction, option->displayAlignment,
                                                 QSize(int(width), int(height)), textRect);
    const QPointF position = layoutRect.topLeft();
    for (int i = 0; i < lineCount; ++i) {
        const QTextLine line = textLayout.lineAt(i);
        if (i == elidedIndex) {
            qreal x = position.x() + line.x();
            qreal y = position.y() + line.y() + line.ascent();
            p->save();
            p->setFont(option->font);
            p->drawText(QPointF(x, y), elidedText);


После чего смотрим в
qstyle.cpp
QRect QStyle::alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle)
{
    alignment = visualAlignment(direction, alignment);
    int x = rectangle.x();
    int y = rectangle.y();
    int w = size.width();
    int h = size.height();
    if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter)
        y += rectangle.size().height()/2 - h/2;
    else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom)
        y += rectangle.size().height() - h;
    if ((alignment & Qt::AlignRight) == Qt::AlignRight)
        x += rectangle.size().width() - w;
    else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter)
        x += rectangle.size().width()/2 - w/2;
    return QRect(x, y, w, h);
}


Цитата
2) AlignmentFlag и TextFlag не пересекаются

Это тоже неверно, но это уже придирки по мелочи :lol:
Цитата
Qt::AlignBaseline 0x0100 Aligns with the baseline.
Qt::TextSingleLine 0x0100 Treats all whitespace as spaces and prints just one line.

Цитата
3) и самое главное это работает, хоть и не совсем так как нужно.

Это вообще не работает, передавать или не передавать - все равно будет перенос по словам в пределах высоты строки.
Только что попробовал.
Amadey,
17.10.2014, 22:56 QTableWidget, WordWrap и высота строки
Во первых, в setTextAlignment нельзя передать Qt::TextWordWrap, это член другого перечисления:
http://qt-project.org/doc/qt-4.8/qt.html#AlignmentFlag-enum
http://qt-project.org/doc/qt-4.8/qt.html#TextFlag-enum

Чтобы сделать перенос текста, используйте resizeRow(s)ToContent:
http://qt-project.org/doc/qt-4.8/qtablevie...eRowsToContents

Например так:
    connect( this->ui->tableWidget, SIGNAL(cellChanged(int,int)),
             this->ui->tableWidget, SLOT(resizeRowsToContents()) );
    connect( this->ui->tableWidget->horizontalHeader(), SIGNAL(sectionResized(int,int,int)),
             this->ui->tableWidget, SLOT(resizeRowsToContents()) );
Amadey,
16.10.2014, 22:59 SIGSEGV при установлении модели ( QTableView->setModel )
Сбой сегментации обычно бывает при использовании неинициализированной памяти. Указателя на удаленный объект, неинициализированного указатля и т.п.
Устранить ее можно найдя, где происходит нарушение.

Для этого можно посмотреть полный стек.
В том коде что вы привели, все выглядит нормально. Скорее всего ошибка в другом месте. Выложите проект, либо минимальный проект который иллюстрирует ошибку.
avkushnarenko,
13.10.2014, 0:05 KeyPress и KeyRelease
void Dialog::keyPressEvent(QKeyEvent *PressEvent)
{
  if( PressEvent->isAutoRepeat() ) { ...; return; }
  ... // Обработка клавиш
AlexSMG95,
12.10.2014, 15:57 KeyPress и KeyRelease
Это происходит из за автоповтора.
События, сгенерированные автоповтором можно отделить по флагу isAutoRepeat
http://qt-project.org/doc/qt-4.8/qkeyevent.html#isAutoRepeat
AlexSMG95,
10.10.2014, 18:40 Как правильно писать многопоточное приложение
Цитата
Почему в идентичных, казалось бы, ситуациях (отправка сигнала из того же потока и из другого) наблюдается такое разительное отличие в поведении.

Это как раз очень легкий вопрос.
Когда событие вызывается из своего потока, генерируется просто вызов функции.
Когда из соседнего, создается объект события, в него копируются данные, захватываются мутексы на очередь событий принимающего треда, и сообщение добавляется в очередь, потом EventLoop обрабатывает его и вызывает соответствующую функцию-слот.
Далеко не идентичные ситуации, согласитесь :lol:
borune,
29.9.2014, 18:52 Спозиционировать на запись в QSqlTableModel
Чтобы спозиционировать:
http://qt-project.org/doc/qt-5/qabstractit...w.html#scrollTo

А чтобы поместить в виджет нужный индекс:
http://qt-project.org/doc/qt-5/qdatawidget...rrentModelIndex
JohnZ,
26.9.2014, 22:43 QTableView + QAbstractTableModel data()
Например так:
http://qt-project.org/faq/answer/how_can_i...ible_in_my_view

Эти методы не отвечают за прорисовку, они позволяют получить данные из нижележащей модели.
xVekx,
17.8.2014, 15:24 Перерисовка QGraphicsScene.
Нужно менять своиства ребер соединеных с данной вершиной, а лучше всего сделать так:
1. В ребро добавить номера узлов которые оно соединяет(или указатели на эти узлы)
2. В методе paint ребра, спрашивать координаты концов у соответствующих узлов и рисовать их в этой точке.
Тогда никакие сигналы.слоты не понадобятся, достаточно будет update, который уж есть в обработчике мыши.

    addnewedgeproto->exec();
    if (addnewedgeproto->exec() == QDialog::Accepted){

Тут диалог вызывается два раза. Первый вызов можно безболезненно убрать.

Вы так и не переделали работу с памятью. Assert при выходе.

Используйте double вместо float. Экономить вам не зачем.

Чтобы проще рисовать стрелки, рисуйте в системе координат конца линии, используйте методы QPainter::translate, QPainter::rotate.

(edge + i) полностью эквивалентно edge[i] но последнее короче и проще читается.
AlexandrosLiberalis,
17.8.2014, 11:58 Добавление кнопки в QTableView через делегат.
Можно QSignalMapper использовать.
http://qt-project.org/doc/qt-4.8/qsignalmapper.html
Trisch,
14.8.2014, 23:09 Поиск и выбор узла в QTreeView
Не стоит искать элементы так. Воспользуйтесь интерфейсом модели.
Прикрепил пример проекта. Исправьте если что не так в нем, будем над ним работать.
Не очень удобно пытаться составить в голове куски кода.
JohnZ,
10.8.2014, 17:21 Алгоритмы контейнеров
В документации:
Цитата
qSort(list.begin(), list.end(), qGreater<int>());

list.front() и list.back() возвращают первый и последний элемент( его значение ).
А list.begin() и list.end() возвращают итератор.
olegatorvt,
3.8.2014, 19:52 Назначение sizeHint()
Цитата
sizePolicy : QSizePolicy
This property holds the default layout behavior of the widget.

If there is a QLayout that manages this widget's children, the size policy specified by that layout is used. If there is no such QLayout, the result of this function is used.

The default policy is Preferred/Preferred, which means that the widget can be freely resized, but prefers to be the size sizeHint() returns. Button-like widgets set the size policy to specify that they may stretch horizontally, but are fixed vertically. The same applies to lineedit controls (such as QLineEdit, QSpinBox or an editable QComboBox) and other horizontally orientated widgets (such as QProgressBar). QToolButton's are normally square, so they allow growth in both directions. Widgets that support different directions (such as QSlider, QScrollBar or QHeader) specify stretching in the respective direction only. Widgets that can provide scroll bars (usually subclasses of QScrollArea) tend to specify that they can use additional space, and that they can make do with less than sizeHint().

Т.е. зависит от SizePolicy как будет использоваться sizeHint.

Есди вы хотите задать жесткий размер просто выставьте maximum/minimum size или выставьте QSizePolicy::Fixed.
wf778899,
2.8.2014, 0:25 Виджет из QT3 в QT4
Цитата(JohnZ @ 1.8.2014, 21:34) *
Я имел в виду динамический BIND полей, как в формах 1С или Ананасе.

Через модель как раз и можно сделать динамический бинд. Для биндинга от модели до виджетов есть QDataWidgetMapper
http://qt-project.org/doc/qt-5/QDataWidgetMapper.html

Вот смотрите, создаете свой кастомный виджет, добавляете ему свойство например ColumnName.
Потом в модели доступаетесь до этого свойства и через data выдаете нужные колонки.
Если нужно в таблицу - делаете setModel для QTableView, на виджеты биндить через QDataWidgetMapper и т.п.

Цитата(JohnZ @ 1.8.2014, 21:34) *
Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся
добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view.

Если вы хотите прямо через дизайнер настраивать (а не через xml конфиг например), то придется свой виджет сделать. Но ничего особо сложного или плохого не вижу в этом.
JohnZ,
22.7.2014, 23:38 Создание и работа с объектами класса - наследника QGraphicsScene
Начнем ^_^

scene = new QGraphicsScene(scene);

Здесь в качестве родителя для scene используется неинициализированный указатель scene.
Надо подставить другого родителя, например Dialog:
scene = new QGraphicsScene(this);


node = new Node[10];

Выделяется как массив, удалятся должен тоже как массив:
delete[] node;


Когда вы удаляете сцену, удаляются все объекты на ней. Из описания addItem:
Цитата
Adds or moves the item and all its childen to this scene. This scene takes ownership of the item

Поэтому когда удаляется массив node, те элементы которые были добавлены на сцену удалятся второй раз.
Поэтому не нужно отдельно хранить его, сцена подчистит за собой.
 if (n <= 9)
    {

    Node * newNode = new Node;
    scene->addItem(newNode);

    newNode -> v = n + 1;
n++;
    }

Если нужно хранить узлы для своих целей, просто заведите массив:
QVector<Node*> nodes;

И добавляйте в него:
 if (n <= 9)
    {

    Node * newNode = new Node;
    scene->addItem(newNode);

    newNode -> v = n + 1;
n++;
    nodes.append(newNode);
    }

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

Тут еще одна тонкость.
Вы выделяете node векторным new, а QGraphicsScene удаляет скалярным деструктором, получается что то вроде:
    int *ad = new int[12];
    delete ad;

Это неопределенное поведение, Undefined Behavior.
Интересна статья на тему:
http://blogs.msdn.com/b/oldnewthing/archiv...2/03/66660.aspx
AlexandrosLiberalis,
19.7.2014, 16:52 Замедление вставки в QSQLITE
Надо посмотреть где тормозит конкретно - в загрузке, в драйвере БД, в Qt.
cupersuper,
3.7.2014, 21:25 QApplication::clipboard()
Цитата
Notes for X11 Users

The X11 Window System has the concept of a separate selection and clipboard. When text is selected, it is immediately available as the global mouse selection. The global mouse selection may later be copied to the clipboard. By convention, the middle mouse button is used to paste the global mouse selection.
Litkevich Yuriy,
29.8.2013, 18:19 рекурсивный поиск
Ну или использовать готовый http://qt-project.org/doc/qt-4.8/qdiriterator.html
oks,
15.5.2013, 10:50 Excel и QT
Для работы с Excel файлами лучше все го использовать COM (QAxObject)
Вот тут пример кода почти полный:
http://www.forum.crossplatform.ru/index.php?showtopic=9320
Вот тут про объектную модель:
http://msdn.microsoft.com/en-us/library/ws...7(v=vs.80).aspx

EDIT: Кстати возможно это будет проще сделать через powershell например.
EDIT2:
Тут есть все что нужно
http://habrahabr.ru/post/120383/
Еще хорошая ссылка
http://theolddogscriptingblog.wordpress.co...cookbook-ver-2/
neue,

5 страниц V  < 1 2 3 4 5 >
RSS Текстовая версия Сейчас: 22.1.2021, 11:48