This forum has been archived. All content is frozen. Please use KDE Discuss instead.

کمک در مورد QTime

Tags: None
(comma "," separated)
User avatar
قیزبوغان
Posts
8
Karma
0

کمک در مورد QTime

Sat Jan 16, 2010 11:39 am
با سلام خدمت همه دوستان عزیز.
من تازه تو این انجمن ثبت نام کردم ولی قبلا چند بار به خاطر اخبار KDE اینجا اومده بودم. سایت واقعا زیباست. امیدوارم که همیشه موفق باشید.
سوالم در مورد تعریف یک متغیر سراسری QTime هست که زمان حال رو در اون ذخیره کنیم و در جاهای مختلف برنامه مثلا زمان 5 دقیقه بعد رو ازش کم کنیم که زمان طی شده رو بدست بیاریم.
ممنون


یاشاسین آذربایجان
User avatar
soulless
Posts
9
Karma
0

پاسخ : کمک در مورد QTime

Sat Jan 16, 2010 10:24 pm
RTFM

برای این که عمومی باشه در قسمت private از کلاس مربوطه یه متغیر با هر نام که دوست داری از کلاس QTime تعریف کن. مثل:

Code: Select all
private:
QTime time;


فراموش نشه:
Code: Select all
#include <QTime>



در سازنده کلاس اون رو به صورت زیر مقدار دهی می‌کنیم(فرض کردیم که اسم کلاس شما widget است):

Code: Select all
widget::widget(QWidget *parent) :
    QWidget(parent)
{
time.start();
}


در هر جای برنامه خواستید زمان سپری شده رو بدست بیارید:
Code: Select all
int passed = time.elapsed();

الآن متغیر passed زمان سپری شده را به میلی ثانیه در خودش داره.

با تابع زیر هم می‌تونید ریستش کنیپ(انگار که بخواهید زمان سپری شده رو از همین لحضه محاسبه کنه):
Code: Select all
time.restart();


I'm Just A Newbie
User avatar
قیزبوغان
Posts
8
Karma
0
سلام.
مرسی از جوابتون. من فکر می کردم مشکل من تو تعریف متغیر سراسری هست ولی من هم مثل شما به صورت private تعریف کردم ولی قبل از متغیر یک * گذاشته بودم که اشتباه بوده. حالا هم یک متغیر سراسری QTimer تعریف کردم که به صورت زیر هستش:
Code: Select all
#include <QTimer>

و تعریف متغیر:
Code: Select all
QTimer timer;

و کد اصلی:
Code: Select all
    QObject::connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
    timer.start(1000);
    showTime();

و تابع showTime:
Code: Select all
void MainWindow::showTime()
{
    QTime time = QTime::currentTime();
    QString text = time.toString("hh:mm:ss");
    if ((time.second() % 2) == 0)
        text[5] = ' ';
    ui->lcdNumber->display(text);
}

در موقع اجرا خطای زیر رو میده:
Code: Select all
mainwindow.cpp:44: error: no matching function for call to 'MainWindow::connect(QTimer&, const char*, MainWindow* const, const char*)'



در ضمن این خطا رو هم بعضی مواقع میده:
Code: Select all
example.exe exited with code -1073741819


یاشاسین آذربایجان
User avatar
قیزبوغان
Posts
8
Karma
0
با سلام دوباره خدمت دوستان عزیز. من راه حل سوال قبلی رو بعد از جستجو و آزمون و خطا پیدا کردم ولی توضیحش رو نمی دونم. اگه کسی می تونه کمک کنه ازش ممنون می شم.
قسمت تعریف متغیر رو به این صورت تغییر دادم:
Code: Select all
QTimer *timer;

حالا تو هر قسمت برنامه اگه بخوام از timer استفاده کنم باید به جای
Code: Select all
timer.start(1000);

از
Code: Select all
MainWindow::timer->start(1000);

استفاده کنم. اگه ممکنه این تغییرات رو برام توضیح بدید.
ممنون

در ضمن طریقه تعریف یک تابع که بتونیم براش متغیر ارسال کنیم چه جوریه؟

Last edited by Anonymous on Sun Jan 17, 2010 7:02 am, edited 1 time in total.


یاشاسین آذربایجان
User avatar
soulless
Posts
9
Karma
0
در ضمن این خطا رو هم بعضی مواقع میده:
کد:

example.exe exited with code -1073741819

این نشون میده برنامه با موفقیت به اتمام نرسیده. کد ۰ (صفر) نشون دهنده پایان موفقیت آمیزه.

با تعریف متغیر به صورت:
Code: Select all
QTimer *timer;


کد زیر به درستی عمل می‌کنه:
Code: Select all
timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
    timer->start(1000);
    showTime();

void MainWindow::showTime()
{
    QTime time = QTime::currentTime();
    QString text = time.toString("hh:mm:ss");
    if ((time.second() % 2) == 0)
        text[5] = ' ';
    ui->lcdNumber->display(text);
}

و به عنوان مثال هرجای دیگر برنامه میشه به صورت زیر به متغیر دسترسی داشت:
Code: Select all
timer->stop();


[quote=&quot;موغانلی&quot;]
اگه ممکنه این تغییرات رو برام توضیح بدید.
[/quote]
در مستندات مربوط به QObject پارامتر اول تابع connect به شکل const QObject * sender تعریف شده(بنابراین آرگومان اول باید یک اشاره‌گر به یک شیئ باشد). وقتی متغیر رو به صورت QTimer timer تعریف می‌کنیم یک شیئ ار کلاس QTimer ایجاد می‌کنیم اما وقتی به صورت QTimer *timer می‌نویسیم، یک اشاره‌گر به شیئ‌ای از کلاس QTimer ایجاد می‌کنیم.

[quote=&quot;موغانلی&quot;]
در ضمن طریقه تعریف یک تابع که بتونیم براش متغیر ارسال کنیم چه جوریه؟
[/quote]
سوالتون واضح نبود! مثال زیر شاید جوابتون باشه:
مثلا در قسمت private (بسته به نیاز ممکن مکانش تغییر کنه):
Code: Select all
int myFunction(QString m_string);

در قسمت پیاده‌سازی (implementation) با فرض اینکه نام کلاس MainWindow است:
Code: Select all
int MainWindow::myFunction(QString m_string)
{
//func body
}


لینک‌های مرتبط:
New
Dynamic
New

Last edited by soulless on Sun Jan 17, 2010 6:11 pm, edited 1 time in total.


I'm Just A Newbie
User avatar
momeny
Registered Member
Posts
56
Karma
2
OS
شاید بی ربط، اما برای داشتن زمان کنونی نیازی به داشتن متغیر نیست! Qt خودش براتون نگه‌می‌داره، کافیه توابع استاتیک زیر رو اجرا کنید:
QTime::currentTime()
QTime::currentDate()
QTime::currentDateTime()


Choqok developer
User avatar
قیزبوغان
Posts
8
Karma
0

پاسخ : کمک در مورد QTime

Mon Jan 18, 2010 12:36 pm
ممنون از جوابتون soulless عزیز. فقط چند نکته(البته اشتباه از من هست چون منظورم رو به درستی بیان نکردم):
1- در مورد خطا منظورم اینه که خطا در مورد چی هستش
2- در مورد تعریف متغیر timer* سوالم در مورد استفاده ازش بود که با ( . ) باید باشه یا با ( <- ) که فکر کنم در اشاره گرها باید به صورت ( <- ) باشه
3- بعد از تعریف تابع ارسال متغیر به تابع به این صورت هست؟
Code: Select all
 MyFunction(QString m_string)

یا
Code: Select all
 MyFunction(m_string)


از شما هم ممنون mtux عزیز. پس در اون صورت کد روبرو درست هست؟
Code: Select all
QTime::currentTime().toString("hh:mm:ss");


یاشاسین آذربایجان
User avatar
soulless
Posts
9
Karma
0
[quote=&quot;موغانلی&quot;]
در مورد خطا منظورم اینه که خطا در مورد چی هستش
[/quote]

احتمالا منظور شما اینه که معنی این شماره خطا چیه؟ حقیقتش جواب این سوال رو نمی‌دونم.
در لینوکس (این که در ویندوز هم میشه رو نمی‌دونم) با فرمان:
Code: Select all
grep # /user/include/sysexit.h

فقط کافیه شماره خروج برنامتون رو جایگزین # کنید تا ببینید معنی اون چیه. (دقت کنید که این روش به زبان برنامه نویسی شما وابسته‌است و برای هر زبانی نمیشه به کار بردش)
اما اگه شما هم کد 1073741819 رو با روش بالا تست کنید جوابی نمی‌گیرید.
احتمالا (و دقت کنید که این قسمت چیزی جز احتمال نیست!) این خطا به moc یا همون Meta Object Compiler  مربوط میشه.
[quote=&quot;موغانلی&quot;]
بعد از تعریف تابع ارسال متغیر به تابع به این صورت هست؟
Code: Select all
 MyFunction(QString m_string)

یا
Code: Select all
 MyFunction(m_string)

[/quote]

Code: Select all
QString foo = "blah blah";
MyFunction(foo);


I'm Just A Newbie
User avatar
قیزبوغان
Posts
8
Karma
0
مرسی دوست عزیز. :D


یاشاسین آذربایجان


Bookmarks



Who is online

Registered users: bartoloni, Bing [Bot], Google [Bot], Sogou [Bot]