April 18, 2012

silver silver
Ant Farmer
84 posts

وراثت

Page  
1

سلام

من میخوام قسمت option برنامه ام رو توی یه کلاس جدید بذارم
برای این کار اول یه کلاس به اسم option از کلاس اصلی برنامه به ارث میبرم و بعد connect برای این کلاس جدید کار نمیکنه
چی کار باید بکنم؟

اگه میشه یه نمونه کد ساده برای ارتیاط فرم ها با هم بهم بدین
ممنون

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

30 replies

April 23, 2012

Mohsen Mohsen
Robot Herder
725 posts

بدون دیدن کد نمیتونیم راهنماییت کنیم

 Signature 

www.madagon.com

April 25, 2012

silver silver
Ant Farmer
84 posts

کدش دربه داغونه :)
https://github.com/silvergit/tictactoe
من تازه دارم qt رو یاد میگیرم
البته اگه یه مثال ساده با دو فرم برای ارتباط بین فرم ها میزدین بیشتر بهم کمک میشد
شما کلاً از چه روشی استفاده میکنین؟
وراثت – کلاس دوست – سیگنال و اسلات

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

April 25, 2012

bs994 bs994
Lab Rat
39 posts

اگه دقیق بگی چی کار میخوای بکنی بهتر میشه کمک کرد

استفاده می کنی و میخوای یه فرم یا دیالوگ که توش درست کردی را بهش ربط بدیmainwindowاگه از

و همون سیگنال و اسلاتهconnect فکرکنم متداول ترین راهش استفاده از تایع
مثلا یه دکمه بزار وقتی کلیک شد یه تابع فراخونی کنه که توش فرم جدید ساخته شه و ادامه داستان

 Signature 

Real Eyes Realize Real Lies .

April 25, 2012

silver silver
Ant Farmer
84 posts

برای مثال این رو در نظر بگیرید
من با qdesigner دو تا فرم طراحی میکنم و میخوام فرم دوم با کلیک روی یه دکمه بتونه یه متغیر عضو کلاس فرم اول که private هم هست رو تغییر بده یا برعکس

قبلا تمام کدهامو توی یه کلاس مینوشتم و مشکلی نیود اما الان میخوام برای هر فرم یه کلاس مجزا داشته باشم
البته mainwindow و dialog و widget هم برام فرقی نداره فقط دسترسی به متغیرهای همدیگه برام مهمه

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

April 26, 2012

bs994 bs994
Lab Rat
39 posts

من یه برنامه نوشتم که توش تو مین ویندو با کلیک یک فرم جدید می سازه و از کلاس مین ویندو مقدار لیبل موجود در کلاس فرم دومی رو تغییر می ده
مقدار یک رشته در کلاس فرم رو تغییر میده و میریزه تو لیبل کلاس فرم
کثیف کد زدم :D
ببین کمکت میکنه ؟
mainWindow.h

  1. namespace Ui {
  2.     class MainWindow;
  3. }
  4. class myform;
  5. class MainWindow : public QMainWindow
  6. {
  7. private slots :
  8.     void newForm();
  9. private:
  10.     myform *myForm;
  11. };

mainWindow.h
  1. #include "myform.h"
  2. MainWindow::MainWindow(QWidget *parent) :
  3.     QMainWindow(parent),
  4.     ui(new Ui::MainWindow)
  5. {
  6.     ui->setupUi(this);
  7.     myForm = new myform;
  8.     connect(ui->pushButton , SIGNAL(clicked()) , this , SLOT(newForm()));
  9. }
  10. void MainWindow::newForm(){
  11.     MainWindow::myForm->str = "This str changed in main window class ";
  12.     QString str2 = MainWindow::myForm->str ;
  13.     MainWindow::myForm->label->setText(str2);
  14.     myForm->show();
  15. }

myform.h
  1. #include "ui_myform.h"
  2. class myform : public QWidget , public Ui_Form
  3. {
  4.     public:
  5.         myform( QWidget * parent = 0, Qt::WindowFlags f = 0 );
  6.         QString str ;
  7. };

myform.cpp
  1. myform::myform( QWidget *parent, Qt::WindowFlags f ) :
  2.     QWidget( parent, f )
  3. {
  4.     setupUi( this );
  5. str = "nothing";
  6. }

 Signature 

Real Eyes Realize Real Lies .

April 26, 2012

Mohsen Mohsen
Robot Herder
725 posts

اگر متغیر ها Private هستن بهتره از Signal و Slot استفاده کنی. در غیر اینصورت میتونی کلاس رو بصورت Pointer در Constructor فرم دیگه ارسال کنی و با include کردن header کلاس به اجزاء public کلاس دسترسی داشته باشی.

 Signature 

www.madagon.com

April 28, 2012

bs994 bs994
Lab Rat
39 posts

محسن جان چطوری میشه با سیگنال و اسلات عضو private یک کلاس رو از طریق یک کلاس دیگه دسترسی پیدا کرد ؟
یه توضیح مختصر می دی ؟
ممنون

 Signature 

Real Eyes Realize Real Lies .

April 29, 2012

Mohsen Mohsen
Robot Herder
725 posts

بطور کلی به هیچ یک از اشیاء private یک کلاس نمیشه دسترسی داشت ولی با پیاده سازی یک slot public میشه به اونها اطلاعات push کرد و یا گرفت. چیزی شبیه به setter و getter ها

 Signature 

www.madagon.com

April 29, 2012

bs994 bs994
Lab Rat
39 posts

@Mohsen : TNX

 Signature 

Real Eyes Realize Real Lies .

April 29, 2012

silver silver
Ant Farmer
84 posts

ممنون محسن جان
مصطفی جان ممنون بابت کدت اما نتونستم کامپایلش کنم میشه کد رو برام آپلود کنی؟

توی این خط

  1. class myform : public QWidget , public Ui_Form

خطا داشتم که با این جایگزینش کردم

  1. class myform : public QWidget , public Ui_myform

این رو هم نفهمیدم

  1. myform::myform( QWidget *parent, Qt::WindowFlags f ) :
  2.     QWidget( parent, f )

اون f چیه

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

April 30, 2012

bs994 bs994
Lab Rat
39 posts

علی من کد و تو ویندوز نوشتم
کلا باید برای این کار اون عضوی که می خوای مثلا member1 که تو کلاس دومی هست باید public باشه تا بتونی از طریق کلاس دیگه بهش دسترسی داشته باشی

 Signature 

Real Eyes Realize Real Lies .

April 30, 2012

silver silver
Ant Farmer
84 posts

ممنون عزیزم
فقط نگفتی کار اون f و public Ui_Form چیه

راستی کسی توی اصفهان هست که بتونه یه کلاس Qt برای ما بذاره

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

April 30, 2012

bs994 bs994
Lab Rat
39 posts

https://github.com/bs994/example1
اینجا سورس اصلی رو اپ کردم
Public Ui_Form :
اونو واسه این گذاشته بودم که بتونم از تو کلاس mainWindow به ویجت های کلاس فرمم دسترسی مستقیم داشته باشم
QT::WindowFlags :
http://doc.qt.nokia.com/4.7-snapshot/widgets-windowflags.html

 Signature 

Real Eyes Realize Real Lies .

April 30, 2012

silver silver
Ant Farmer
84 posts

ممنون بابت آپلود کد
مگه اسم کلاست myform نبود پس چرا از Ui_myform استفاده نکردی؟ این همون خطاییه که به من داد

 Signature 

Linus Torvalds –
Software is like sex: it’s better when it’s free.

April 30, 2012

bs994 bs994
Lab Rat
39 posts

خواهش میکنم
اون Ui_Form برای این بود که من تو دیزاینر فرمی که طراحی کرده بودم ObjectName ش Form بود به اسم کلاس ربط نداشت
این کدی هم که آپ کردم همون کد قبلی نیست ولی اون کاری که میخوای و بهتر انجام میده

 Signature 

Real Eyes Realize Real Lies .

Page  
1

  ‹‹ Qt 5.0 Alpha      اتصال به بانک اطلاعاتی ››

You must log in to post a reply. Not a member yet? Register here!