الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التعامل مع setText

بدأه Studious في 9 مارس 2010 · 5 رد · 852 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اخواني الأفاضل.

اقع في مشكلة عويصة مع خاصية setText() لأي كائن.

فعندما اقوم باستدعاء هذه الخاصية على سبيل المثال لـكائن QLabel من داخل (سلوت) قمتُ انا بانشاءه وعندما يصل البرنامج إلى سطر الاستدعاء هذا يختفي البرنامج ويُغلق.

على سبيل المثال لو فرضنا doSomething() هو (سلوت) قمتُ انا بانشاءه فإن عملية الربط لهذا السلوت ناجحة ويقوم بانجاز كل ماهو مطلوب منه (ما عدا) setText() لو كان لها استدعاء من داخل هذا السلوت, فانها تعمل على تدمير البرنامج واختفاء النافذة تماما.

مثال

void MyClass::doSomething()
{
//اشياء معينة يقوم بها هذا السلوت.
//...
//المشكلة في السطر التالي يقوم بتدمير برنامجي واغلاقه بطريقه مفاجئة.
label->setText("some text");
{

علما بأن ليبل في المثال هو عضو معرف داخل الكلاس MyClass, تماما كأي برنامج يا اخواننننننننن عذراً.

ويظهر لي الخطا التالي في qt creator :

"The program has unexpectedly finished."

المشكلة عند تطبيقي لدروس الكتاب, اجد ان setText تعمل بشكل صحيح وكما هو متوقع وبنفس الفكرة.

وهناك رسالة خطأ اخرى تظهر دائما سواء كان البرنامج صحيح او خطا

" ** (<unknown>:2333): CRITICAL **: atk_object_set_name: assertion `name != NULL' failed"

يعمل البرنامج او لا يعمل, يظهر هذا الخطا عند عمل run لأي برنامج في qt creator.

معذره على الاطالة كنت سأعرض هذا الموضوع في موضوع للأخت رغدة (آلية سجنال وسلوت) المثبت ولكن ارى انه لا يتعلق بموضوعها بشكل مباشر ولكن ارجو اهتمامها واهتمامكم بالموضوع لأني بدأت اكره مكتبة كيوت.

شكراً على مساعدتكم مقدماً وبارك الله فيكم جميعا

المرسل: ع ط

:lol:

#2

وعليكم السلام ورحمة الله وبركاته

طيب ضع البرنامج بالكامل يمكن انك لم تعطي مؤشر صحيح ل label .

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#3

الاخ الفاضل مصفوفة:

بارك الله فيك على اهتمامك.

تفضل هذا البرنامج كتبته قبل قليل عندما قرأت مشاركتك.

test class.h

#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <QDialog>

class QPushButton;
class QLabel;

class TestClass : public QDialog
{
    Q_OBJECT

public:
    TestClass(QWidget* parent = 0);

private slots:
    void doSomething();

private:
    QPushButton* button;
    QLabel* label;

};

#endif // TESTCLASS_H

testclass.cpp

#include <QtGui>
#include "testclass.h"


TestClass::TestClass(QWidget *parent)
    :QDialog(parent)
{
    QVBoxLayout* v_boxlayout = new QVBoxLayout();
    QPushButton* button = new QPushButton("do something");
    QLabel* label = new QLabel("hallo world");


    v_boxlayout->addWidget(button);
    v_boxlayout->addWidget(label);

    //السطر التالي يشتغل آخر حلاوة
    label->setText("my name...");


    setWindowTitle("test class");
    setLayout(v_boxlayout);


    //الربط شغال مية المية
    connect(button, SIGNAL(clicked()), this, SLOT(doSomething()));


}

void TestClass::doSomething()
{
    //هنا المشكلة

   // label->setText("do something");
    // اي ست تيكست حتى السطر التالي يظهر خطأ
    //button->setText("push button");
    // التعامل مع اي خاصية لأي كائن تقريبا

    //السطر التالي يعمل بشكل سليم
    // هذا يدل على ان عملية الربط سليمه وكل شيء سليم
    setWindowTitle("hallo world");

}

لاحظ لاهنت! أن setWindowTitle الموجودة داخل السلوت doSomething تقوم بعملها المناسب عند ضغط الزر button هذا يدل على نجاح وسلامت عملية الربط.

لاحظ ايضا أن أي خاصية او سلوت لاي كائن (تقريباً) في مكتبة كيوت لا يعمل, المشكلة ليست مع ليبل وفقط.

main.cpp

#include <QApplication>
#include "testclass.h"


int main(int argc, char* argv[])
{

    QApplication app(argc, argv);
    TestClass testclass;

    testclass.show();

    return app.exec();
}

الف شكر على اهتمامك يا اخ مصفوفة وفي حفظ الكريم.

#4

شكرا لك

كما ذكرت لك في الرد الاول لم تعطي مؤشر صحيح ل lable .

شفت هذولي السطرين

QPushButton* button = new QPushButton("do something");
    QLabel* label = new QLabel("hallo world");

غيرها الى

button = new QPushButton("do something");
    label = new QLabel("hallo world");

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#5

ونعم باهل الحجاز

لا انكر اني ناشيء في لغة سي++ . تقريبا شهور قليلة.

الأخ الفاضل مصفوفة.

بارك الله فيك وكثر الله من امثالك.

قمت بتعديل المثال كما طلبت مني ونجح والحمدلله.

تقديري الخالص. في حفظ الكريم

#6

العفو أخي الكريم

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

مواضيع مشابهة