PDA

View Full Version : مبتدی: افزودن QProgressBar به QStatusBar



woeful
یک شنبه 01 اسفند 1389, 20:58 عصر
سلام

:گریه::گریه:
دیگه چیکار کنم هرچی سعی کردم نشد که نشد
میخوام یه progressBar به statusBar اضافه کنم به صورتیکه progressBar در سمت راست statusBar قرار یگیره
ولی هر کار میکنم خود به خود stretch میشه
الان دقیقا ۲/۵ ساعته سیخ میزنم شرمنده مبتدیم :عصبانی++:

با نشکر
Woeful

.:saeed:.
یک شنبه 01 اسفند 1389, 21:28 عصر
سلام
از کد زیر استفاده کن

QProgressBar*prb=newQProgressBar;
prb->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixe d);
prb->setMinimumSize(200,0);
statusBar()->addPermanentWidget(prb);

این برا وقتیه که میخوای سایزش تغییر نکنه . sizePolicy های دیگه رو هم امتحان کن شاید بهتر به کارت بیاد.

سروش ربیعی
جمعه 13 اسفند 1389, 21:59 عصر
روش بالا رو اصلاً توصیه نمی‌کنم. در مستندات Qt آورده شده که به هیچ‌وجه سورس فایل ui رو دستی تغییر ندهید. این کار باعث از دست رفتن اطلاعات خواهد شد.

شما می‌تونید به جاش توی سازنده یک ویدجت ترکیبی از یک HorizontalSpacer و ویجت دلخواهتون بسازید و به ویجت container اضافه کنید.

فکر می‌کنم به قدر کافی واضح بود. اگر لازم هست کد هم بنویسم؟

.:saeed:.
جمعه 13 اسفند 1389, 22:13 عصر
به نظرتون الان من فایل ui رو دست زدم ! من که چیزی نمیبینم! اگه شما میبینید بگید شاید ما هم دیدیم . اصلا من توی این مثال فایل ui استفاده نکردم. من از کلاس QMainWindow ارث بردم و این دستورات مثلا توی سازندشه.:متعجب:
اگه منظورتون استفاده از تابع statusBar هستش که خوب بهتره به همون مستندات کیوتی مراجعه کنید :
The Status Bar

You can set a status bar with setStatusBar(), but one is created the first time statusBar() (which returns the main window's status bar) is called. See QStatusBar (http://barnamenevis.org/qstatusbar.html) for information on how to use it.

QStatusBar (http://barnamenevis.org/qstatusbar.html) * QMainWindow::statusBar () const

Returns the status bar for the main window. This function creates and returns an empty status bar if the status bar does not exist.
See also setStatusBar (http://barnamenevis.org/qmainwindow.html#setStatusBar)().

توضیح : اگه این تابع رو صدا بزنید اگه statusBar داشته باشه MainWindow ما که ،اونو برمیگردونه اگه نه که یکی جدید میسازه و برمیگردونه . شما بگید استفاده از فایل ui کجاشه.:متفکر:
بر فرض مثال که من این کار رو هم توی subClass ای که از QMainWindow ، مشتق شده باشه و در ضمن فایل ui هم داشته باشه نوشتم . به این که نمیگن تغییر فایل ui . فایل ui صرفا بیان کننده اینه که چه آیتمی ، کجا و با چه مشخصات ظاهری باشه . مثلا گفته یه main window هم داریم . حالا به نظرتون من اونو تغییر دادم.

سروش ربیعی
جمعه 13 اسفند 1389, 22:24 عصر
درسته الان که دقت می‌کنم می‌بینم کد ui نیست. فکر می‌کنم اشتباه از مرورگر من یا شماست. شما کد فوق رو به چه صورتی می‌بینید؟ من یک کد XML می‌بینم که شبیه کد ui هست اما کد ui نیست. بیشتر شبیه کد RTF هست. میشه بیشتر در موردش توصیح بدید؟

با تشکر.

.:saeed:.
جمعه 13 اسفند 1389, 22:25 عصر
بهتره آزمایش زیر رو انجام بدین

فایل ui یه main window قبل از وارد کردن خطوط کد بالا در constructor


<?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>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>



و فایل ui بعد از وارد کردن کد های بالا در Constructor


<?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>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

.:saeed:.
جمعه 13 اسفند 1389, 22:28 عصر
فکر میکنم مشکل از تگ کد جدید سایته

کد:

QProgressBar*prb=new QProgressBar;
prb->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixe d);
prb->setMinimumSize(200,0);
statusBar()->addPermanentWidget(prb);

سروش ربیعی
جمعه 13 اسفند 1389, 22:34 عصر
الان درست شد!
شرمنده من اول فکر کردم شما ویرایشی رو توی فایل ui توصیه کردید.