كيف يمكنني تعيين لون خلفية القطعة مثل مربع تحرير وسرد أو مزدوجة تدور الصندوق ؟

StackOverflow https://stackoverflow.com/questions/177778

  •  05-07-2019
  •  | 
  •  

سؤال

أنا أحاول أن تعيين لون الخلفية تدور مزدوجة مربع, و أنا غير متأكد ما وظيفة يجب أن تستخدم.

لقد رأيت بعض من وظيفة تسمى SetBackgroundRole الذي يقبل Qt::ColorRole, ولكن أنا لست متأكدا من كيفية استخدام هذا واحد أيضا.

التكرم اسمحوا لي أن أعرف ما هي طريقة بسيطة لتغيير لون الخلفية من QComboBox أو QDoubleSpinBox?

هل كانت مفيدة؟

المحلول

<ع> استخدام غير مضمونة على QPalette للعمل لجميع الأساليب، لتقتصر الكتاب النمط من المبادئ التوجيهية للمنصات مختلفة "ومحرك موضوع الأصلي.

لتأكد من لون الخلفية الخاصة بك وسوف تكون صحيحة، وأود أن أقترح على استخدام كيو تي نمط ورقة . هنا هو ما فعلته لتغيير لون الخلفية لQComboBox:

وmyComboBox->setStyleSheet("QComboBox { background-color: blue; }");

ولم أحاول على وجه التحديد لQSpinBox، ولكن أعتقد أنها سوف تعمل نفس الشيء!

نصائح أخرى

وFHE هو الصحيح عموما، ولكن لا يأخذ في الحسبان الحاجيات (مثل صناديق تدور وأزرار / كومبوبوكسيس) التي تستخدم دورا خلفية مختلفة في لوحة. ومن شأن حل أعم يكون شيئا مثل هذا:

QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);

وبدلا من ذلك، هل يمكن أن ننظر إلى أوصاف لمختلف الأدوار لوحة ومعرفة واحدة تريد، ثم تطبيقه على القطعة التي تحتوي على الآخرين التي تريد تغييرها. يجب أن يتغير لوحة نشر إلى الحاجيات الأطفال.

في الواقع, إذا نظرتم إلى Qt مستندات QPalette في حالة QComboBox خلفية الدور هو ربما ليس ما تريد.ما تريده هو:

QPalette::قاعدة تستخدم في الغالب مثل لون الخلفية للنص دخول الحاجيات ، ولكن يمكن أن تستخدم أيضا لغيرها من اللوحة مثل الخلفية من مربع التحرير والسرد المنسدلة القوائم وشريط الأدوات مقابض.وهي عادة ما تكون بيضاء أو آخر لون الضوء.

حتى هنا هو رمز أنا باستخدام لتعيين لون الخلفية من مربع التحرير والسرد أنا باستخدام لتتناسب مع لون القطعة على:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);

وعلى ما يبدو في كيو تي 4.1 وما بعده، تحتاج إلى تعيين this->setAutoFillBackground( true ); لوحة لتطبيق لون الخلفية.

وعلى الرغم من أن الأجوبة السابقة قد تحدد لون الخلفية لQComboBox غير قابلة للتحرير، وأنها لا تعمل لQComboBox للتحرير. لهذه الحالة، تحتاج إلى اشتقاق القطعة QLineEdit المستخدمة في التحرير وإعادة خلفيتها.

وهنا هو كيف حصلت عليه للعمل:

    QComboBox *myComboBox = new QComboBox();
    myComboBox->setEditable(true);
    QColor backColor = QColor(246, 230, 230);
    QLineEdit *lineEditor = myComboBox->lineEdit();
    QPalette pal = lineEditor->palette();
    pal.setColor(QPalette::Base, backColor);
    lineEditor->setPalette(pal);

وبناء اللوحة التي هي الأزرق ومهما كانت القطعة الفعلية:

comboBox->setPalette( QPalette( Qt::blue ) );

وسوف أحاول شيء من هذا القبيل

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );

ويعمل بشكل جيد بالنسبة لي!

وأجوبة لا سابقا عملت بالنسبة لي، ولكن أنا قدمت مزيجا من جميع الردود وعملت أخيرا على على كيو تي 5.12 : ل

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top