GornerLabo
-
تعداد ارسال ها
105 -
تاریخ عضویت
-
روز های برد
6
پست ها ارسال شده توسط GornerLabo
-
-
با سلام و تبریک سال نو
دوستان برنامه ای دارم که مجبورم از 7z استفاده کنم. دلیل اجبار هم این است که با استفاده از 7z میشه فایل های موجود در آرشیو را مشاهده کرد و در QByteArray ذخیره کرد یعنی لازم به اکسترکت در مسیری از کامپیوتر نیست!
اگر با QProcess بخواییم با 7z.exe فایلی را اکسترکت کنیم ساده س ولی برنامه به شکلی هست که نباید فایل های آرشیو (با فرمت های مختلف 7z , tar و ..) در مسیر کامپیوتر اکسترکت بشن بلکه لازمه در خود برنامه ، لیست فایل های موجود نمایش و ذخیره شوند و برای هدف برنامه مورد استفاده قرار بگیرن.
تا جایی که جستجو و پرسش داشتم از دوستان ، میشه با 7z این عمل را انجام داد ولی هیچ داکیومنتی از 7z.dll در رابطه با Qt ندیدم. چون در Qt میشه راحت لیست فایل های موجود را در لیست ویجت ذخیره کرد و مورد استفاده قرار داد.
اگر دوستان راهنمایی داشته باشند ممنون میشم
-
دوستان فرض کنید فایلی رو میخونیم و اونو میریزیم توی یه متغیر از نوع QByteArray . حالا باید متغیر از نوع QByteArray به قسمت های کوچکتر با سایز مشخص تقسیم شوند ، به نحوی که هر قسمت ادامه قسمت بعدی باشه. برای استفاده از این تقسیم بندی باید هر قسمت به صورت جدا در برنامه استفاده بشه. از دوستان کسی میتونه راهنمایی کنه این مشکل رو چجوری باید حل کرد؟ آیا تابع مشخصی داره ؟
-
این تکنیک پایین هم میشه استفاده کرد
QTimer::singleShot(1000, [this]() { //code 1 } ); QTimer::singleShot(2000, [this]() { //code2 } );
- 1
-
یه جوابی گرفتم با این روش:
اگه در کلاسمون به عنوان مثال دو اسلات تعریف کنیم و کاری که میخواییم رو انجام بدیم در اسلات ها تعریف کنیم و جایی که میخواییم به نوبت و با تایم مشخص اجرا بشن باید از این روش استفاده کنیم:
QTimer::singleShot(1000,this, SLOT(slotFunction1())); QTimer::singleShot(2000,this, SLOT(slotFunction2()));
دوستان اگه روش بهتری هم داشتند میتونن اینجا معرفی کنند . ممنون
- 1
-
سلام و خسته نباشید. من یه رشته ای رو برای اطلاع به کاربر در برنامه میخواستم نمایش بدم. این رشته باید پشت سرهم و با اختلاف 1 ثانیه ای نمایش داده بشه. بعد این نمایش میخواستم تایمر متوقف شه . با کلاس تایمر تونستم با اتصال سیگنال timeout به اسلاتی از برنامه این کار رو انجام بدم اما اسلات بعد زمان تعیین شده مرتبا تکرار میشد. طبق مثال زیر عمل کردم. لطفا راهنمایی کنید ممنون.
#include <QTimer> class ShowString: public QObject { Q_OBJECT private: QTimer *timer; public: public slots: void show(); };
#include "showstring.h" ShowString::ShowString() { timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(show())); timer->start(1000); } void ShowString::show() { //my 3 line strings }
- 1
-
سلام. آیا میشه در کلاسی چندین enum بدون نام تعریف کرد؟ هدف تعریف چند نوع enum پشت سرهم در کلاس چیه و به چه نحوی میشه ازشون استفاده کرد؟
مثلا:
enum { one, two, three }; enum { tehran, karaj, yazd };
-
در 59 دقیقه قبل، بهنام صباغی گفته است :سلام
توی همین لینک یک مثال در ساده ترین حالت ممکن رو نوشته و از قابلیتهاش استفاده کرده شما چه مشکلی باهاش دارید ؟ یعنی کجاش رو مشکل دارید و متوجه نمیشید ؟ اصلا کد رو اجرا کردید ازش استفاده کردید ؟
آقای صباغی با توجه به نیازی که دارم جستجو کردم و ظاهرا این کلاس به درد کارم میخوره. برنامه ای که دارم اینه که یه برنامه با این کلاس بسازم وقتی ساخته شد و کامپایلش کردم بتونم به همین برنامه دستورات بفرستم و طبق دستورات برنامه عمل کنه. مثل همون cmd در ویندوز. حالا اولین بارمه با این کلاس اشنا میشم و کار نکردم باهاش . داکیومنت هم خوندم ولی باور کن هیچی ازش نفهمیدم. اگه امکانش باشه با مسالی ساده برام بگید سازوکار این کلاس چ جوریه؟
-
با سلام و خسته نباشید خدمت اساتید. بنا به نیازم مجبورم شدم با کلاس qcommandlineparser کارکنم. من میخوام با مثال ساده کار با این کلاس رو یاد بگیرم. داکیومنت این کلاس رو در این لینک مطالعه کردم اما واقعیتش اونجور که باید و شاید مطلب رو نگرفتم. اگر از اساتید لطف کنن آموزشی در مورد این کلاس رو با ذکر مثال ساده اینجا بیان کنند بسیار ممنون خواهم شد. با تشکر
-
در 18 دقیقه قبل، hamed_masafi گفته است :if (str.startsWith("ready00") ) { // codes }
آقا دمت گرم حل شد بسیار سپاس گزارم
فقط این کلاس QRegExp برای چی هست؟
-
سلام اساتید. برنامه داریم که با سخت افزار در ارتباط است. سخت افزار در قسمتی از برنامه جواب به صورت رشته برمیگرداند. ابتدای جواب ها به یک شکل است ولی در قسمتی از جواب ها تفاوت دارد. به عنوان مثال جواب ها شاید بدین شکل باشند: ready , ready00 , ready0000, ready00044555 و ... .
ما نیاز داریم یک شرط فقط در برنامه قرار بدیم به این شکل که اگر جواب ready بود فلان دستور انجام بشه اگر جواب ready00 بود فلان دستور. جواب های دیگه طبق همین جواب دوم سنجیده میشه یعنی اگر جواب ها ready00 یا ready0000 یا ready00044555 باشه دستورات یکسان انجام بشه. پس ملاک 00 بعد ready هست. چطور با کلاس QString و QRegExp و تابع contains این مساله رو حل کرد
تشکر از مدیریت و اساتید سایت
-
در 35 دقیقه قبل، قاسم رمضانی منش گفته است :سلام ؛
Container :
این اسامیای که اسم بردید. تماماً Continer هستند. و وظیفه نگهداری دادههارا دارند. برای اینکه برنامهنویس دستش باز باشه در مدیریت دادهها در زبان برنامهنویسی سیپلاسپلاس میتونید از این کانتینرها در جهت نگهداری دادههاتون استفاده کنید. که استفاده از توابع و کلاسهای موجود در هدرفایل algorithm در کنار این کانتینرها پیشنهاد میشود و میتواند قدرت کنترل بیشتری به برنامهنویسی بر روی دادههای خود بدهد. که خود بسیار در پرفورمنس (به انگلیسی : performance) برنامه تاثیر دارد.
Qt Container :
از آنجایی که Qt یک فریمورک هست. برای اینکه برنامهنویسی به راحتی بتواند با کلاسها و توابع این فریمورک تعامل برقرار کند ؛ Qt یکسری از مخازن (معادل فارسی کانتینر) را بازنویسی کردهاست. که میتوانید در این لینک بیشتر در اینباره مطالعه کنید.
ممنون ازتون بابت پاسخگویی
-
با سلام و خسته نباشید خدمت اساتید محترم. در بحث Qt میخواستم کاربرد QMap ، QList و QVector رو بدونم که در کجاها ازشون استفاده میشه ؟ و آیا به جز این سه کلاس کلاسی دیگری هست در کیوت برای استفاده مشابه؟
-
روش دیگه برای ادد کردن کتابخانه رو هم امتحان کردم اوکی شد:
یک پوشه ایجاد کنید مثلا در مسیر C:\Qt\lib-archive
مرحله بعد در داخل همین پوشه lib-archive برای راحتی میتوانید دو پوشه به نام های include و lib ایجاد کنید.
در این مرحله باید فایل های .h از کتابخانه اصلی را در پوشه include کپی کنید و همچنین فایل بیلد شده از dll ها ( یا پسوند .a ) را در پوشه lib کپی کنید.
به Qt رفته و یک پروژه ایجاد کنید و در داخل فایل .pro به صورت دستی کد زیر را اضافه کنید:
INCLUDEPATH += "C:/Qt/lib-archive/include" LIBS += -L "C:/Qt/lib-archive/lib" LIBS += -llibarchive
اکنون تغییرات فایل .pro را ذخیره کرده و پروژه را یک بار بیلد کنید، کار تمام است و برای آزمایش میتوانید طبق مثال های کتابخانه عمل کنید.
با تشکر فراوان از اساتید محترم بخصوص آقای @کامبیز اسدزاده
- 1
-
در 15 دقیقه قبل، کامبیز اسدزاده گفته است :کتابخانه را که بیلد کردین قرار نیست
.h
را هم کنار فایلهای بیلد شده قرار بدین!شما باید پوشهٔ libarchive را از کتابخانهٔ اصلی و فایلهای بیلد شده را به صورت دستی بهش اضافه کنید.
تشکر استاد
- 1
-
در ۱ ساعت قبل، کامبیز اسدزاده گفته است :خب خطایی که میگیری چی هست؟
سعی کن از حالت داینامیک استفاده کنی، حالت Release یا Debug کتابخونه رو هم با برنامهٔ خودت هماهنگ کن.
بعد بیلد ، کتابخانه به این شکل دراومد. لینک دانلود کتابخانه بیلد شده با کامپایلر mingw
مشکل حالا نحوه اد کردن این کتابخانه س. فایل dll داره در فولدر bin ولی فایل .h نداره که داینامیک ادد کنم
-
در 11 ساعت قبل، کامبیز اسدزاده گفته است :مشکل بیلد هم حل شد. سپاس استاد.
برای اضافه کردن به پروژه از گزینه add library استفاده میکنم . برای این منظور بعد add library ، مسیر کتابخانه و فایل .a رو فقط میتونم اضافه کنم که با بیلد کردن پروژه با ارور مواجه میشم. گوگل کردم و چندجایی دیدم مشکل داشتن در ویندوز برای اضافه کردن. اینم حل شه ازتون ممنون میشم
-
در 2 ساعت قبل، بهنام صباغی گفته است :با سلام
میتونید از کتابخانه هایی که برای این کار وجود داره استفاده کنید نگاهی به بخش Compression لینک Awesome C/C++ بندازید کتابخانههای خوبی فراهم هست.
موفق باشید.
دوره تصویری برای آموزش این کتابخانه دارین؟
-
با سلام و خسته نباشید خدمت اساتید محترم. اگه بخواییم در
QWidget
یک فایل فشرده با فرمت های مختلف همچون zip , RAR , tar و ... را فراخوانی کنیم و فایل های محتوایی که در این فایل فشرده هست را در برنامه استخراج (Extract) کرده و به صورت یک لیست دربیاریم و به صورت دلخواه هر فایل را جدا استفاده کنیم باید به چه شکل عمل کنیم؟ آیا کتابخانه خاصی داره برای این کار ؟ اگر مثال در این مورد سراغ دارین ممنون میشم کمک کنید.با تشکر
-
با این تکه کد حل شد
QByteArray ba; ba.resize(100); ba.fill(0x00); ba[0] = 0x01; port->write(ba); port->flush();
- 2
-
با سلام. برای رایت دستورات در QSerialPort چندین روش هست که به ترتیب عبارتند از:
1- دستورات رشته ای:
QString str = "command\r\n"; port->write(str.toStdString().c_str());
2- فایل های باینری:
QFile file(":/bin/file.bin"); if(!file.open(QIODevice::ReadOnly))return; QByteArray data = file.readAll(); port->write(data);
3- متغیر QByteArray:
که مشکل من در این قسمت هست. فرض کنید متغیر زیر تعریف شده:
QByteArray ba; ba.resize(100); ba.fill(0x00); ba[0] = 0x01; ba[8] = 0x0a;
اگر این متغیر را در یک فایل باینری ذخیره کنیم مشکلی در رایت نیست اما اگر بدون ذخیره در باینری بخواهیم در پورت سریال رایت کنیم ، عمل رایت انجام نمیشه
-
خیلی ممنون استاد
-
با سلام خدمت اساتید محترم. اگر بخواهیم مقدار بازگشتی از رایت چندین دستور در مورد کلاس QSerialPort به صورت دلخواه ذخیره کنیم باید به چه شکل عمل کرد؟
کد زیر برای دستوری است که عمل رایت دستور را انجام میدهد:
port->setPortName(""); // COM PORT NAME port->setBaudRate(QSerialPort::Baud9600); port->setFlowControl(QSerialPort::NoFlowControl); port->setParity(QSerialPort::NoParity); port->setDataBits(QSerialPort::Data8); port->setStopBits(QSerialPort::OneStop); port->open(QSerialPort::ReadWrite); if(port->isOpen()) { port->write(); // command 1 for write port->write(); // command 2 for write port->write(); // command 3 for write port->write(); // command 4 for write }
حالا برای هر دستور رایت یک مقدار بازگشتی دریافت خواهیم کرد. پس میتوان با connect سیگنال readyRead با یک اسلات به صورت کد زیر این مقدار بازگشتی رو ذخیره کرد:
connect(port,SIGNAL(readyRead()),this,SLOT(MySlot())); QByteArray b = port->readAll(); QFile file("e:/test/raw.bin"); if(!file.open(QIODevice::WriteOnly | QIODevice::Append))return; file.write(b); file.flush(); file.close();
حالا اگر بخواهیم مقدار بازگشتی رو از دستور رایت مشخصی دریافت کنیم ، شیوه صحیح کار چطور است؟
-
آقا فرهاد الان توی برنامه م یک تابع دارم که یه اسلاتی رو اجرا میکنه. تا جایی که اطلاع دارم اسلات میره تو ترد بعد اجرا. پس چرا وقتی این تابع اجرا میشه ( در اصل اسلات رو اجرا میکنه) تا اسلات کارش تموم نشده ، ui هنگ میکنه؟
-
ممنون بابت توضیح کامل. استاد اگه پروسس سنگین باشه ( مثل عمل رایت یک فایل حجیم باینری) به همین شیوه که برای کیوت مثال زدین عمل کنیم؟
مشکل 7z.dll در Qt
در محیط توسعه Qt Creator
ارسال شده در
ممنون بررسی میکنم
مرسی اقای صباغی