รหัสต่อไปนี้จะแสดงกล่องโต้ตอบการป้อนข้อมูลด้วยปุ่ม "ยกเลิก" ทางด้านซ้ายและปุ่ม "ตกลง" ทางด้านขวา จะสลับตำแหน่งของปุ่มได้อย่างไร?
QInputDialog::getText(this, QString("Email"), QString("Enter email address:"), QLineEdit::Normal, QString(""), &ok, 0);
รหัสต่อไปนี้จะแสดงกล่องโต้ตอบการป้อนข้อมูลด้วยปุ่ม "ยกเลิก" ทางด้านซ้ายและปุ่ม "ตกลง" ทางด้านขวา จะสลับตำแหน่งของปุ่มได้อย่างไร?
QInputDialog::getText(this, QString("Email"), QString("Enter email address:"), QLineEdit::Normal, QString(""), &ok, 0);
เมื่อพูดถึงลำดับปุ่ม 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);
}