كيف يمكنني إخفاء/حذف "؟" زر المساعدة على "شريط العنوان" في مربع الحوار QT؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أستخدم Qt Dialogs في أحد تطبيقاتي.أحتاج إلى إخفاء/حذف زر المساعدة.لكنني غير قادر على تحديد المكان الذي يمكنني فيه تحديد زر المساعدة الخاص به بالضبط.لست متأكدًا مما إذا كانت علامة معينة على نافذة Qt.

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

المحلول

بشكل افتراضي كيو تي::WindowContextHelpButtonHint تتم إضافة العلم إلى مربعات الحوار.يمكنك التحكم في هذا من خلال WindowFlags المعلمة إلى منشئ الحوار.

على سبيل المثال، يمكنك تحديد فقط تلميح العنوان و قائمة النظام الأعلام عن طريق القيام:

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

إذا قمت بإضافة كيو تي::WindowContextHelpButtonHint العلم سوف تحصل على زر المساعدة مرة أخرى.

في PyQt يمكنك القيام بما يلي:

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

يمكن العثور على مزيد من التفاصيل حول أعلام النوافذ على تعداد نوع النافذة في وثائق كيو تي.

نصائح أخرى

// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

حسنًا، لقد وجدت طريقة للقيام بذلك.

إنه يتعامل مع أعلام النافذة.إذن هذا هو الكود الذي استخدمته:

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

ولكن من خلال القيام بذلك في بعض الأحيان تتم إعادة تعيين رمز مربع الحوار.لذا، للتأكد من عدم تغير أيقونة مربع الحوار، يمكنك إضافة سطرين.

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);

لقد واجهت هذه المشكلة في نظام التشغيل Windows 7 وQt 5.2، وكانت مجموعة العلامات التي عملت بشكل أفضل بالنسبة لي هي:

qt :: windowtitlehint | qt :: windowclosebuttonhint

هذا يعطيني زر إغلاق يعمل ولكن لا يوجد زر تعليمات لعلامة الاستفهام.باستخدام Qt::WindowTitleHint أو Qt::WindowSystemMenuHint فقط، تخلصت من زر المساعدة، ولكنها عطلت أيضًا زر الإغلاق.

كما اقترح مايكل بيشوب، كان اللعب بمثال أعلام النوافذ هو الذي قادني إلى هذا المزيج.شكرًا!

اعتبارًا من Qt 5.10، يمكنك تعطيل هذه الأزرار عالميًا باستخدام زر واحد QApplication يصف!

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);

الإجابات المذكورة هنا ستعمل، ولكن للإجابة عليها بنفسك، أنصحك بتشغيل البرنامج النموذجي $QTDIR/examples/widgets/windowflags.سيسمح لك ذلك باختبار جميع تكوينات أعلام النوافذ وتأثيراتها.مفيد جدًا في اكتشاف مشكلات أعلام النوافذ السنجابية.

يمكن استخدام الطريقة التالية لإزالة علامات الاستفهام بشكل افتراضي لجميع مربعات الحوار في التطبيق:

قم بإرفاق عامل تصفية الحدث التالي إلى QApplication في مكان ما في بداية البرنامج:

  bool eventFilter (QObject *watched, QEvent *event) override
  {
    if (event->type () == QEvent::Create)
      {
        if (watched->isWidgetType ())
          {
            auto w = static_cast<QWidget *> (watched);
            w->setWindowFlags (w->windowFlags () & (~Qt::WindowContextHelpButtonHint));
          }
      }
    return QObject::eventFilter (watched, event);
  }

لم أتمكن من العثور على فتحة ولكن يمكنك تجاوز الفتحة الافتراضية winEvent وظيفة.

#if defined(Q_WS_WIN)
bool MyWizard::winEvent(MSG * msg, long * result)
{
    switch (msg->message)
    {
    case WM_NCLBUTTONDOWN:
        if (msg->wParam == HTHELP)
        {

        }
        break;
    default:
        break;
    }
    return QWizard::winEvent(msg, result);
}
#endif
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top