<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=412496&amp;view=findpost&amp;p=3767568</guid>
        <pubDate>Mon, 23 Apr 2018 15:31:42 +0000</pubDate>
        <title>Как добавить QWidget в модуль?</title>
        <link>https://forum.sources.ru/index.php?showtopic=412496&amp;view=findpost&amp;p=3767568</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=412496&view=findpost&p=3767546'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>23.zaycev &#064; <time class="tag-quote__quoted-time" datetime="2018-04-23T15:59:32+03:00">23.04.18, 12:59</time></span><div class='quote '>Можете что посоветовать? Спасибо.</div></div><br>
Проект собирался с помощью &quot;Build tools: g++ make cmake&quot;, поэтому придется файлы CMakeLists.txt править вручную. Примеры подобного лучше поискать в сети. Например, такое ИМХО пойдет для старта: &quot;<a class='tag-url' href='https://stackoverflow.com/questions/25989448/implementing-qt-project-through-cmake' target='_blank'>Implementing Qt project through CMake</a>&quot;.]]></description>
        <author>JoeUser</author>
        <category>Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=412496&amp;view=findpost&amp;p=3767546</guid>
        <pubDate>Mon, 23 Apr 2018 12:59:32 +0000</pubDate>
        <title>Как добавить QWidget в модуль?</title>
        <link>https://forum.sources.ru/index.php?showtopic=412496&amp;view=findpost&amp;p=3767546</link>
        <description><![CDATA[23.zaycev: Здравствуйте. При разборе очередного модуля нужно добавить UI-интерфейс для добавления нужных элементов. Можете что посоветовать? Спасибо.<br>
<br>
main.cpp<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &quot;VeyonCore.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">#include &#60;QCoreApplication&#62;</div><div class="code_line">#include &#60;QAbstractNativeEventFilter&#62;</div><div class="code_line">#include &#60;QWidget&#62;</div><div class="code_line">#include &#60;QMainWindow&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#include &quot;WindowsService.h&quot;</div><div class="code_line">#include &quot;ComputerControlServer.h&quot;</div><div class="code_line">#include &quot;VeyonConfiguration.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">#ifdef VEYON_BUILD_WIN32</div><div class="code_line">static HANDLE hShutdownEvent = NULL;</div><div class="code_line">&nbsp;</div><div class="code_line">// event filter which makes ICA recognize logoff events etc.</div><div class="code_line">class LogoffEventFilter : public QAbstractNativeEventFilter</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;virtual bool nativeEventFilter( const QByteArray&amp; eventType, void *message, long *result)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Q_UNUSED(eventType);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Q_UNUSED(result);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DWORD winMsg = ( ( MSG *) message )-&#62;message;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( winMsg == WM_QUERYENDSESSION )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;qInfo( &quot;Got WM_QUERYENDSESSION - initiating server shutdown&quot; );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// tell UltraVNC server to quit</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetEvent( hShutdownEvent );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">#endif</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main( int argc, char **argv )</div><div class="code_line">{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// decide in what mode to run</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( argc &#62;= 2 )</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">#ifdef VEYON_BUILD_WIN32</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for( int i = 1; i &#60; argc; ++i )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if( QString( argv[i] ).toLower().contains( &quot;service&quot; ) )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WindowsService winService( &quot;VeyonService&quot;, &quot;-service&quot;, &quot;Veyon Service&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;QString(), argc, argv );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if( winService.evalArgs( argc, argv ) )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">#endif</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;QCoreApplication app( argc, argv );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;VeyonCore core( &amp;app, QStringLiteral(&quot;Service&quot;) );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// parse arguments</div><div class="code_line">&nbsp;&nbsp; &nbsp;QStringListIterator argIt( app.arguments() );</div><div class="code_line">&nbsp;&nbsp; &nbsp;argIt.next();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while( argc &#62; 1 &amp;&amp; argIt.hasNext() )</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const QString a = argIt.next().toLower();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( a == QStringLiteral(&quot;-session&quot;) &amp;&amp; argIt.hasNext() )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int sessionId = argIt.next().toUInt();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if( sessionId &#62; 0 )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;core.config().setPrimaryServicePort( core.config().primaryServicePort() + sessionId );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;core.config().setVncServerPort( core.config().vncServerPort() + sessionId );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;core.config().setFeatureWorkerManagerPort( core.config().featureWorkerManagerPort() + sessionId );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">#ifdef VEYON_BUILD_WIN32</div><div class="code_line">&nbsp;&nbsp; &nbsp;hShutdownEvent = OpenEvent( EVENT_ALL_ACCESS, false, L&quot;Global\SessionEventUltra&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp;if( !hShutdownEvent )</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// no global event available already as we&#39;re not running under the</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// control of the veyon service supervisor?</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( GetLastError() == ERROR_FILE_NOT_FOUND )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;qWarning( &quot;Creating session event&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// then create our own event as otherwise the VNC server main loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// will eat 100% CPU due to failing WaitForSingleObject() calls</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hShutdownEvent = CreateEvent( NULL, false, false, L&quot;Global\SessionEventUltra&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;qWarning( &quot;Could not open or create session event&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;LogoffEventFilter eventFilter;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;app.installNativeEventFilter( &amp;eventFilter );</div><div class="code_line">#endif</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto server = new ComputerControlServer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;server-&#62;start();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;qInfo( &quot;Exec&quot; );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int ret = app.exec();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete server;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;qInfo( &quot;Exec Done&quot; );</div><div class="code_line">&nbsp;</div><div class="code_line">#ifdef VEYON_BUILD_WIN32</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle( hShutdownEvent );</div><div class="code_line">#endif</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return ret;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
P.S.: исходный проект называется <a class='tag-url' href='https://github.com/veyon/veyon/tree/v4.0.4' target='_blank'>Veyon rev.4.0.4</a>, модуль service. Собирался проект в Qt через CMakeLists.txt. Добавлять файл в проект(к примеру, UI) отказывается(ПКМ-&gt;&quot;Добавить новый...&quot;).]]></description>
        <author>23.zaycev</author>
        <category>Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets</category>
      </item>
	
      </channel>
      </rss>
	