به نام خدا : تو این مطلب از اولین مطلب آموزش Qt میخوام به آموزش ارتباط سریال در Qt بپردازم، البته این مطلب رو قرار بود خیلی وقت پیش بزارم ولی خب هر دفه مشکلی رخ داد تا الان که فیلمش رو ضبط کردم و تا شب یا فردا آپلود میشه و مطلب میره تو سایت.
آموزش ساخت نرم افزار ارتباط سریال با Qt
این پروژه دارای فایل های مقابل هستش :
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
QtTerminal2.pro
QtTerminal2.pro.user
که در زیر کد هر فایل رو براتون قرار میدم :
1 2 3 4 5 6 7 8 9 |
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } |
QtTerminal2.pro
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#------------------------------------------------- # # Project created by QtCreator 2016-08-06T10:58:01 # #------------------------------------------------- QT += core gui serialport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = QtTerminal2 TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui |
mainwindow.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_ClosePort_pushButton_clicked(); void ShowDitail(QString Name); void ReadData(); void on_Refresh_pushButton_clicked(); void on_SendData_pushButton_clicked(); void on_OpenPort_pushButton_clicked(); void on_ComPort_comboBox_currentTextChanged(const QString &arg1); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H |
mainwindow.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> QSerialPort::StopBits StopBits; QSerialPort::Parity Parity; QSerialPort::DataBits DataBits; QSerialPort SerialPort; QSerialPortInfo SerialPortInfo; #include <QMessageBox> #include <QIODevice> MainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->SendData_lineEdit, SIGNAL(returnPressed()), this, SLOT(on_SendData_pushButton_clicked())); connect( &SerialPort, SIGNAL(readyRead()), this, SLOT(ReadData()) ); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_ClosePort_pushButton_clicked() { if(SerialPort.isOpen()) { QString PortNameString = SerialPort.portName(); SerialPort.close(); ShowDitail(PortNameString); QPalette palette; palette.setColor( QPalette::WindowText, "RED" ); ui->statusBar->setPalette( palette ); ui->statusBar->showMessage("Port is Closed", 3000); } else { QMessageBox::information(this, "Error", "There Are no Port Opened."); } } void MainWindow::ShowDitail(QString Name) { QSerialPortInfo SerialPortInfo2(Name); ui->PortInfo_textEdit->setText( " description = " + SerialPortInfo2.description() + "\n isBusy = " + QString::number(SerialPortInfo2.isBusy()) + "\n Port Name = " + SerialPortInfo2.portName() + "\n productIdentifier = " + QString::number(SerialPortInfo2.productIdentifier()) + "\n serialNumber = " + SerialPortInfo2.serialNumber() + "\n systemLocation = " + SerialPortInfo2.systemLocation() + "\n vendorIdentifier = " + SerialPortInfo2.vendorIdentifier() ); } void MainWindow::on_Refresh_pushButton_clicked() { ui->ComPort_comboBox->clear(); QList<QSerialPortInfo> AvailablePorts = SerialPortInfo.availablePorts(); Q_FOREACH(SerialPortInfo, AvailablePorts) { ui->ComPort_comboBox->addItem( SerialPortInfo.portName() ); } } void MainWindow::on_SendData_pushButton_clicked() { if(SerialPort.isOpen()) { QString Data = ui->SendData_lineEdit->text(); if(Data=="") return; ui->SendData_lineEdit->setText(""); ui->ShowData_textEdit->insertHtml( "<font color=\"blue\">" + Data + "</font>" + "<br>" ); QByteArray DataSend; DataSend.append(Data); SerialPort.write(DataSend); } else { QMessageBox::information(this, "Error", "No port Opened"); } } void MainWindow::on_OpenPort_pushButton_clicked() { QString ComPortString = ui->ComPort_comboBox->itemText( ui->ComPort_comboBox->currentIndex() ); if(ComPortString == NULL) { QMessageBox::information(this, "Error", "No port selected"); return; } QString BaudRateString = ui->BaudRate_comboBox->itemText( ui->BaudRate_comboBox->currentIndex() ); QString SettingString = ui->Setting_comboBox->itemText( ui->Setting_comboBox->currentIndex() ); if(SettingString[0] == '5') DataBits = SerialPort.Data5; else if(SettingString[0] == '6') DataBits = SerialPort.Data6; else if(SettingString[0] == '7') DataBits = SerialPort.Data7; else if(SettingString[0] == '8') DataBits = SerialPort.Data8; if(SettingString[1] == 'N') Parity = SerialPort.NoParity; else if(SettingString[1] == 'E') Parity = SerialPort.EvenParity; else if(SettingString[1] == 'O') Parity = SerialPort.OddParity; if(SettingString[2] == '1') StopBits = SerialPort.OneStop; else if(SettingString[2] == '2') StopBits = SerialPort.TwoStop; SerialPort.setBaudRate(BaudRateString.toInt()); SerialPort.setPortName(ComPortString); SerialPort.setStopBits(StopBits); SerialPort.setParity(Parity); SerialPort.setDataBits(DataBits); QSerialPortInfo SerialPortInfo2(ComPortString); if(!SerialPort.isOpen()) { if(!SerialPortInfo2.isBusy()) { SerialPort.open(QIODevice::ReadWrite); ShowDitail(ComPortString); QPalette palette; palette.setColor( QPalette::WindowText, "GREEN" ); ui->statusBar->setPalette( palette ); ui->statusBar->showMessage(ComPortString + " is Opened", 3000); } else { QMessageBox::information(this, "Error", "port is Busy"); } } else { QMessageBox::information(this, "Error", "This Port is Open By This Softwar"); } } void MainWindow::ReadData() { QByteArray DataRead = SerialPort.readAll(); ui->ShowData_textEdit->insertHtml( "<font color=\"red\">" + DataRead +"</font>" + "<br>" ); } void MainWindow::on_ComPort_comboBox_currentTextChanged(const QString &arg1) { ShowDitail(arg1); } |
mainwindow.ui
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>428</width> <height>464</height> </rect> </property> <property name="windowTitle"> <string>DMF313.IR</string> </property> <widget class="QWidget" name="centralWidget"> <widget class="QLineEdit" name="SendData_lineEdit"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>351</width> <height>20</height> </rect> </property> </widget> <widget class="QTextEdit" name="ShowData_textEdit"> <property name="geometry"> <rect> <x>10</x> <y>40</y> <width>411</width> <height>211</height> </rect> </property> </widget> <widget class="QTextEdit" name="PortInfo_textEdit"> <property name="geometry"> <rect> <x>10</x> <y>290</y> <width>411</width> <height>151</height> </rect> </property> </widget> <widget class="QPushButton" name="SendData_pushButton"> <property name="geometry"> <rect> <x>370</x> <y>10</y> <width>51</width> <height>23</height> </rect> </property> <property name="text"> <string>Send</string> </property> </widget> <widget class="QPushButton" name="Refresh_pushButton"> <property name="geometry"> <rect> <x>222</x> <y>260</y> <width>51</width> <height>23</height> </rect> </property> <property name="text"> <string>Refresh</string> </property> </widget> <widget class="QPushButton" name="OpenPort_pushButton"> <property name="geometry"> <rect> <x>282</x> <y>260</y> <width>61</width> <height>23</height> </rect> </property> <property name="text"> <string>OpenPort</string> </property> </widget> <widget class="QComboBox" name="ComPort_comboBox"> <property name="geometry"> <rect> <x>142</x> <y>260</y> <width>71</width> <height>22</height> </rect> </property> </widget> <widget class="QPushButton" name="ClosePort_pushButton"> <property name="geometry"> <rect> <x>352</x> <y>260</y> <width>61</width> <height>23</height> </rect> </property> <property name="text"> <string>ClosePort</string> </property> </widget> <widget class="QComboBox" name="Setting_comboBox"> <property name="geometry"> <rect> <x>12</x> <y>260</y> <width>51</width> <height>22</height> </rect> </property> <item> <property name="text"> <string>8N1</string> </property> </item> <item> <property name="text"> <string>8N2</string> </property> </item> <item> <property name="text"> <string>8E1</string> </property> </item> <item> <property name="text"> <string>8E2</string> </property> </item> <item> <property name="text"> <string>8O1</string> </property> </item> <item> <property name="text"> <string>8O2</string> </property> </item> </widget> <widget class="QComboBox" name="BaudRate_comboBox"> <property name="geometry"> <rect> <x>70</x> <y>260</y> <width>61</width> <height>22</height> </rect> </property> <item> <property name="text"> <string>1200</string> </property> </item> <item> <property name="text"> <string>2400</string> </property> </item> <item> <property name="text"> <string>4800</string> </property> </item> <item> <property name="text"> <string>9600</string> </property> </item> <item> <property name="text"> <string>19200</string> </property> </item> <item> <property name="text"> <string>38400</string> </property> </item> <item> <property name="text"> <string>57600</string> </property> </item> <item> <property name="text"> <string>115200</string> </property> </item> </widget> </widget> <widget class="QStatusBar" name="statusBar"/> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui> |
QtTerminal2.pro.user
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <!-- Written by QtCreator 3.5.1, 2016-08-06T15:42:33. --> <qtcreator> <data> <variable>EnvironmentId</variable> <value type="QByteArray">{ac5c5efc-1a2e-4faf-9e89-533d48c969c8}</value> </data> <data> <variable>ProjectExplorer.Project.ActiveTarget</variable> <value type="int">0</value> </data> <data> <variable>ProjectExplorer.Project.EditorSettings</variable> <valuemap type="QVariantMap"> <value type="bool" key="EditorConfiguration.AutoIndent">true</value> <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value> <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value> <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> <value type="QString" key="language">Cpp</value> <valuemap type="QVariantMap" key="value"> <value type="QByteArray" key="CurrentPreferences">CppGlobal</value> </valuemap> </valuemap> <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1"> <value type="QString" key="language">QmlJS</value> <valuemap type="QVariantMap" key="value"> <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value> </valuemap> </valuemap> <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value> <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value> <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> <value type="int" key="EditorConfiguration.IndentSize">4</value> <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value> <value type="int" key="EditorConfiguration.MarginColumn">80</value> <value type="bool" key="EditorConfiguration.MouseHiding">true</value> <value type="bool" key="EditorConfiguration.MouseNavigation">true</value> <value type="int" key="EditorConfiguration.PaddingMode">1</value> <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> <value type="bool" key="EditorConfiguration.ShowMargin">false</value> <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value> <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> <value type="int" key="EditorConfiguration.TabSize">8</value> <value type="bool" key="EditorConfiguration.UseGlobal">true</value> <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> <value type="bool" key="EditorConfiguration.cleanIndentation">true</value> <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> <value type="bool" key="EditorConfiguration.inEntireDocument">false</value> </valuemap> </data> <data> <variable>ProjectExplorer.Project.PluginSettings</variable> <valuemap type="QVariantMap"/> </data> <data> <variable>ProjectExplorer.Project.Target.0</variable> <valuemap type="QVariantMap"> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.5.1 MSVC2013 64bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.5.1 MSVC2013 64bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.55.win64_msvc2013_64_kit</value> <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value> <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/Mahdi/Desktop/QtTerminal2/build-QtTerminal2-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug</value> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value> <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> </valuemap> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> </valuemap> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> </valuemap> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> </valuemap> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> </valuemap> <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> </valuemap> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/Mahdi/Desktop/QtTerminal2/build-QtTerminal2-Desktop_Qt_5_5_1_MSVC2013_64bit-Release</value> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value> <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> </valuemap> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> </valuemap> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> </valuemap> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/> <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> </valuemap> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> </valuemap> <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> </valuemap> <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value> <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> </valuemap> <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> </valuemap> <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/> <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value> <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value> <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value> <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value> <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value> <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value> <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value> <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value> <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value> <value type="int" key="Analyzer.Valgrind.NumCallers">25</value> <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/> <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value> <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value> <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value> <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds"> <value type="int">0</value> <value type="int">1</value> <value type="int">2</value> <value type="int">3</value> <value type="int">4</value> <value type="int">5</value> <value type="int">6</value> <value type="int">7</value> <value type="int">8</value> <value type="int">9</value> <value type="int">10</value> <value type="int">11</value> <value type="int">12</value> <value type="int">13</value> <value type="int">14</value> </valuelist> <value type="int" key="PE.EnvironmentAspect.Base">2</value> <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">QtTerminal2</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">QtTerminal22</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Mahdi/Desktop/QtTerminal2/QtTerminal2.pro</value> <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value> <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">QtTerminal2.pro</value> <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value> <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value> <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value> <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseMultiProcess">false</value> <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> </valuemap> <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> </valuemap> </data> <data> <variable>ProjectExplorer.Project.TargetCount</variable> <value type="int">1</value> </data> <data> <variable>ProjectExplorer.Project.Updater.FileVersion</variable> <value type="int">18</value> </data> <data> <variable>Version</variable> <value type="int">18</value> </data> </qtcreator> |
کلاس های دیگر مورد نیاز در پروژه این مطلب رو هم در زیر میزارم :
اینم نمایی از نرمافزار ارتباط سریال ساخته شده به کمک Qt
فیلم های آموزش ارتباط سریال در Qt
توجه : دوستان اگه از این نوع مطالب ارتباط میکرو با سیستم عامل های دیگه (اندروید – ویندوز – لینوکس) حمایت کنند که این جور مطالب ادامه دار خواهد بود وگرنه شرمنده بعضی دوستان میشم
هزینه این مطلب : 10 تا صلوات برای سلامتی امام خامنه ای(حفظه الله) و دعا برای خوب شدن مدافعان حرم(الان یکی تو شهر ما بنده خدا موجی شده، تو سوریه بود و تو چند متری ماشین، داعشی ها ماشین رو با تاو میزنن! رفیقاش شهید میشن و بنده خدا خودش موجی)
تا مطلب بعد یا علی.
مهمان
سلام خسته نباشی
برای ارسال و دریافت فایل های چند گیگ باید چکار کنم خیلی مهمه ممنون میشم راهنمایی کنید
مهمان
با سلام امکانش هست لینک دانلود این آموزش را مجدداً قرار دهید. با تشکر از شما
مهمان
با عرض سلام. ببخشید من این ترم پروژه کارشناسی دارم و استادم گفته که tcp ip با کیوتی طراحی باید کنم یعنی داده ارسال کنیم و دریافت کنیم میخواستم بدونم این پروژه ای که شما طراحی کردید همینه؟
اگه نیست میتونید راهنماییم کنید چون گفت که ظاهرا تو خود کیوتی هم هستش.
با تشکر
مهمان
فقط اینو می گم
دمت گرم…………
مهمان
سلام بنده تازه مطالبتونا دیدم و خیلی عالی هست وتشکر کنم بابت مطالبتون و فیلم اموزشی و نیت خالصتون
اجرکم عندالله
ولی یه انتقاد صریح
طرز اموزشتون در فیلم اصلا مناسب نیست و اصلا نمیدونید از کجا شروع کنید یه جا میگید ویژوال استودیو باید دانلود کنید بعد از creator استفاده میکنید وسطای اموزش تازه میگید اسم این نرم افزار فلانه تلفظ انگلیستون هم کمی ضعیفه
اینا فقط بابت دلسوزی و انتقاد دوستانه میگم انشالله اموزشهاتون روزبه روز بهتر بشه
بازم خیلی خیلی تشکر میکنم امثال شما هستن که باعث پیشرفت این کشور میشن
مهمان
مهدی جان ادامه بده خیلی عالی بود
مهمان
باسلام
من لیسانس ابزاردقیق هستم و سال گذشته برای پروژه پایانی کارشناسیم که مانیتورینگ صنعتی بود از مطالب سایت شما بیشترین استفاده رو کردم . اجرای عملی پروژه های سایت شما باعث شد ترسم از الکترونیک از بین بره و از این بابت مدیون شما هستم . شیوه انتقال مطلب شما بسیار عالی هستش .
مدتی بود که زبانهای برنامه نویسی مختلف را با هدف ایجاد نرم افزارهای مانیتورینگ در صنعت و اینکه کدام زبان برای این کار مناسب تر هستش بررسی می کردم تا درنهایت به ++C و فریمورک QT رسیدم
داشتم امکانات QT را بررسی می کردم که باکمال مسرت مجددا” به سایت شما رسیدم
تقریبا” شش ماه قبل شما درنظرات نوشته بودید که هنوز درمورد رفتن به سمتQT مطمئن نیستید و این باعث شد کمی دلسرد بشم و به راهی که انتخاب کردم شک کنم
من پروژه دانشگاهی مانیتورینگ را با ویندوزفرم سی شارپ انجام دادم اما در همون سطح هم برای شماتیک دستگاهها و گیج های اندازه گیری باید از کامپوننت های رایگان استفاده می کردم که حس بسیار بدی داشت و ازطرفی استفاده از اونها درصنعت صحیح نیست . wpf هم خیلی خوب بود که اونهم بخاطر آینده نامعلومش دنبال نکردم .
اگر امکان داره لطفا” تجربیات خودتون رو درمورد QT و امکاناتش در نسخه رایگان (با هدف استفاده در رشته برق و الکترونیک) مطرح کنید . باتشکر
نویسنده این مطلب
سلام
والا qt برید سایتش بهتره – یه سری کتابخونه هاش رایگانه یه سری پولی – من سر همین مورد یکم دلسرد شدم وگرنه خداییش چیز باحالی و خوبی هستش.
الان یکم درگیر lpc1768 هستم وگرنه داشتم برنامه لاجیک آنالیزر با Qt مینوشتم که ناقص ولش کردم – این وای فایش اگه بامبول در نمیوبرد الان حداقل ۱۰-۱۵ تا ازش پروژه گزاشته بودم تو سایت – پروژه های ارتباط میکرو با موبایل و … – ولی خب…، البته دوستمون در نظرات قبلی گفتن که پروژه ای برا Wifi و qt نوشتن!!! در حالی که من یادمه این کتابخونش پولی بود حالا باید بررسی بشه که حسش نیست – آخه اصل داستان تو موبایل wifi اش هستش – برا بحث ارتباط میکرو و موبایل –
حالا سیشارپ هم انگار یه چیزی به نام زامارین داره برا بحث نوشتن برنامه موبایل حالا اون داستانش چیه دقیقا اطلاع ندارم و باس برید بررسی کنی.
مهمان
من در کانال تلگرام Qt سوال کردم :
باسلام . من تاحالا با QT کارنکردم و تازه باهاش آشنا شدم . کسی میدونه QT برای کار با موبایل کتابخانه رایگان برای Wifi داره یا خیر ؟
و اینطور جواب دادن :
سلام. QT نه Qt درسته و «رایگان» هم احتمالا «آزاد» منظورته . چه چیز خاصی برای کار با Wifi هست که نیاز به کتابخانهٔ خاص داشته باشه؟ اگر منظور Networking هست APIها هیچ تفاوتی نمیکنن. اگر دنبال پیدا کردن SSID و پسورد دادن و غیره هستید بله داره. QNetworkConfigurationManager رو ببینید
نویسنده این مطلب
این QT و Qt رو هم به من قبلا تذکر دادن
مهمان
سلام.
مطمئن هستید که وای فای برای اندروید کیوت پولیه؟
من یه کد نوشتم مشکلی نداشت و با esp 8266 راحت تبادل دیتا داشتم.
نویسنده این مطلب
سلام
میشه سورس بدید؟ یا فیلم؟ ( فیلم باشه بهتره)
مهمان
سوروس رو میشه آپلود کرد همینجا؟
فیلم ازش ندارم و وسایلش هم نیست سرهم کنم.
شما منظورتون کدوم کتابخونه اس که پولیه ؟
چیزای پولی توش داره مثلا Boot2qt. ولی تقریبا همه چیزای کار راه بنداز داخلش هست و نیازو بر طرف میکنه.
نویسنده این مطلب
والا من خواستم وای فایل اندروید رو راه بندازم نشد – بررسی که کردم دیدم پولیه
تو سایت پیکو فایل آپلود کنید و لینکش رو بفرستید.
مهمان
http://s4.picofile.com/file/8283406526/GHayegh.rar.html
با Qt 5.7 نوشته شده
مهمان
منبع آموزشی qt که شما استفاده می کنید چیه
منم اینجور که تحقیق کردم همه فن حریفه ولی اگه بخواد دستمون تو پوسته گردو بذاره برم سراغ اندروید استیدیو و جاوا
نویسنده این مطلب
خود نرم افزار
والا چی بگم – بیشتر تحقیق کنید.
مهمان
من هنوز با qt کار نکردم ولی شما که کار کردید به آدرس زیر برید ببینید مشکل حل میشه
اگه حل شد منم شروع به یادگیری کنم
ممنون
نویسنده این مطلب
لینکش فیلتر بود.
مهمان
سلام .
لازم دیدم بیام و جواب بدم بعد این همه وقت ک گذشته.
در مورد شبکه و … کتابخانه پولی توی کیوت ندیدم . چه تو ویندوز چه تو اندروید چه تو لینوکس.
لینکش رو بزارید. همین طور که گفتم بخش پولی داره ولی نه توی استفاده از کتابخونه هاش.
به سایت کیوت نگاه کنید بخش های پولی رو گفته.
https://www.qt.io
و خودم هم باهاش کار راه انداختم. (tcp & udp)
مطمئن باشین کارایی که یه الکترونیک کار از کیوت میخواد در دسترس هستن.
اگه برنامتون میخواین حرفه ای باشه که صد در صد اندروید استدیو بهتره.
مهمان
سلام دوست عزیز
خسته نباشی و ممنون
قربان پروژه رو برای دانلود قرار نمیدید؟
خدا قوت
نویسنده این مطلب
سلام.پس اون کدا چیه❤??
مهمان
ممنون دیدم اونارو منظور فایل پروژه هست که کامل باشه و بتونیم باز کنیم
الان من همین کدارو کپی پیس کنم خودش فورم می سازه؟
ممنون از شما
نویسنده این مطلب
بلی
مهمان
دوستان عزیز
من به شخصه چون برای میکرو با c و c++ کد میزنم بخاطر همین برام راحت تره که روی app هم با c++ کد زدن رو یاد بگیرم و ذهنم رو درگیر سی شارپ و جاوا نکنم (البته در حال حاظر این تصمیم رو دارم )
و اینکه یه سرچ هم توی نت بزنید میبینید که نرم افزارهای خوبی رو با کیوت نوشتن
https://en.wikipedia.org/wiki/Category:Software_that_uses_Qt
در کل همه چیز برمیگرده به قدرت تحلیل و برنامه نویسی خود آدم فرق زیادی نیست از چه کامپایلری ادم استفاده کنه مهم اینه از این شاخه به اون شاخه نپره که کل عمرش تموم شه و اخرشم بشه همه کاره و هیچ کاره
و از آقا مهدی عزیز هم ممنون میشم اگر وقت خالی پیدا کردن باقی اموزش های مرتبط برای ارتباط با یو اس بی یا شبکه یا همونطور که دوستمون گفتن بلوتوث رو قرار بدن کلا نرم افزارهایی که مرتبط باشن با سخت افزار به درد ما الکترونیکی ها میخوره
بازم ممنون
نویسنده این مطلب
گفتم که – مثلا من اومدم وای فای اندروید رو با Qt راه بندازم دیدم با نسخه رایگان Qt نمیشه – خب از این دست مشکلات کم نیست – منم فکر شما رو داشتم و رفتم سمت Qt – و الان اگه این Qt بخواد اینطور اضیت کنه و راهی برا حلش پیدا نکنم – خب میرم سراغ چیز دیگه ای ….
فعلا مثلا داریم آموزش آرم تهیه میکنیم – این سرفصل های دیتاشیت تموم بشه میام سراغ ارتباط “موبایل و کامپیوتر” با میکرو…..
مهمان
سلام
دمت گرم با معرفت دنبال همچین برنامه شسته رفته ای بودم که آموزش هم داشته باشه خیلی ممنون واقعا لازم داشتم
نویسنده این مطلب
سلام
ما هم فعلا Qt رو گزاشتیم کنار، با این داشتم برنامه اندروید هم مینوشتم و حتی چند تا نمونه کوچیک هم نوشته بودم و حتی پروژه لاجیک آنالیزر هم داشتم کامل میکردم – نرم افزارش تقریبا ۸۰% رسیده بود – ولی خب Qt برا اندروید یکم ضعیف بود – چون اون چیزای خوبش تو نسخه پولی Qt بود
– تا جایی که یادمه وایفای اندروید یکی از موارد پولی Qt بود که تو نسخه رایگان نبود.
خواهش – ولی پروژه روشن کردن led مخصوص پایان نامه دانشجویی الان گزاشته بودم بیش از این مطلب Qt و میکروکنترلر طرفدار پیدا میکرد
حالا بعد ARM برم ببینم اندروید استدیو میشه کار کرد یا نه – چون حس یادگیری زبون جدید نیست
نویسنده این مطلب
این مطلب همش 10 تا نظر ارزش داره^_^؟ من الان میخوایم با Qt لاجیک آنالیزر درست کنم و آموزشش رو بدم با چه انگلیزه ای آموزش رو تهیه کنم O_o
مهمان
نظرم در مورد این مطلب رایادم رفت بگم که اگر کیوت مشکلات خودش را برطرف ورقیب سرسخت ماکروسافت نشود به زودی از صحنه ی روزگار محو می شود. چون ماکروسافت ویژروال استدیو و دات نت را منبع باز کرده ودر حال یک انقلاب است و تمام ویژگی کیوت را داره می بلعه.
حال منو که گرفت کلی زمان وخرج کردم تا کیوت را یاد بگیرم . چون واقعا احساس می کردم همه فن حریفه و وقتی این خبر را شنیدم نصفه کاره ولش کردم
البته که زمان مشخص می کنه سرنوشت این دو چگونه رقم می خورد
نویسنده این مطلب
Qt که فعلا حال منو گرفته – بعضی قابلیت هاش در نسخه رایگان وجود نداره
مهمان
سلام
من از بازدید کنندگان قدیمی سایت شما بودم واز الان هم خواهم بود وانشا الله همین طوری ادامه پیدا کند. چون اصلا فکرش را نمی کردم به این اندازه رشد کرده. در اوایل کارم این سایت یکی از منابعم برای یادگیری بود . الان مهندسی الکترونیک می خونم ودو سال دیگر باید برم سربازی هووورررراااا
از ساخت چشمک زن با ترانزیستور تا هوش مصنوعی وبرنامه سازی را کار کردم البته هوش مصنوعی را در اوایل یادگیری هستم و نمی دونم باحجمی که داره و حجم درس هام چطوری تمومش کنم.مثل چیز های دیگری که در حال یادگیری هستم
وهنوز هم که هنوزه مطالب زیادی هست که باید یاد بگیرم یا ارتقا بدهم اما وقت کم می آورم و بلد نبودن زبان بزرگترین مانعم شده.
اینها را گفتم چون مهم ترین منشا شروع همه ی این یادگیری ها از سایت شما بود تا از شما تشکر کنم.
و الان می خواهم در نوشتن این سایت البته هرچه کم سهیم باشم
نویسنده این مطلب
سلام
بسمالله
یه شماره تلگرام بهم بده(ایمیل کنی برام بهتره) یا اگه نداری یه ایمیل
مهمان
سام علیک.مهدی خان اولا دمت گرم مشتی!دوما ادامه بده!سوما چه کاریه ما بریم اینو یاد بگیریم وقتی C# به اون باحالی هست؟می خواستم بدونم دلیل خاصی داره رفتی طرف کیوت یا مثل من بدون دلیل رفتی
راستش منم رفتم طرفش در کل فرقی احساس نکردم.به نظرم تنها ویژگیش اینه که تو لینوکس هم کامپایل میشه!
غیر همین برنامه ترمینال،دیگه چ کارایی کردی؟منظورم کاراییه که ب درد ما برقیا بخوره
اگه با QBluetooth هم کار کردی ی نمونه ازش بذار
نویسنده این مطلب
سلام
والا به خاطر همین ویژگی که تو ویندوز اندروید لینوکس جواب میده رفتم سمتش ولی خب فعلا به اون سطح قانع نشدم که اون قدر کامله که میتونم برم سمتش – فعلا درگیر چیزای دیگم.
مهمان
آزمایش قابلیت نظرات.
نویسنده این مطلب
پاسخ آزمایشی 1
مهمان
سلام.آقا مهدی میگم تا حالا arduino رو با Qt creator راه اندازی کردی؟
منظورم کتاب خانه های کیوت نیست.منظورم IDE هست
نویسنده این مطلب
سلام
یعنی میگی کدنویسی آردوینو رو تو Qt Creator انجام بدیم؟ درست متوجه شدم؟
مهمان
بله،Qt creator فقط یه IDE برای Qt نیست.جالبه که برای کار های دیگه هم ازش میشه استفاده کرد مثل avr,arduino …
بگردی میتونی راهشو پیدا کنی ولی برای ویندوز یه مقدار سختی داره و گیر کردم.گفتم شاید تجربه ای در این زمینه داشته باشید.
مهمان
خیلی عالی
ممنون از زحمات شما
مهمان
سلام.بابت آموزش تشکر.
خیلی خوب شد که کیوت رو انتخاب کردید چون اینطوری هم برنامه ای که برای ویندوز یا هر پلتفرمی مینویسی و هم برنامه ای که برای ریزپردازنده مینویسی نزدیکی بیشتری دارن…
ای کاش برای کیوت یه معرفی تو سایت بزارید.
مهمان
سلام آقا مهدی
کاش اولش یه معرفی مختصری درباره نرم افزار qt و کارش می کردید و بعد به این مطلب می پرداختید. به هر حال ممنون از لطفتون و کارتونو در این باره ادامه بدهید
نویسنده این مطلب
سلام
والا تو نت دربارش کم مطلب نیست
یه سری کتابخونه هتسش که میتونی هم با c و هم phyton ازش استفاده کنی و برنامه موبایل – ویندوز و لینوکس بنویسی
مهمان
سلام مهندس .
خسته نباشی .
دستت درد نکنه.
فقط فایل .user.pro رو قرار نمیدادی لازم نیست.
موفق باشی .