จะสลับปุ่มยกเลิกและตกลงบนวิดเจ็ต QInputDialog ได้อย่างไร

รหัสต่อไปนี้จะแสดงกล่องโต้ตอบการป้อนข้อมูลด้วยปุ่ม "ยกเลิก" ทางด้านซ้ายและปุ่ม "ตกลง" ทางด้านขวา จะสลับตำแหน่งของปุ่มได้อย่างไร?

QInputDialog::getText(this, QString("Email"), QString("Enter email address:"), QLineEdit::Normal, QString(""), &ok, 0);

person Talespin_Kit    schedule 07.04.2015    source แหล่งที่มา


คำตอบ (1)


เมื่อพูดถึงลำดับปุ่ม Qt จะเป็นไปตามแบบแผนของสภาพแวดล้อมที่มันทำงานอยู่ เช่น Ok/Cancel บน Windows, KDE ฯลฯ และ Cancel/OK บน OS X, Gnome เป็นต้น โดยทั่วไปนั่นเป็นสิ่งที่ดีอย่างหนึ่ง ไม่ควรทำให้ผู้ใช้ประหลาดใจด้วยลำดับปุ่มนอกเหนือจากค่าเริ่มต้นของแพลตฟอร์ม

อย่างไรก็ตาม หากคุณมีเหตุผลที่ดีในการแทนที่ค่าเริ่มต้นของแพลตฟอร์ม (ฉันนึกไม่ออกเลย) หรือหากคุณเป็นเช่นนั้น บนแพลตฟอร์มแบบฝังที่ไม่มีค่าเริ่มต้นของแพลตฟอร์ม คุณต้องแทนที่สิ่งที่ QStyle ที่ใช้กำหนดไว้

ใช้ รูปแบบพร็อกซี ของคุณเอง โดยแทนที่ค่าที่ส่งคืนสำหรับ QStyle::SH_DialogButtonLayout:

int ProxyStyle::styleHint(StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const override {
   if (hint == SH_DialogButtonLayout) {
       return QDialogButtonBox::WinLayout;
   }
   return baseStyle()->styleHint(hint, option, widget, returnData);
}
person Frank Osterfeld    schedule 07.04.2015