<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Форум 'Qt' на RSDN</title>
    <link>http://rsdn.org/Forum/cpp.qt/</link>
    <description>Программирование на c++ с использованием библиотеки QT</description>
    <category>cpp</category>
    <category>qt</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN, 2001-2007</copyright>
    <webMaster>forum@rsdn.org</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://rsdn.org/rsdn.gif</url>
      <title>RSDN</title>
      <link>http://rsdn.org</link>
    </image>
    <lastBuildDate>Mon, 27 Apr 2026 09:36:10 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>QPSQL driver install</title>
		<link>http://rsdn.org/Forum/cpp.qt/9068214.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/9068214</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/9068214</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9068214</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9068214</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9068214</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Всем привет. Помогите установить драйвер для Postgres. Debian 13&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;
    QSqlDatabase db = QSqlDatabase::addDatabase(&lt;span class='str'&gt;"QPSQL"&lt;/span&gt;, &lt;span class='str'&gt;"test"&lt;/span&gt;);

    &lt;span class='com'&gt;//////&lt;/span&gt;
    QStringList drivers = QSqlDatabase::drivers();
    &lt;span class='kw'&gt;for&lt;/span&gt;(&lt;span class='kw'&gt;int&lt;/span&gt; i = 0; i &amp;lt; drivers.count(); ++i) {
        qWarning(&lt;span class='str'&gt;"%d) %s"&lt;/span&gt;, i, qPrintable(drivers.at(i)));
    }&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
выводит &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;qt.sql.qsqldatabase: QSqlDatabase: QPSQL driver not loaded&lt;br /&gt;
qt.sql.qsqldatabase: QSqlDatabase: available drivers: QSQLITE&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Целый день колупался.&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Thu, 19 Mar 2026 14:49:32 GMT</pubDate>
		
			<author>Funny Rabbit &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>QNetworkReply не видно данных</title>
		<link>http://rsdn.org/Forum/cpp.qt/9037857.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/9037857</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/9037857</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9037857</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9037857</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9037857</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вот такой код.&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;    QNetworkAccessManager *manager = &lt;span class='kw'&gt;new&lt;/span&gt; QNetworkAccessManager(&lt;span class='kw'&gt;this&lt;/span&gt;);
    QNetworkRequest request;
    request.setUrl(QUrl(ui-&amp;gt;teAddress-&amp;gt;toPlainText()));
    &lt;span class='com'&gt;//request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");&lt;/span&gt;
    QNetworkReply *reply = manager-&amp;gt;get(request);
    QByteArray bar = reply-&amp;gt;readAll();
    ui-&amp;gt;teResult-&amp;gt;setText(QString(bar));&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Не показывает ответ от сервера. В чем проблема?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Sun, 28 Dec 2025 07:58:50 GMT</pubDate>
		
			<author>Funny Rabbit &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>PySide6 Qt Creator</title>
		<link>http://rsdn.org/Forum/cpp.qt/9023387.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/9023387</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/9023387</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9023387</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9023387</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9023387</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Ради интереса попробовал создать UI приложение на Python в Creator. На форму бросаю кнопку, через контекстное меню пробую добавить слот click и "Ошибка добавления слота". Это в QT Creator+Python обработчики событий UI только вручную добавляются? Может плагины какие есть?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Wed, 26 Nov 2025 13:18:48 GMT</pubDate>
		
			<author>Serpuh &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>А почему QList - это QVector?</title>
		<link>http://rsdn.org/Forum/cpp.qt/9016869.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/9016869</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/9016869</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9016869</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9016869</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9016869</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Почему в Qt6 это одно и то же?&lt;br /&gt;
Я понимаю конечно, что вектор популярнее. Но как бы программисты же понимают разницу и когда что лучше использовать. С фига ли разрабы Qt решили, что им лучше известно, что нам надо?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Tue, 11 Nov 2025 07:45:00 GMT</pubDate>
		
			<author>Hоmunculus &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>8</slash:comments>
		
	</item>

	<item>
		<title>Про QObject::deleteLater()</title>
		<link>http://rsdn.org/Forum/cpp.qt/9002627.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/9002627</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/9002627</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9002627</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9002627</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9002627</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Собственно вопрос, в каких случаях следует применять deleteLater(), а в каких применим delete.&lt;br /&gt;
А также что делать с объектами, созданными на стеке &amp;mdash; когда их можно использовать в слотах/сигналах.&lt;br /&gt;
&lt;br /&gt;
В документации по QObject написано:&lt;br /&gt;
(&lt;a class="m" href="https://doc.qt.io/qt-6/qobject.html#dtor.QObject" target="_blank"&gt;https://doc.qt.io/qt-6/qobject.html#dtor.QObject&lt;/a&gt;)&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;QObject::~QObject()&lt;br /&gt;
Destroys the object, deleting all its child objects.&lt;br /&gt;
All signals to and from the object are automatically disconnected, and any pending posted events for the object are removed from the event queue.&lt;br /&gt;
However, it is often safer to use deleteLater() rather than deleting a QObject subclass directly.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Warning: All child objects are deleted. If any of these objects are on the stack or global, sooner or later your program will crash. We do not recommend holding pointers to child objects from outside the parent.&lt;br /&gt;
If you still do, the destroyed() signal gives you an opportunity to detect when an object is destroyed.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Warning: Deleting a QObject while pending events are waiting to be delivered can cause a crash. You must not delete the QObject directly if it exists in a different thread than the one currently executing.&lt;br /&gt;
Use deleteLater() instead, which will cause the event loop to delete the object after all pending events have been delivered to it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Фраза "exists in a different thread" по-видимому означает, что объект используется из другого потока.&lt;br /&gt;
Т.е. это не про &lt;a class="m" href="https://doc.qt.io/qt-6/qobject.html#thread-affinity" target="_blank"&gt;thread affinity&lt;/a&gt;, где используется термин "lives in" (A QObject instance is said to have a thread affinity, or that it &lt;b&gt;lives in&lt;/b&gt; a certain thread).&lt;br /&gt;
&lt;br /&gt;
Как я понимаю, проблема будет в случае, если в момент вызова delete уже выполняется один из подключенных слотов/сигналов?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Wed, 08 Oct 2025 11:24:59 GMT</pubDate>
		
			<author>m2user &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>16</slash:comments>
		
	</item>

	<item>
		<title>Q_QDOC</title>
		<link>http://rsdn.org/Forum/cpp.qt/8984596.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8984596</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8984596</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8984596</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8984596</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8984596</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;кто-то может сказать зачем эти альтернативно одарённые скрыли перегрузки в документации? Чтобы ИИ запутать?&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;#if&lt;/span&gt; !defined(Q_QDOC)
    [[nodiscard]] QByteArray toLower() &lt;span class='kw'&gt;const&lt;/span&gt; &amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; toLower_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray toLower() &amp;amp;&amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; toLower_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray toUpper() &lt;span class='kw'&gt;const&lt;/span&gt; &amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; toUpper_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray toUpper() &amp;amp;&amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; toUpper_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray trimmed() &lt;span class='kw'&gt;const&lt;/span&gt; &amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; trimmed_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray trimmed() &amp;amp;&amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; trimmed_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray simplified() &lt;span class='kw'&gt;const&lt;/span&gt; &amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; simplified_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
    [[nodiscard]] QByteArray simplified() &amp;amp;&amp;amp;
    { &lt;span class='kw'&gt;return&lt;/span&gt; simplified_helper(*&lt;span class='kw'&gt;this&lt;/span&gt;); }
&lt;span class='kw'&gt;#else&lt;/span&gt;
    [[nodiscard]] QByteArray toLower() &lt;span class='kw'&gt;const&lt;/span&gt;;
    [[nodiscard]] QByteArray toUpper() &lt;span class='kw'&gt;const&lt;/span&gt;;
    [[nodiscard]] QByteArray trimmed() &lt;span class='kw'&gt;const&lt;/span&gt;;
    [[nodiscard]] QByteArray simplified() &lt;span class='kw'&gt;const&lt;/span&gt;;
&lt;span class='kw'&gt;#endif&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Имеем такой код:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;for&lt;/span&gt; (QByteArray line: data.split(&lt;span class='str'&gt;'\n'&lt;/span&gt;))
{
    line = &lt;b&gt;std::move&lt;/b&gt;(line).&lt;b&gt;trimmed&lt;/b&gt;();&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Нормальный человек посмотрит в документацию &amp;mdash; перегрузки для &amp;amp;&amp;amp; нет &amp;mdash; уберёт std::move как излишний и на ровном месте ухудшит производительность.&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Fri, 29 Aug 2025 13:35:20 GMT</pubDate>
		
			<author>sergii.p &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>6</slash:comments>
		
	</item>

	<item>
		<title>А откуда нонче Qt качать?</title>
		<link>http://rsdn.org/Forum/cpp.qt/8936203.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8936203</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8936203</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8936203</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8936203</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8936203</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Лет пять с  Qt не работал. Сейчас решил качнуть, чтоб бесплатное, я никакие коммерческие проги не собираюсь на нем делать пока, просто эксперименты.&lt;br /&gt;
И не нашел &amp;mdash; а откуда? Ну ладно, что он Россию отфутболили,  фиг с ними, а просто бесплатная версия для белых людей из борелевского сада &amp;mdash; где?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Tue, 20 May 2025 07:29:13 GMT</pubDate>
		
			<author>Нomunculus &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>19</slash:comments>
		
	</item>

	<item>
		<title>Найти коды примеров к книжке по Qt</title>
		<link>http://rsdn.org/Forum/cpp.qt/8912014.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8912014</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8912014</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8912014</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8912014</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8912014</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Доброе время суток, уважаемые коллеги!&lt;br /&gt;
&lt;br /&gt;
Кто-нибудь мог бы подсказать &amp;mdash; где найти примеры (исзодники примеров) из книжки:&lt;br /&gt;
&lt;img border='0' src='http://files.rsdn.org/21902/Qt_book.jpg' /&gt;&lt;br /&gt;
&lt;br /&gt;
Звранее благодарен за любые подсказки!&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Mon, 17 Mar 2025 11:11:02 GMT</pubDate>
		
			<author>AlexGin &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>24</slash:comments>
		
	</item>

	<item>
		<title>Использование windeployqt при сборке win-версии на lin-хосте</title>
		<link>http://rsdn.org/Forum/cpp.qt/8880094.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8880094</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8880094</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8880094</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8880094</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8880094</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Может, кому пригодится.&lt;br /&gt;
Как известно, использовать windeployqt при сборке win-версии (mingw) на lin-хосте нельзя (с Qt6 не проверял, но с Qt5.15 так). Нельзя потому, что в qttools/src/shared/winutils/utils.cpp для !Q_OS_WIN:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;bool readPeExecutable(const QString &amp;amp;, QString *errorMessage,
                      QStringList *, unsigned *, bool *, bool, unsigned short *)
{
    *errorMessage = QStringLiteral("Not implemented.");
    return false;
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Однако, если реализовать функцию, например, так:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;bool readPeExecutable(const QString &amp;amp;peExecutableFileName, QString *errorMessage,
                      QStringList *dependentLibraries, unsigned *wordSize,
                      bool *isDebug, bool isMinGW, unsigned short *machineArch)
{
    Q_UNUSED(isMinGW);

    if (!errorMessage)
    {
        assert(false &amp;amp;&amp;amp; "errorMessage is nullptr");
        return false;
    }

    if (dependentLibraries)
    {
        dependentLibraries-&amp;gt;clear();
    }

    if (isDebug)
    {
        // separate debug info
        *isDebug = false;
    }

    //////////////////////////////////////////////////////////////////////////
    // not used
    //////////////////////////////////////////////////////////////////////////
    if (wordSize)
    {
        *wordSize = 0;
    }

    if (machineArch)
    {
        *machineArch = 0;
    }
    //////////////////////////////////////////////////////////////////////////

    if (!QFileInfo::exists(peExecutableFileName))
    {
        *errorMessage = QString::fromLatin1("Cannot open '%1': file doesn't exist").arg(peExecutableFileName);
        return false;
    }

    if (!dependentLibraries)
    {
        // nothing to do
        return true;
    }

    auto exec = [](const char* cmd, bool &amp;amp;isError) -&amp;gt; QString
    {
        isError = false;

        std::array&amp;lt;char, 128&amp;gt; buffer;
        std::string result;
        std::unique_ptr&amp;lt;FILE, decltype(&amp;amp;::pclose)&amp;gt; pipe(::popen(cmd, "r"), ::pclose);
        if (!pipe)
        {
            isError = true;
            return QString{};
        }

        while (::fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr)
        {
            result += buffer.data();
        }

        isError = WEXITSTATUS(::pclose(pipe.release())) != 0;

        return QString::fromStdString(result);
    };

    bool isError;
    QString output = exec(qPrintable(QStringLiteral("peldd ") + peExecutableFileName), isError);

    if (!isError)
    {
        *dependentLibraries = output.split(QStringLiteral("\n"), Qt::SkipEmptyParts);
    }

    return !isError;
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
то работать будет.&lt;br /&gt;
&lt;br /&gt;
Единственное условие: &lt;b&gt;peldd&lt;/b&gt; (&lt;a class="github m" href="https://github.com/gsauthof/pe-util.git" target="_blank"&gt;https://github.com/gsauthof/pe-util.git&lt;/a&gt;) должна быть в PATH.&lt;br /&gt;
Да, и ещё: при вызове windeployqt в PATH первой (или единственной) должна быть mingw-версия qmake, чтобы правильно определилась платформа.&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Thu, 09 Jan 2025 23:42:58 GMT</pubDate>
		
			<author>Conductor &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>QML Menu и методы</title>
		<link>http://rsdn.org/Forum/cpp.qt/8849800.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8849800</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8849800</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8849800</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8849800</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8849800</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Привет всем.&lt;br /&gt;
&lt;br /&gt;
Я новичек в QML и не очень понимаю как работает документация.&lt;br /&gt;
Вот у меня есть Menu:&lt;br /&gt;
&lt;a class="m" href="https://doc.qt.io/qt-6/qml-qtquick-controls-menu.html" target="_blank"&gt;https://doc.qt.io/qt-6/qml-qtquick-controls-menu.html&lt;/a&gt;&lt;br /&gt;
и там есть метод popup, но когда я вызываю этот метод, то пишет ошибку:&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;TypeError: Property 'popup' of object QPlatformMenu(0x18509a5e000) is not a function&lt;/p&gt;&lt;/blockquote&gt;
Еще я добавил код вывода свойств и методов у объекта Menu, но там тоже нет popup.&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Fri, 08 Nov 2024 19:23:51 GMT</pubDate>
		
			<author>sploid &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Раскадровка анимированного SVG</title>
		<link>http://rsdn.org/Forum/cpp.qt/8836974.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8836974</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8836974</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8836974</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8836974</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8836974</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Возможно ли средствами QSvgRenderer или еще как сделать раскадровку SVG в отдельные, например QPixmap? Но чтобы количество кадров можно была задавать самому.&lt;br /&gt;
Например, задали получить 100 QPixmap на выходе &amp;mdash; анимация при последовательном их отображении будет более плавная, 10 &amp;mdash; более грубая.&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Wed, 23 Oct 2024 12:09:24 GMT</pubDate>
		
			<author>TheBeginner &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>QFontMetrics::elidedText</title>
		<link>http://rsdn.org/Forum/cpp.qt/8818357.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8818357</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8818357</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8818357</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8818357</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8818357</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Привет знатокам Qt&lt;br /&gt;
&lt;br /&gt;
Не совсем понятно как сейчас работает&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;QString QFontMetrics::elidedText(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;text, Qt::TextElideMode mode, &lt;span class='kw'&gt;int&lt;/span&gt; width, &lt;span class='kw'&gt;int&lt;/span&gt; flags = 0) &lt;span class='kw'&gt;const&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;f the string text is wider than width, returns an elided version of the string (i.e., a string with "..." in it). Otherwise, returns the original string.&lt;br /&gt;
The mode parameter specifies whether the text is elided on the left (e.g., "...tech"), in the middle (e.g., "Tr...ch"), or on the right (e.g., "Trol...").&lt;br /&gt;
The width is specified in pixels, not characters.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
в плане вот этого:&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;The elide mark follows the &lt;b&gt;layoutdirection&lt;/b&gt;. For example, it will be on the right side of the text for right-to-left layouts if the mode is Qt::ElideLeft, and on the left side of the text if the mode is Qt::ElideRight.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Мне надо для отдельного виджета задавать layoutdirection для дочерних виджетов, но не для текста&lt;br /&gt;
Сейчас для QWidget::setLayoutDirection():&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;&lt;b&gt;Note: This method no longer affects text layout direction since Qt 4.7.&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;
OK. &lt;br /&gt;
Но тогда QFontMetrics::elidedText использует QGuiApplication::layoutDirection() или QString::isRightToLeft()?&lt;br /&gt;
В каком интересно приоритете?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Wed, 18 Sep 2024 12:26:00 GMT</pubDate>
		
			<author>TheBeginner &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>режим вертикального редактирования в QtCreator</title>
		<link>http://rsdn.org/Forum/cpp.qt/8793468.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8793468</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8793468</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8793468</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8793468</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8793468</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Как в QtCreator включить режим редактирования колонки, когда набираемый текст добавляется сразу в несколько строк и выровнен по отступу от начала строки?&lt;br /&gt;
То есть мне нужен режим который работал в QtCreator версии 4.12.&lt;br /&gt;
Сейчас я пытаюсь перейти на QtCreator 14.0.0 (ещё установлен QtCreator 11.0.3), в котором многострочный режим редактирования поломан и стал практически бесполезным.&lt;br /&gt;
&lt;br /&gt;
Альтернативой для меня может выть включение в редакторе virtual space, как в Visual Studio, если таковой режим поддерживается в QtCreator. Есть такой?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Mon, 05 Aug 2024 08:47:52 GMT</pubDate>
		
			<author>B0FEE664 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>13</slash:comments>
		
	</item>

	<item>
		<title>Видимость QGraphicsItem в разных представлениях</title>
		<link>http://rsdn.org/Forum/cpp.qt/8785874.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8785874</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8785874</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8785874</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8785874</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8785874</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Всем доброго дня!&lt;br /&gt;
&lt;br /&gt;
Возникла задача отобразить сцену в нескольких представлениях, причем в одном из представлений часть элементов должны быть скрыты. Каким образом это сделать проще всего?&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Tue, 23 Jul 2024 13:49:44 GMT</pubDate>
		
			<author>ajanov &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Проблемы с установкой 6.7.1</title>
		<link>http://rsdn.org/Forum/cpp.qt/8747350.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8747350</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8747350</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8747350</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8747350</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8747350</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;У меня интеловский макбук. Пробую через онлайн инсталлер поставить версию 6.7.1 (или 6.8.0), но в ней не запускается ни один бинарник. Не могу понять почему. При этом версия 6.7.0 поставленная с нуля &amp;mdash; работает.&lt;br /&gt;
Может кто-то сталкивался?&lt;br /&gt;
&lt;br /&gt;
Опять эппл чудит с сесурити? Архитектуру бинарей проверял, права доступа тоже.&lt;br /&gt;
В логах вижу такое, но ничего не понял:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;Timestamp                       Thread     Type        Activity             PID    TTL
2024-05-16 00:59:47.703719+0200 0x29f80    Error       0x0                  0      0    kernel: (Sandbox) Sandbox: com.apple.quicklook.ThumbnailsAg(557) deny(1) file-read-xattr /Users/saz/Qt/6.7.1/macos/bin/macdeployqt.dSYM
2024-05-16 01:07:40.288141+0200 0x2fe43    Default     0x0                  0      0    kernel: (AppleSystemPolicy) ASP: Security policy would not allow process: 16819, /Users/saz/Qt/6.7.1/macos/bin/macdeployqt6
2024-05-16 01:07:40.373697+0200 0x2fd56    Error       0x0                  533    0    XprotectService: [com.apple.xprotect:xprotect] File /Users/saz/Qt/6.7.1/macos/bin/macdeployqt6 failed on rPathCmd /Users/saz/Qt/6.7.1/macos/bin/../lib/QtCore.framework/Versions/A/QtCore (rpath resolved to: /Users/saz/Qt/6.7.1/macos/lib/QtCore.framework/Versions/A/QtCore, bundleURL: (null))
2024-05-16 01:07:40.513053+0200 0x2fd45    Default     0x0                  314    0    syspolicyd: [com.apple.syspolicy.exec:default] GK evaluateScanResult: 2, PST: (vuid: 6D2A89EA-3A05-4490-9EB1-37D16E82D551), (objid: 32810593), (team: A5GTH44LYL), (id: macdeployqt6), (bundle_id: NOT_A_BUNDLE), 0, 0, 1, 0, 8, 4, 0
2024-05-16 01:07:40.513236+0200 0x2fd45    Default     0x0                  314    0    syspolicyd: [com.apple.syspolicy.exec:default] Found provenance data on target: TA(d50407ba7b25045e, 2), PST: (vuid: 6D2A89EA-3A05-4490-9EB1-37D16E82D551), (objid: 32810593), (team: A5GTH44LYL), (id: macdeployqt6), (bundle_id: NOT_A_BUNDLE)
2024-05-16 01:07:40.513457+0200 0x2fd45    Default     0x0                  314    0    syspolicyd: [com.apple.syspolicy.exec:default] Created provenance data for target: TA(d50407ba7b25045e, 2), PST: (vuid: 6D2A89EA-3A05-4490-9EB1-37D16E82D551), (objid: 32810593), (team: A5GTH44LYL), (id: macdeployqt6), (bundle_id: NOT_A_BUNDLE)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Wed, 15 May 2024 23:42:48 GMT</pubDate>
		
			<author>SaZ &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>QtCreator + CMake + MSVC</title>
		<link>http://rsdn.org/Forum/cpp.qt/8736535.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8736535</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8736535</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8736535</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8736535</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8736535</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Коллеги! Каким образом при сборке проекта CMake в QtCreator (Windows+MSVC) отключить вывод включаемых файлов? В глазах рябит &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/frown.gif' /&gt;(&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Tue, 23 Apr 2024 10:54:48 GMT</pubDate>
		
			<author>ajanov &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Помогите с вопросом</title>
		<link>http://rsdn.org/Forum/cpp.qt/8721260.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8721260</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8721260</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8721260</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8721260</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8721260</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Здравствуйте, есть устройство, передающее в хост изображения размером 640Х480 пикселей (каждый пискель &amp;mdash; 4 байта)&lt;br /&gt;
со скоростью 50 кадров в секунду по протоколу Udp. У пикселя один байт в оттенках серого, остальные три &amp;mdash; это rgb.&lt;br /&gt;
Первая версия принимала пакеты в главном потоке, в результате чего замерзало окно приложения.&lt;br /&gt;
Перенос readPendingDatagrams в рабочую нить привел к тому, что приложение перестало принимать пакеты.&lt;br /&gt;
Wireshark видит, что пакеты приходят к хосту от устройства, а приложение пакеты не видит.&lt;br /&gt;
Вот фрагменты кода&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;class&lt;/span&gt; Worker2 : &lt;span class='kw'&gt;public&lt;/span&gt; QObject
{
    Q_OBJECT
&lt;span class='kw'&gt;public&lt;/span&gt;:
    QMutex mutex;
    QWaitCondition wtc_worker;
   &lt;span class='com'&gt;// QPixmap pixmap_copy;&lt;/span&gt;
    &lt;span class='kw'&gt;bool&lt;/span&gt; wait_cnd;
    &lt;span class='kw'&gt;bool&lt;/span&gt; b_counter;
    &lt;span class='kw'&gt;bool&lt;/span&gt; c_variable=&lt;span class='kw'&gt;true&lt;/span&gt;;
    &lt;span class='kw'&gt;int&lt;/span&gt; data_quant=81920;
    QByteArray another_qba;
    QUdpSocket *socket;
    quint16 package_num;
    quint16 str_num;
    &lt;span class='kw'&gt;int&lt;/span&gt; color_shift=0;
    &lt;span class='kw'&gt;int&lt;/span&gt; i_counter=0;
    &lt;span class='kw'&gt;explicit&lt;/span&gt; Worker2()
    {
        &lt;span class='com'&gt;//i_counter=0;&lt;/span&gt;
        another_qba.resize(2000000&lt;span class='com'&gt;/*1228800*/&lt;/span&gt;);
        socket=&lt;span class='kw'&gt;new&lt;/span&gt; QUdpSocket(&lt;span class='kw'&gt;this&lt;/span&gt;);
        &lt;span class='kw'&gt;bool&lt;/span&gt; result;
        QVariant value1;
        value1=QVariant(2000000&lt;span class='com'&gt;/*100000*/&lt;/span&gt;);
        qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"QVariant-value1 "&lt;/span&gt; &amp;lt;&amp;lt; value1.toInt();

        result=socket-&amp;gt;bind(QHostAddress(QString(&lt;span class='str'&gt;"192.168.0.1"&lt;/span&gt; &lt;span class='com'&gt;/*"127.0.0.1"*/&lt;/span&gt;)) &lt;span class='com'&gt;/*QHostAddress::AnyIPv4*/ /*LocalHost*/&lt;/span&gt;,61000&lt;span class='com'&gt;/*50011*/&lt;/span&gt;);
        QString algostr;
        algostr=QString(tr(&lt;span class='str'&gt;"bind returned %1"&lt;/span&gt;)).arg(result);
        qDebug() &amp;lt;&amp;lt; algostr;
        qDebug() &amp;lt;&amp;lt; result;
        &lt;span class='kw'&gt;if&lt;/span&gt;(result)
        {
            qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"PASS"&lt;/span&gt;;
        }
        &lt;span class='kw'&gt;else&lt;/span&gt;
        {
            qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"FAIL"&lt;/span&gt;;
            qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"error"&lt;/span&gt; &amp;lt;&amp;lt; socket-&amp;gt;error();
            qDebug() &amp;lt;&amp;lt; socket-&amp;gt;errorString().toLocal8Bit();
        }
        socket-&amp;gt;setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,value1);
        value1=socket-&amp;gt;socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);
        qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"QVariant-value1_ is "&lt;/span&gt; &amp;lt;&amp;lt; value1.toInt();
       &lt;span class='com'&gt;// do_send_result(algostr);&lt;/span&gt;
        connect(socket, &amp;amp;QUdpSocket::readyRead,&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;&lt;span class='com'&gt;/*UDPresource*/&lt;/span&gt;Worker2::readPendingDatagrams);
        qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"connect-readPendingDatagrams"&lt;/span&gt;;
        connect(&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Worker2::writeUdpData,&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Worker2::setUdpData,Qt::QueuedConnection);
        qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"connect-setUdpData"&lt;/span&gt;;
    }

    &lt;span class='kw'&gt;void&lt;/span&gt;  &lt;span class='com'&gt;/*Window::*/&lt;/span&gt;writeData(&lt;span class='kw'&gt;const&lt;/span&gt; QByteArray&amp;amp; qba)
    {
        QString str;
        QString filename(&lt;span class='str'&gt;"binaryData.bin"&lt;/span&gt;);
        QFile file;
        QDataStream dstrm;
        &lt;span class='kw'&gt;int&lt;/span&gt; data_quant=0;
        QByteArray qba_local;
        qba_local.resize(64);

        file.setFileName(filename);

        &lt;span class='kw'&gt;if&lt;/span&gt;(&lt;span class='kw'&gt;false&lt;/span&gt;==file.open(QIODevice::&lt;span class='com'&gt;/*WriteOnly*/&lt;/span&gt;Append))
        {
            str.append(&lt;span class='str'&gt;" *** ОШИБКА: не удалось открыть выбранный файл"&lt;/span&gt;);
            &lt;span class='com'&gt;/*appendtoLogListBox*/&lt;/span&gt;do_send_result(str);
            &lt;span class='kw'&gt;return&lt;/span&gt;;
        }
        dstrm.setDevice(&amp;amp;file);

        &lt;span class='com'&gt;//data_quant=dstrm.readRawData((char *)&amp;amp;buffer_vect[0],fileSize);&lt;/span&gt;
        data_quant=dstrm.writeRawData(qba.constData(),qba.size());

        file.close();

    }

&lt;span class='kw'&gt;public&lt;/span&gt; slots:
    &lt;span class='kw'&gt;void&lt;/span&gt; doWork(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;parameter) {
        QString result;
        &lt;span class='kw'&gt;bool&lt;/span&gt; booL_condition=&lt;span class='kw'&gt;true&lt;/span&gt;;
        b_counter=&lt;span class='kw'&gt;false&lt;/span&gt;;
       &lt;span class='com'&gt;// another_qba.resize(data_quant);
       // result=QString(tr("--- another_qba _cnd 2 _ is resized, size is %1")).arg(data_quant);
       // do_send_result(result);

        /* ... here is the expensive or blocking operation ... */&lt;/span&gt;
        &lt;span class='kw'&gt;while&lt;/span&gt;(booL_condition)
        {
            mutex.lock();
            wait_cnd=wtc_worker.wait(&amp;amp;mutex, 5400000&lt;span class='com'&gt;/*one_and_a_half_hour_wait*/&lt;/span&gt;);
       &lt;span class='com'&gt;// emit resultReady(result);
           // do_send_result(result);
           // mutex.unlock();&lt;/span&gt;
            &lt;span class='kw'&gt;if&lt;/span&gt;(&lt;span class='kw'&gt;false&lt;/span&gt;==wait_cnd)
            {
                result=QString(tr(&lt;span class='str'&gt;"*** wait_cnd 2 Worker _ is false"&lt;/span&gt;));
                do_send_result(result);
                mutex.unlock();
                &lt;span class='kw'&gt;continue&lt;/span&gt;;
            }
            &lt;span class='kw'&gt;else if&lt;/span&gt;(&lt;span class='kw'&gt;true&lt;/span&gt;==wait_cnd)
            {
 &lt;span class='com'&gt;//                while(c_variable)
 //                {
 //                    if(i_counter==0)
//                    prepare_generate_data();
 //                    ::Sleep(20);
 //                }&lt;/span&gt;
                observe_data();
                result=QString(tr(&lt;span class='str'&gt;"--- wait_cnd 2 _ is true"&lt;/span&gt;));
                do_send_result(result);
            ;
            &lt;span class='com'&gt;//::Sleep(30);&lt;/span&gt;
                mutex.unlock();
            }

        }
    }
&lt;span class='kw'&gt;public&lt;/span&gt;: 
    &lt;span class='kw'&gt;void&lt;/span&gt; observe_data()
    {
        QString str;&lt;span class='com'&gt;//ReadOnly&lt;/span&gt;
        QString filename(&lt;span class='str'&gt;"binaryData.bin"&lt;/span&gt;);
        QString filenameout(&lt;span class='str'&gt;"dataOut.bin"&lt;/span&gt;);
        QFile file,file_2;
        QDataStream dstrm;
        QDataStream dstrm_2;
        &lt;span class='kw'&gt;int&lt;/span&gt; data_quant=0;
        QByteArray qba_local;
        qba_local.resize(648);

        ;
        file.setFileName(filename);
        file_2.setFileName(filenameout);

        &lt;span class='kw'&gt;if&lt;/span&gt;(&lt;span class='kw'&gt;false&lt;/span&gt;==file.open(QIODevice::&lt;span class='com'&gt;/*WriteOnly*/&lt;/span&gt;&lt;span class='com'&gt;/*Append*/&lt;/span&gt;ReadOnly))
        {
            str.append(&lt;span class='str'&gt;" *** ОШИБКА 2: не удалось открыть выбранный файл"&lt;/span&gt;);
            &lt;span class='com'&gt;/*appendtoLogListBox*/&lt;/span&gt;do_send_result(str);
            &lt;span class='kw'&gt;return&lt;/span&gt;;
        }
        &lt;span class='kw'&gt;if&lt;/span&gt;(&lt;span class='kw'&gt;false&lt;/span&gt;==file_2.open(QIODevice::WriteOnly&lt;span class='com'&gt;/*Append*/&lt;/span&gt;&lt;span class='com'&gt;/*ReadOnly*/&lt;/span&gt;))
        {
            str.append(&lt;span class='str'&gt;" *** ОШИБКА 3: не удалось открыть выбранный файл"&lt;/span&gt;);
            &lt;span class='com'&gt;/*appendtoLogListBox*/&lt;/span&gt;do_send_result(str);
            &lt;span class='kw'&gt;return&lt;/span&gt;;
        }
        dstrm.setDevice(&amp;amp;file);
        dstrm_2.setDevice(&amp;amp;file_2);
        &lt;span class='kw'&gt;while&lt;/span&gt;(&lt;span class='kw'&gt;false&lt;/span&gt;==dstrm.atEnd())
        {
            data_quant=dstrm.readRawData(qba_local.data(),qba_local.size());
           &lt;span class='com'&gt;// if(data_quant!=8)
            //    qDebug() &amp;lt;&amp;lt; "data_quant != 8";
          // // file.seek(640);&lt;/span&gt;
            data_quant=dstrm_2.writeRawData(qba_local.constData(),qba_local.size()-640);
        }
        file.close();
        file_2.close();

        &lt;span class='kw'&gt;return&lt;/span&gt;;
    }

&lt;span class='kw'&gt;public&lt;/span&gt; slots:
    &lt;span class='kw'&gt;void&lt;/span&gt; readPendingDatagrams()
    {
        &lt;span class='kw'&gt;int&lt;/span&gt; size_of_data=0;
        qint64 ret_value=0;
        QByteArray buffer;
        QString str;
        &lt;span class='kw'&gt;while&lt;/span&gt;(socket-&amp;gt;hasPendingDatagrams())
        {
            size_of_data=socket-&amp;gt;pendingDatagramSize();
            &lt;span class='kw'&gt;if&lt;/span&gt;(-1==size_of_data) &lt;span class='kw'&gt;continue&lt;/span&gt;;
            buffer.resize(&lt;span class='com'&gt;/*81920*/ /*64*1024*/&lt;/span&gt; socket-&amp;gt;pendingDatagramSize());
            QHostAddress sender;
            quint16 senderPort;
            ret_value=socket-&amp;gt;readDatagram(buffer.data(),buffer.size(),&amp;amp;sender,&amp;amp;senderPort);
            &lt;span class='kw'&gt;if&lt;/span&gt;(-1==ret_value)
            {
                str=QString(tr(&lt;span class='str'&gt;"readDatagram failed"&lt;/span&gt;));
                qDebug() &amp;lt;&amp;lt; str;
                do_send_result(str);
               &lt;span class='com'&gt;// appendtoLogListBox(str);&lt;/span&gt;
                &lt;span class='kw'&gt;continue&lt;/span&gt;;
            }
            qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"Message from: "&lt;/span&gt; &amp;lt;&amp;lt; sender;
            qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"Message port: "&lt;/span&gt; &amp;lt;&amp;lt; senderPort;
            quint32 value; &lt;span class='kw'&gt;bool&lt;/span&gt; ok;
            value=sender.toIPv4Address(&amp;amp;ok);
            &lt;span class='kw'&gt;if&lt;/span&gt;(&lt;span class='kw'&gt;true&lt;/span&gt;==ok)
            {
                str=QString(tr(&lt;span class='str'&gt;"address is %1 port %2"&lt;/span&gt;)).arg(value,0,16).arg(senderPort);
                &lt;span class='com'&gt;//qDebug() &amp;lt;&amp;lt; str;
               // do_send_result(str);
    //            appendtoLogListBox(str);&lt;/span&gt;
            }
            writeData(buffer);
            emit writeUdpData(buffer);
            &lt;span class='com'&gt;//qDebug() &amp;lt;&amp;lt; "emit writeUdpData(buffer)";&lt;/span&gt;
        }
    }

    &lt;span class='kw'&gt;void&lt;/span&gt; &lt;span class='com'&gt;/*Window::*/&lt;/span&gt;setUdpData(&lt;span class='kw'&gt;const&lt;/span&gt; QByteArray&amp;amp; qba)
    {
        QString result;
        &lt;span class='kw'&gt;int&lt;/span&gt; block=0;
        &lt;span class='com'&gt;//result=QString(tr("--- Window _ setUdpData slot"));
        //appendtoLogListBox(result);
     //    do_send_result(result);&lt;/span&gt;
        quint8 kadr_num=qba.at(3);
    quint16 str_num=MAKEWORD(qba.at(5),qba.at(4));
    quint16 package_num=MAKEWORD(qba.at(7),qba.at(6));
        &lt;span class='com'&gt;// new commented at 06.03.2024
        //int data_quant=81920;&lt;/span&gt;
        &lt;span class='kw'&gt;int&lt;/span&gt; data_quant=&lt;span class='com'&gt;/*1228800*/&lt;/span&gt; 307200;
        &lt;span class='com'&gt;//qDebug() &amp;lt;&amp;lt; "receiveUdpData slot";
       // if(qba.size() %648 == 0)qDebug() &amp;lt;&amp;lt; "setUdpData qba slot";&lt;/span&gt;
        &lt;span class='kw'&gt;if&lt;/span&gt;(qba[0]==0x01 &amp;amp;&amp;amp; qba[1]==0 &amp;amp;&amp;amp; qba[2]==0 )
        &lt;span class='kw'&gt;for&lt;/span&gt;(&lt;span class='kw'&gt;int&lt;/span&gt; i=0;i&amp;lt;640;i++)
        {
            block=&lt;span class='com'&gt;/*i+*/&lt;/span&gt;8+color_shift;
            &lt;span class='kw'&gt;if&lt;/span&gt;(block&amp;lt;648)
            {
                another_qba[i_counter]=qba.at(&lt;span class='com'&gt;/*i+8*/&lt;/span&gt;block);
                i_counter++;
                color_shift+=4;
            }

        }
        &lt;span class='kw'&gt;if&lt;/span&gt;(i_counter==data_quant)
        {
            color_shift=0;
           &lt;span class='com'&gt;// wtc_worker.wakeOne();
     //        c_variable=false;&lt;/span&gt;
            prepare_generate_data();
            i_counter=0;
        }
        &lt;span class='com'&gt;//    qDebug() &amp;lt;&amp;lt; "i_counter" &amp;lt;&amp;lt; i_counter;&lt;/span&gt;
        &lt;span class='kw'&gt;return&lt;/span&gt;;
    }
&lt;span class='kw'&gt;public&lt;/span&gt;:
    &lt;span class='kw'&gt;void&lt;/span&gt; prepare_generate_data()
    {
        QString str;
       &lt;span class='com'&gt;// str.append(" --- slot button6Clicked() ");
       // appendtoLogListBox(str);&lt;/span&gt;
        QString filePath;
        QFile file;
        QDataStream dstrm;
        &lt;span class='kw'&gt;int&lt;/span&gt; n=0;
        &lt;span class='kw'&gt;int&lt;/span&gt; data_quant=0;
        std::vector&amp;lt;&lt;span class='kw'&gt;unsigned short&lt;/span&gt;&amp;gt; buffer_vect;
     &lt;span class='com'&gt;//   QSize rct_size(320,256);&lt;/span&gt;
        QSize rct_size(640,480);

       &lt;span class='com'&gt;// QPixmap myPixmap;&lt;/span&gt;

        QImage loc_img(rct_size,QImage::Format_RGB32 &lt;span class='com'&gt;/*QImage::Format_RGBX8888*/&lt;/span&gt;);

        QRgb *line;

       &lt;span class='com'&gt;// pixmap_vect.clear();

       // QBuffer hr;&lt;/span&gt;

        &lt;span class='kw'&gt;unsigned long&lt;/span&gt;&lt;span class='com'&gt;/* long */&lt;/span&gt; start_time=GetTickCount();
&lt;span class='com'&gt;//        for(int k=0;k&amp;lt;100;k++)
//        for(int i=0;i&amp;lt;256;i++)
//        {&lt;/span&gt;
            &lt;span class='kw'&gt;for&lt;/span&gt;(&lt;span class='kw'&gt;int&lt;/span&gt; y=0;y&amp;lt;loc_img.height();y++)
            {
               &lt;span class='com'&gt;// QRgb *line=reinterpret_cast&amp;lt;QRgb*&amp;gt;(loc_img.scanLine(y));&lt;/span&gt;
                line=&lt;span class='kw'&gt;static_cast&lt;/span&gt;&amp;lt;QRgb *&amp;gt;(&lt;span class='kw'&gt;static_cast&lt;/span&gt;&amp;lt;&lt;span class='kw'&gt;void&lt;/span&gt; *&amp;gt;(loc_img.scanLine(y)));
                &lt;span class='kw'&gt;for&lt;/span&gt;(&lt;span class='kw'&gt;int&lt;/span&gt; x=0;x&amp;lt;loc_img.width();x++)
                {
                    line[x]=qRgb(another_qba[n],another_qba[n],another_qba[n]);
                    n++;
                }
            }

           &lt;span class='com'&gt;// pixmap_copy=QPixmap::fromImage( loc_img);&lt;/span&gt;
            &lt;span class='kw'&gt;if&lt;/span&gt;(b_counter==&lt;span class='kw'&gt;false&lt;/span&gt;)
            {
                b_counter=&lt;span class='kw'&gt;true&lt;/span&gt;;
            }
            &lt;span class='kw'&gt;else&lt;/span&gt;
            {

                &lt;span class='com'&gt;//::Sleep(1);&lt;/span&gt;
            }
            ;
            emit sendData(loc_img&lt;span class='com'&gt;/*pixmap_copy*/&lt;/span&gt;);
&lt;span class='com'&gt;//        }&lt;/span&gt;

        &lt;span class='kw'&gt;unsigned long&lt;/span&gt;&lt;span class='com'&gt;/* long */&lt;/span&gt; end_time=GetTickCount();
        &lt;span class='kw'&gt;unsigned long&lt;/span&gt;&lt;span class='com'&gt;/* long */&lt;/span&gt; loc_delta=end_time-start_time;
&lt;span class='com'&gt;//         str=QString(tr("  --- loc_delta = %1")).arg(loc_delta);
//         do_send_result(str);
       // loc_list.clear();&lt;/span&gt;
        &lt;span class='kw'&gt;return&lt;/span&gt;;
    }
signals:
    &lt;span class='kw'&gt;void&lt;/span&gt; resultReady(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;result);
    &lt;span class='kw'&gt;void&lt;/span&gt; sendData(&lt;span class='kw'&gt;const&lt;/span&gt; &lt;span class='com'&gt;/*QPixmap*/&lt;/span&gt;QImage &amp;amp;image);
    &lt;span class='kw'&gt;void&lt;/span&gt; writeUdpData(&lt;span class='kw'&gt;const&lt;/span&gt; QByteArray &amp;amp; );
};

&lt;span class='kw'&gt;class&lt;/span&gt; Controller2 : &lt;span class='kw'&gt;public&lt;/span&gt; QObject
{
    Q_OBJECT
    QThread workerThread;
    Worker2 *worker;
   &lt;span class='com'&gt;// UDPresource *resource;&lt;/span&gt;
&lt;span class='kw'&gt;public&lt;/span&gt;:
    Controller2() {
        &lt;span class='com'&gt;/*Worker * */&lt;/span&gt;worker = &lt;span class='kw'&gt;new&lt;/span&gt; Worker2();
       &lt;span class='com'&gt;// resource = new UDPresource();&lt;/span&gt;
        worker-&amp;gt;moveToThread(&amp;amp;workerThread);
       &lt;span class='com'&gt;// resource-&amp;gt;moveToThread(&amp;amp;workerThread);&lt;/span&gt;
        connect(&amp;amp;workerThread, &amp;amp;QThread::finished, worker, &amp;amp;QObject::deleteLater);
        connect(&lt;span class='kw'&gt;this&lt;/span&gt;, &amp;amp;Controller2::operate, worker, &amp;amp;Worker2::doWork);&lt;span class='com'&gt;//main foo&lt;/span&gt;
        connect(worker, &amp;amp;Worker2::resultReady, &lt;span class='kw'&gt;this&lt;/span&gt;, &amp;amp;Controller2::handleResults);&lt;span class='com'&gt;//print&lt;/span&gt;
        connect(worker, &amp;amp;Worker2::sendData, &lt;span class='kw'&gt;this&lt;/span&gt;, &amp;amp;Controller2::handlePicture);

       &lt;span class='com'&gt;// connect(this,&amp;amp;Controller2::writeUdpPacket, resource,&amp;amp;UDPresource::writeToUdp);&lt;/span&gt;
        connect(&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Controller2::sign_UdpData, worker, &amp;amp;Worker2::receiveUdpData,Qt::QueuedConnection);
       &lt;span class='com'&gt;// connect(resource,&amp;amp;UDPresource::resultReady, this,&amp;amp;Controller2::handleResults);//print
       // // workerThread.start();&lt;/span&gt;
    }
    ~Controller2() {
        workerThread.quit();
        workerThread.wait();
    }
    &lt;span class='kw'&gt;void&lt;/span&gt; do_start(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;param )
    {
        workerThread.start();
       &lt;span class='com'&gt;// worker-&amp;gt;doWork(QString(tr(" --- Controller: (1) do_start")));
       // do_contrl_send_msg(QString(tr(" --- Controller: (2) do_start")));&lt;/span&gt;
        do_contrl_send_msg(param);
    }
    &lt;span class='kw'&gt;void&lt;/span&gt; do_contrl_send_msg(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;msg)
    {
        emit operate(msg);
    }
    &lt;span class='kw'&gt;void&lt;/span&gt; processWaitCond()
    {
        worker-&amp;gt;wtc_worker.wakeOne();
    }

&lt;span class='kw'&gt;public&lt;/span&gt; slots:
    &lt;span class='kw'&gt;void&lt;/span&gt; handleResults(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;str1)
    {
        emit writeResults(str1);
    }
    &lt;span class='kw'&gt;void&lt;/span&gt; handlePicture(&lt;span class='kw'&gt;const&lt;/span&gt; QImage&lt;span class='com'&gt;/*QPixmap*/&lt;/span&gt; &amp;amp;image)
    {
        emit writePicture(image);
    }
    &lt;span class='kw'&gt;void&lt;/span&gt; handleUdpData(&lt;span class='kw'&gt;const&lt;/span&gt; QByteArray&amp;amp; qBinArray)
    {
        emit sign_UdpData(qBinArray);
        qDebug() &amp;lt;&amp;lt; &lt;span class='str'&gt;"handleUdpData, sign_UdpData(qBinArray) is emited"&lt;/span&gt;;
    }

   &lt;span class='com'&gt;// void handleWriteData(const QByteArray&amp;amp; qBinArray)
   // {
   //     emit writeUdpPacket(qBinArray);
   // }&lt;/span&gt;

signals:
    &lt;span class='kw'&gt;void&lt;/span&gt; operate(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;);
    &lt;span class='kw'&gt;void&lt;/span&gt; writeResults(&lt;span class='kw'&gt;const&lt;/span&gt; QString &amp;amp;);
    &lt;span class='kw'&gt;void&lt;/span&gt; writePicture(&lt;span class='kw'&gt;const&lt;/span&gt; QImage&lt;span class='com'&gt;/*QPixmap*/&lt;/span&gt; &amp;amp;image);
    &lt;span class='kw'&gt;void&lt;/span&gt; sign_UdpData(&lt;span class='kw'&gt;const&lt;/span&gt; QByteArray&amp;amp; data);
   &lt;span class='com'&gt;// void writeUdpPacket(const QByteArray&amp;amp; qBinArray);&lt;/span&gt;
};&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
и&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;Window::Window()
{
    timer-&amp;gt;start(10);
    QString str,str2,string3;
    str.append(&lt;span class='str'&gt;" --- Worker"&lt;/span&gt;);
    cntrl=&lt;span class='kw'&gt;new&lt;/span&gt; Controller();
    &lt;span class='kw'&gt;if&lt;/span&gt;(nullptr!=cntrl)
    {
        cntrl-&amp;gt;do_start(str);
       &lt;span class='com'&gt;// b_blocking_res_value=false;&lt;/span&gt;
    }
    cntrl_2=&lt;span class='kw'&gt;new&lt;/span&gt; Controller2();
    str2.append(&lt;span class='str'&gt;" --- Worker2"&lt;/span&gt;);
    &lt;span class='kw'&gt;if&lt;/span&gt;(nullptr!=cntrl_2)
    {
        cntrl_2-&amp;gt;do_start(str2);
        string3=QString(tr(&lt;span class='str'&gt;"Controller2 is started"&lt;/span&gt;));
        qDebug() &amp;lt;&amp;lt; string3;
       &lt;span class='com'&gt;// b_blocking_res_value=false;&lt;/span&gt;
    }
    connect(&lt;span class='kw'&gt;this&lt;/span&gt;-&amp;gt;cntrl,&amp;amp;Controller::writeResults,&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Window::appendtoLogListBox);
   &lt;span class='com'&gt;// connect(this-&amp;gt;cntrl,&amp;amp;Controller::writePicture,this,&amp;amp;MainWindow::displayPixmap,Qt::QueuedConnection);
    //connect(button,&amp;amp;QPushButton::clicked,this,&amp;amp;Window::launch);&lt;/span&gt;
    connect(button, SIGNAL(clicked()), &lt;span class='kw'&gt;this&lt;/span&gt;, SLOT(launch()));
    connect(button_2, SIGNAL(clicked()), listWidget, SLOT(clear()));
    connect(&lt;span class='kw'&gt;this&lt;/span&gt;-&amp;gt;cntrl,&amp;amp;Controller::writePicture,&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Window::displayImage,Qt::QueuedConnection);

   &lt;span class='com'&gt;// connect(this-&amp;gt;cntrl_2,&amp;amp;Controller2::writeResults,this,&amp;amp;Window::appendtoLogListBox);&lt;/span&gt;
    connect(button_3,SIGNAL(clicked()),&lt;span class='kw'&gt;this&lt;/span&gt;,SLOT(processUdpData()));
    connect(button_4,SIGNAL(clicked()),&lt;span class='kw'&gt;this&lt;/span&gt;,SLOT(launchRead()));

    connect(&lt;span class='kw'&gt;this&lt;/span&gt;-&amp;gt;cntrl_2,&amp;amp;Controller2::writeResults,&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Window::appendtoLogListBox);&lt;span class='com'&gt;//print&lt;/span&gt;
    connect(&lt;span class='kw'&gt;this&lt;/span&gt;-&amp;gt;cntrl_2,&amp;amp;Controller2::writePicture,&lt;span class='kw'&gt;this&lt;/span&gt;,&amp;amp;Window::displayImage,Qt::QueuedConnection);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Fri, 29 Mar 2024 15:53:40 GMT</pubDate>
		
			<author>milkpot &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>21</slash:comments>
		
	</item>

	<item>
		<title>Баги в qt_add_qml_module?</title>
		<link>http://rsdn.org/Forum/cpp.qt/8641660.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8641660</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8641660</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8641660</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8641660</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8641660</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Всем доброго времени суток.&lt;br /&gt;
&lt;br /&gt;
Пытаюсь написать нормальный cmake скрипт для сборки и деплоя кутэ приложения (пока только под мак).&lt;br /&gt;
&lt;br /&gt;
Входные условия: два таргета, основное приложение &amp;mdash; чисто запускалка всей логики. Вся логика в статической либе.&lt;br /&gt;
&lt;br /&gt;
Суть проблемы: некорректно отрабатывает macdeployqt. Тулза не учитывает модули, которые я импортирую в либе. Но стоит прописать эти импорты в любом .qml файле таргета-приложения, как всё резко начинает работать.&lt;br /&gt;
&lt;br /&gt;
Чтобы не быть голословным, вот наброски: &lt;a class="github m" href="https://github.com/dsazonoff/qt-qml-cmake-testbed/tree/main" target="_blank"&gt;https://github.com/dsazonoff/qt-qml-cmake-testbed/tree/main&lt;/a&gt;&lt;br /&gt;
И соответственно коммит, который показывает проблему: &lt;a class="github m" href="https://github.com/dsazonoff/qt-qml-cmake-testbed/commit/9fb8ebf13a6664a5c4f17f5a4fedf8492a1f499d" target="_blank"&gt;https://github.com/dsazonoff/qt-qml-cmake-testbed/commit/9fb8ebf13a6664a5c4f17f5a4fedf8492a1f499d&lt;/a&gt;&lt;br /&gt;
Если же &lt;tt&gt;import QtQuick.Dialogs&lt;/tt&gt; сделать внутри таргета приложения, а не статической либы, то всё ок.&lt;br /&gt;
&lt;br /&gt;
Мысли вслух:&lt;br /&gt;
&amp;mdash; Где-то что-то не так делаю с target_link_libraries и областью видимости (PRIVATE/PUBLIC)&lt;br /&gt;
&amp;mdash; Я как-то не так юзаю [qt_add_qml_module](&lt;a class="github m" href="https://github.com/dsazonoff/qt-qml-cmake-testbed/commit/4ed7d9fc248966e6c5fa3019fdfdd641c35fd8c7#diff-c2087cfe428fc15a62ae4ba4a7c02fe67e0216a6993335831102ddef095d592d" target="_blank"&gt;https://github.com/dsazonoff/qt-qml-cmake-testbed/commit/4ed7d9fc248966e6c5fa3019fdfdd641c35fd8c7#diff-c2087cfe428fc15a62ae4ba4a7c02fe67e0216a6993335831102ddef095d592d&lt;/a&gt;)&lt;br /&gt;
&amp;mdash; Я что-то ещё не понимаю про импорт и qml модули...&lt;br /&gt;
&lt;br /&gt;
Определённые ограничения:&lt;br /&gt;
&amp;mdash; Я не рассматриваю Qt ниже версий 6.6, ибо в последних есть много удобных плюшек&lt;br /&gt;
&amp;mdash; Пока актуален только мак, но оно всё более-менее кросс-платформенно с xxxxdeployqt&lt;br /&gt;
&amp;mdash; Не надо предлагать в коде дёргать всякие addImportPath &amp;mdash; оно должно само отрабатывать (и отрабатывает для приложений, а не либ), но если ошибка в этом &amp;mdash; то укажите&lt;br /&gt;
&amp;mdash; Не хочется прибегать ни к каким костылям при деплое&lt;br /&gt;
&lt;br /&gt;
Собственно я не поленился сделать репо, которое собирает hello world для отладки, возможно кто-то тыкнет меня в ошибку, а то я уже несколько недель мучаюсь.&lt;br /&gt;
&lt;br /&gt;
P.S. по сути это продолжение &lt;a class=" tips m" href="https://rsdn.org/forum/cpp.qt/8570110.1" rel="#GknWrQ" target="_blank" title="Qt(5) и vcpkg"&gt;вот этого&lt;div class="tooltip" id="GknWrQ"&gt;Автор: SaZ&lt;br /&gt;Дата: 28.07.23&lt;/div&gt;&lt;/a&gt; топика. По поводу деплоя кутэ5 всё печально. Самые легкогуглящиеся решения требуют питон2 и уже морально устарели. На многих проектах используют самописные костыли.&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Mon, 27 Nov 2023 00:01:50 GMT</pubDate>
		
			<author>SaZ &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>COW and thread safety in Qt</title>
		<link>http://rsdn.org/Forum/cpp.qt/8615480.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8615480</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8615480</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8615480</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8615480</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8615480</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Тут &lt;a class=" tips m" href="https://rsdn.org/forum/flame.comp/8614843.1" rel="#KSubJG" target="_blank" title="Про указатели в Qt &amp;mdash; нравится ли вам?"&gt;коллега задает вопросы&lt;div class="tooltip" id="KSubJG"&gt;Автор: andyp&lt;br /&gt;Дата: 09.10.23&lt;/div&gt;&lt;/a&gt; по потоко-безапасности и копировании-при-записи (COW or implicit sharing) в Qt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;TLDR:&lt;/b&gt; Для &lt;i&gt;хрестоматийного&lt;/i&gt; использования Qt (когда в одном потоке есть источник данных (сеть/диск/и т.д.) и какая-то обработка в другом потоке, например отображение) можно обойтись без явной синхронизации данных и пользоваться бонусами COW. &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Что ты под копированием данных для объектов с COW имеешь в виду?&lt;/p&gt;&lt;/blockquote&gt;
Документация отвечат очень хорошо:&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;A deep copy implies duplicating an object. A shallow copy is a reference copy, i.e. just a pointer to a shared data block. Making a deep copy can be expensive in terms of memory and CPU. Making a shallow copy is very fast, because it only involves setting a pointer and incrementing the reference count.&lt;br /&gt;
Object assignment (with operator=()) for implicitly shared objects is implemented using shallow copies.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Делается ли deep или shallow copy и в каком потоке это делается, если emit сигнала и вызов слота происходят в разных потоках?&lt;/p&gt;&lt;/blockquote&gt;
Тут надо отделить копирование от потока выполнения кода (слота).&lt;br /&gt;
&lt;ul style='margin-top:0; margin-bottom:0;'&gt;* Копирование происходит "in all member functions that change the internal data", т.е. во всех не const методах. В каком потоке это происходит не важно.&lt;br /&gt;
* Поток, в котором выполняется слот, зависит от типа соединения, по умолчанию "The slot is executed in the receiver's thread". &lt;a class="m" href="https://doc.qt.io/qt-6/qt.html#ConnectionType-enum" target="_blank"&gt;Подробнее тут&lt;/a&gt;.&lt;/ul&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Есть ли гарантия, что это делается единообразно во всех релизах Qt начиная с N.K?&lt;/p&gt;&lt;/blockquote&gt;
Этот механизм работает с Qt 4, т.е. 20 лет.&lt;br /&gt;
&lt;br /&gt;
Я постарался сделать минимальный пример который демострирует поведение Qt классов с COW при использовании в разных потоках.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								CMakeLists.txt			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;cmake_minimum_required(VERSION 3.14)

project(cow LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)

add_executable(cow
    main.cpp
)
target_link_libraries(cow Qt${QT_VERSION_MAJOR}::Core)&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								main.cpp			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;#include &amp;lt;QtCore/QCoreApplication&amp;gt;
#include &amp;lt;QtCore/QDebug&amp;gt;
#include &amp;lt;QtCore/QScopedPointer&amp;gt;
#include &amp;lt;QtCore/QThread&amp;gt;
#include &amp;lt;QtCore/QTimer&amp;gt;

#define PRINT_FUNCTION_INFO qDebug() &amp;lt;&amp;lt; Q_FUNC_INFO &amp;lt;&amp;lt; this &amp;lt;&amp;lt; QThread::currentThread();

struct Foo {
    Foo()                       { PRINT_FUNCTION_INFO }
    Foo(const Foo&amp;amp;)             { PRINT_FUNCTION_INFO }
    Foo(Foo&amp;amp;&amp;amp;)                  { PRINT_FUNCTION_INFO }
    Foo&amp;amp; operator=(const Foo&amp;amp;)  { PRINT_FUNCTION_INFO return *this; }
    Foo&amp;amp; operator=(Foo&amp;amp;&amp;amp;)       { PRINT_FUNCTION_INFO return *this; }
    ~Foo()                      { PRINT_FUNCTION_INFO }
};

class Bar : public QObject {
    Q_OBJECT

public:
    explicit Bar(QObject* parent = nullptr) : QObject(parent) {}
    void emitSignals() { emit dataByValueSignal(foos); }
    QVector&amp;lt;Foo&amp;gt; foos;

signals:
    void dataByValueSignal(QVector&amp;lt;Foo&amp;gt;);

public slots:
    void dataByValue(QVector&amp;lt;Foo&amp;gt; foo)
    {
        // It is ok to pass "big" QVector object by value because of COW (but const reference is still better).
        // Also can safely modify copy of 'COW class' transfered with signals and slots in another thread.
        // Using non-const methods will make deep copy of QVector content behind the scene.
        foo.append(Foo()); // &amp;lt;- comment out to see effect of COW
        qDebug() &amp;lt;&amp;lt; Q_FUNC_INFO &amp;lt;&amp;lt; foo.size();
    }
};

int main(int argc, char *argv[])
{
    // main thread
    const Bar bar;

    // this code will run in another thread
    auto producer = [&amp;amp;bar] {
        Bar anotherBar;
        anotherBar.foos.append(Foo());

        qRegisterMetaType&amp;lt;QVector&amp;lt;Foo&amp;gt;&amp;gt;("QVector&amp;lt;Foo&amp;gt;");
        // connect to object in another thread and pass object with COW by value
        // no copies of QVector *content* at this point and thread safe
        QObject::connect(&amp;amp;anotherBar, &amp;amp;Bar::dataByValueSignal, &amp;amp;bar, &amp;amp;Bar::dataByValue);
        anotherBar.emitSignals();

        // can safely modify local copy of Qt class
        QThread::sleep(1);
        anotherBar.foos.pop_front();
        qDebug() &amp;lt;&amp;lt; QThread::currentThread() &amp;lt;&amp;lt; anotherBar.foos.size();
    };

    const QScopedPointer&amp;lt;QThread&amp;gt; thread(QThread::create(producer));
    const QCoreApplication a(argc, argv);
    QObject::connect(thread.data(), &amp;amp;QThread::finished, qApp, &amp;amp;QCoreApplication::quit);
    QTimer::singleShot(0, qApp, [&amp;amp;thread]{thread-&amp;gt;start();}); // start thread when event loop is running
    return qApp-&amp;gt;exec();
}

#include "main.moc"&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
Ссылки по теме:&lt;br /&gt;
&lt;a class="m" href="https://doc.qt.io/qt-5/implicit-sharing.html" target="_blank"&gt;implicit sharing&lt;/a&gt; &lt;br /&gt;
&lt;a class="m" href="https://doc.qt.io/qt-5/threads-modules.html#threads-and-implicitly-shared-classes" target="_blank"&gt;Threads and Implicitly Shared Classes&lt;/a&gt;&lt;br /&gt;
&lt;a class="m" href="https://doc.qt.io/qt-5/containers.html#implicit-sharing-iterator-problem" target="_blank"&gt;Implicit sharing iterator problem&lt;/a&gt;&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Tue, 10 Oct 2023 09:39:03 GMT</pubDate>
		
			<author>Skorodum &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>18</slash:comments>
		
	</item>

	<item>
		<title>Стандартные темы КДЕ и Qt</title>
		<link>http://rsdn.org/Forum/cpp.qt/8610382.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/cpp.qt/8610382</guid>
		<comments>http://rsdn.org/Forum/cpp.qt/8610382</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8610382</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8610382</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8610382</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Приветсвую,&lt;br /&gt;
&lt;br /&gt;
вводные&lt;br /&gt;
-кубунту (КДЕ соответственно)&lt;br /&gt;
-Qt5+ (но лучше для минимума &amp;mdash; 5)&lt;br /&gt;
&lt;br /&gt;
есть ли возможность в Qt указать, чтобы ВСЕ приложение использовало светлую тему, если в системе установлена темная?&lt;br /&gt;
&lt;br /&gt;
вопрос с чем связан&lt;br /&gt;
сам я уже давно не пишу под десктопы и Qt пользовал больше 8 лет назад&lt;br /&gt;
понадобился опенсорсный софт, который с радостью подхватывает часть темного стиля (у меня в системе) и с радостью же не подхватывает остальное&lt;br /&gt;
т.е. черный\серый текст на черном фоне, или белый\серый на белом&lt;br /&gt;
&lt;br /&gt;
часть софта я победил назначив насильно стили нужным виджетам&lt;br /&gt;
но столкнулся с еще одной софтиной, которая на питоне с PyQt и тут уже сил\терпения не хватяет&lt;br /&gt;
нашел для питона qt-material &amp;mdash; он умеет насильно предустановленные темы ставить&lt;br /&gt;
но оно поменяло и стандартные диалоги (например, открытия файла), что совсем не нужно&lt;br /&gt;
&lt;br /&gt;
в общем, вопрос такой&lt;br /&gt;
как заставить Qt приложение использовать светлую тему, даже если в системе включена темная?&lt;br /&gt;
ну, или посоветуйте, как вообще можно выйти из этой ситуации&lt;/div&gt;
				
		</description>
		
		<category>cpp</category><category>qt</category>
		<pubDate>Sun, 01 Oct 2023 16:47:22 GMT</pubDate>
		
			<author>lazyasZ &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>
</channel>
</rss>
