QDialog غير قابل لتغيير الحجم مع حجم ثابت في كيو تي؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

لدي تطبيق الحوار كيو تي.الآن لا أريد أن يكون مربع الحوار هذا قابلاً لتغيير الحجم.لست متأكدا من كيفية تحقيق ذلك.لقد جربت مجموعة من الأشياء ولكن لا يزال من الممكن تغيير حجم مربع الحوار هذا عند بدء تشغيل مربع الحوار.

ما هي الخاصية التي يجب أن أقوم بتعيينها لتعطيل تغيير حجم الحوار/القطعة.

لقد حاولت أيضًا

setSizePolicy(QSizePolicy::Fixed);

لكني أخطأت في القول..

source\nimcac_settingsMain.cpp(36) : error C2248:
**'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'**
        p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\
kernel\qsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy'
        p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\
kernel\qsizepolicy.h(34) : see declaration of 'QSizePolicy'

يرجى مساعدتي في هذا.

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

المحلول

وأنا لا أعرف ما إذا كنت بالفعل حاولت ذلك، ولكن QWidget::setFixedSize يجب أن تفعل ما تريد

نصائح أخرى

والخطأ الترجمة الذي تحصل عليه هو بسبب محاولة تمرير QSizePolicy::Policy إلى setSizePolicy(QSizePolicy)، ولكن ليس هناك التحويل الضمني من QSizePolicy::Policy (التي هي سياسة لبعد واحد) إلى QSizePolicy (والتي هي فئة تحتوي على، من بين أمور أخرى، واحدة Policy في البعد (الطول والعرض)). لا تعمل QSizePolicy على الحاجيات المستوى الأعلى (ويندوز) على أي حال، بالرغم من ذلك.

وsetFixedSize() يعمل فقط إذا كنت تعرف حجم الحوار مقدما (وعادة لم تقم بذلك، مع ما تغيير أحجام الخطوط واللغات). يمكنك أن تفعل

window()->setFixedSize( window()->sizeHint() );

ولكن من الأفضل بكثير لاستخدام

window->layout()->setSizeConstraint( QLayout::SetFixedSize );

وهذا يتيح للتخطيط تحديد حجم الحوار، ولكن لا يسمح تغيير الحجم، والتي افترض هو ما كنت طالبا.

this->setFixedSize(this->width(),this->height());

تحتاج إلى تغيير windowFlags في مربع الحوار وتعيينه على Qt::MSWindowsFixedSizeDialogHint.

هذا يعمل فقط في النوافذ.

لمزيد من المعلومات يرجى الاطلاع على هذا المثال:http://doc.qt.digia.com/4.5/widgets-windowflags.html

إذا كنت تستخدم QtCreator (طبعا أنت) يمكنك تعيين HorizontalsizePolicy الملكية لسياسة عمودي الثابتة وأيضا الثابتة. ثم يمكنك تعيين maximumSize إلى الأبعاد التي تريدها. سوف نافذة لا تعظيم مرة أخرى.

في QT الخالق، في محرر UI، انقر على الكائن الأعلى في إطار خصائص، ثم انتقل إلى أسفل في الجزء تخطيط. يجب أن تشاهد الملكية layoutSizeConstraint.

وتعيين layoutSizeConstraint إلى SetFixedSize.

في الكود يمكنك القيام بشيء مثل هذا،

Dialog->resize(581, 292);
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(WaterLevelEditorDialog->sizePolicy().hasHeightForWidth());
Dialog->setSizePolicy(sizePolicy);
Dialog->setMinimumSize(QSize(581, 292));
Dialog->setMaximumSize(QSize(581, 292));
Dialog->setSizeGripEnabled(false);

في QtCreator قم بما يلي،

  1. حدد عنصر واجهة مستخدم مربع الحوار
  2. حدد موقع عنصر واجهة مستخدم مربع الحوار في نافذة الكائن
  3. في نافذة الكائن، انقر بزر الماوس الأيمن على كائن مربع الحوار لتظهر قائمة منبثقة
  4. حدد "قيود الحجم" -> "تعيين الحد الأقصى للحجم" من القائمة
  5. انقر بزر الماوس الأيمن مرة أخرى على كائن الحوار لتظهر قائمة منبثقة
  6. حدد "قيود الحجم" -> "تعيين الحد الأدنى للحجم"
  7. في نافذة الملكية،
    • تأكد من أن "sizePolicy" -> "السياسة الأفقية" لها قيمة "ثابتة"
    • تأكد من أن "sizePolicy" -> "السياسة العمودية" لها قيمة "ثابتة"
    • تأكد من عدم تحديد "sizeGripEnabled".

ومن وثائق كيو تي، طريقة setSizePolicy() إما يأخذ حجة الصفر أو حجتين ولكن لا يمكن أن تكون وسيطة واحدة. لهذا السبب تحصل على هذا الخطأ تجميع. من تجربتي، إذا لم يتم تعيين حجم ثابت. هذه الطريقة لا يوجد لديه الاستخدام. نافذة يمكن أن يكون لا يزال يمكن تغيير حجم.

في حال كنت تقوم بتصميم واجهة المستخدم في QML وإطلاق باستخدام QDeclarativeView، حاول رمز أدناه.

QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());

وهنا مشتق من QmlApplicationViewer QDeclarativeView.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top