السلام عليكم ورحمة الله وبركاته
أفلحت أخيرا في جعل النافذة الرئيسية المصممة بالديزاينر من النوع mdi
لكني اكتشفت أنها لا تقبل القوائم ولا التول بار
هذا ملف main.cpp
كود
==========
#include <QtGui/QApplication>
#include <MdiArea.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MdiArea w;
w.show();
return a.exec();
}===========
وهذا ملف الهيدر mdiarea.h
=================
#ifndef MDIAREA_H
#define MDIAREA_H
#include <QMdiArea>
namespace Ui {
class MdiArea;
}
class MdiArea : public QMdiArea {
Q_OBJECT
public:
MdiArea(QWidget *parent = 0);
~MdiArea();
protected:
void changeEvent(QEvent *e);
private:
Ui::MdiArea *ui;
};
#endif // MDIAREA_H===========
وهذا ملف السورس mdiarea.cpp
===========
#include "MdiArea.h"
#include "ui_mdiarea.h"
MdiArea::MdiArea(QWidget *parent) :
QMdiArea(parent),
ui(new Ui::MdiArea)
{
ui->setupUi(this);
}
MdiArea::~MdiArea()
{
delete ui;
}
void MdiArea::changeEvent(QEvent *e)
{
QMdiArea::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}============
الطريقة الثانية هو وضع الأداة mdiarea على النافذة الرئيسية
وهذه تعتبر بالنسبة لي أفضل طريقة ولكني لم أعرف كيف أجعل ال submainwindow غير ظاهرة عند بداية البرنامج بحيث يقوم المستخدم باستدعائها وقتما شاء
الطريقة الثالثة قمت بالتحايل على ملفات المين ويندو لتحويلها إلى أم دي آي فكانت النتيجة كما بالصورة
صورة
تحولت القوائم والتول بار إلى ما يشبه subwindow
وهذا ما قمت بتعديله
ملف main.cpp
#include <QtGui/QApplication>
#include "mdiarea.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MdiArea w;
w.show();
return a.exec();
}ملف الهيدر
#ifndef MDIAREA_H
#define MDIAREA_H
#include <QMdiArea>
namespace Ui {
class MdiArea;
}
class MdiArea : public QMdiArea {
Q_OBJECT
public:
MdiArea(QWidget *parent = 0);
~MdiArea();
protected:
void changeEvent(QEvent *e);
private:
Ui::MdiArea *ui;
};
#endif // MDIAREA_Hملف السورس mdiarea.cpp
#include "mdiarea.h"
#include "ui_mdiarea.h"
MdiArea::MdiArea(QWidget *parent) :
QMdiArea(parent),
ui(new Ui::MdiArea)
{
ui->setupUi(this);
}
MdiArea::~MdiArea()
{
delete ui;
}
void MdiArea::changeEvent(QEvent *e)
{
QMdiArea::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}ملف ui بعد تعديله بالنوت باد
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MdiArea</class>
<widget class="QMdiArea" name="MdiArea">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>MdiArea</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>20</height>
</rect>
</property>
<widget class="QMenu" name="menu">
<property name="title">
<string>ملف</string>
</property>
<addaction name="action"/>
<addaction name="action_2"/>
</widget>
<addaction name="menu"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionDFD"/>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="action">
<property name="text">
<string>تحرير</string>
</property>
</action>
<action name="action_2">
<property name="text">
<string>فتح</string>
</property>
</action>
<action name="actionDFD">
<property name="text">
<string>DFD</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>مع العلم أنني لم أتأسس في السي بلس بلس أصلا لذلك أنا أسير بخطوات غير منهجية في التعلم تعتمد على التجربة غالبا وهذا هو الذي أتعبني
حاولت أن أفهم أساسيات لغة سي بلس بلس ولكن وجدت صعوبة كبيرة جدا في فهمها
أنا الآن في حالة إحباط ولا أدري ماذا أفعل
هل يمكن أن أتعلم البرمجة بهذه الطريقة