如何将QT标准对话框中按钮的“Yes/No转换成中文的“是/否”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将QT标准对话框中按钮的“Yes/No转换成中文的“是/否”?相关的知识,希望对你有一定的参考价值。

如以下代码,在手机上显示的按钮分别是“Yes”和“No”,我该如何将这个"Yes/No"自动显示成中文的“是/否”。(诺基亚手机5325,联通定制3G手机)QTextCodec *codec = QTextCodec::codecForName("GB2312");QMessageBox::StandardButton rb = QMessageBox::question(this, codec->toUnicode("操作确认"), codec->toUnicode("是否确定退出系统?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);谢谢!

switch( QMessageBox::
information
( this, "Application name here",

        "The document contains unsaved changes\\n"

        "Do you want to save the changes before exiting?",

        "&Save", "&Discard", "Cancel",

        0,      // Enter == button 0

        2 ) )  // Escape == button 2

    case 0: // Save被点击或者Alt+S被按下或者Enter被按下。

        // 保存

        break;

    case 1: // Discard被点击或者Alt+D被按下。

        // 不保存但退出

        break;

    case 2: // Cancel被点击或者Alt+C被按下或者Escape被按下。

        // 不退出

        break;

参考技术A QMessageBox::information(this,NULL,tr("系统将会重启,继续?"),tr("是"),tr("否")) 在编辑 选择编码那 选一下编码方式 UTF8 参考技术B 如果你想这样就不能使用QMessageBox::question静态方法了,要自己构造一个QMessageBox,然后再调用QMessageBox::addButton(const QString& text, ButtonRole role)来设置相应button上的文字 参考技术C 回复 2# 模拟器上能出来中文???试了好多次,每次都是乱码!!

如何将对话框锚定到listview qt qml中的按钮

【中文标题】如何将对话框锚定到listview qt qml中的按钮【英文标题】:How to anchor a dialog to a button in listview qt qml 【发布时间】:2020-10-24 13:17:36 【问题描述】:

我有一排带有按钮的列表视图委托。单击按钮时,我需要在该按钮下方打开一个对话框。我尝试了 mapToItem 属性并部分成功,但此列表视图是可滚动的,并且在滚动对话框时,它会保持在其初始位置。不确定如何让它工作。此外,发布问题的新手。如果我含糊不清,请忽略并帮助我。

我要打开的对话框位于此委托之外。我提供了我的代码的简短大纲。

Listview
delegate: Row
  Button1
   
  Button2
   id: button2Id
   onCheckedChanged
    var coords = button2Id.mapToItem(null,0,0)
    dialogId.x = coords.x
    dialogId.y= coords.y 
    dialogId.visible = true
    
  
 


//dialog rect outside of my listview
Rectangle
id: dialogId

【问题讨论】:

【参考方案1】:

您可以将对话框添加到列表的突出显示项。我对您的示例进行了一些修改,以便可以对其进行测试。我将您的Rectangle 封装在Item 中,因为ListView 控制突出显示的根对象的大小和位置。然后Rectangle 只需锚定到Item 的底部。

    ListView 
        id: lv
        width: 200
        height: parent.height
        model: 50
        spacing: 1
        currentIndex: -1
        delegate: Row 
            spacing: 1
            height: 40
            Button 
                text: index
            
            Button 
                id: button2Id
                text: ">"
                onClicked: 
                    lv.currentIndex = index;
                
            
        

        highlight: Item   // ListView controls the size/pos of this Item
            z: 1

            Rectangle 
                id: dialogId
                anchors.top: parent.bottom  // Anchor to bottom of parent
                width: 200
                height: 100
                color: "red"
            
        
    

更新:

这是一种使对话框直接位于按钮下方而不计算边距的方法。我把它放在Loader 中,这样列表中的每个项目并不总是随身携带整个对话框。它可能会产生性能差异。

这个解决方案的丑陋部分是 z 排序。列表中的每个项目都绘制在它之前的项目之后。 (我实际上不确定这是否得到保证。)这意味着对话框会被绘制在列表中它之后的任何项目下方。我可以通过将列表中每个项目的 z 值更改为小于它之前的项目来解决这个问题。

ListView 
    id: lv
    width: 200
    height: parent.height
    model: 50
    spacing: 1
    currentIndex: -1
    delegate: Row 
        z: lv.count - index // <<- z-value fix
        spacing: 1
        height: 40
        Button 
            text: index
        
        Button 
            id: button2Id
            text: ">"
            onClicked: 
                lv.currentIndex = index;
            

            Loader 
                anchors.top: parent.bottom
                asynchronous: true
                sourceComponent: (index === lv.currentIndex) ? dialogComp : null
            
        
    


Component 
    id: dialogComp
    Rectangle 
        id: dialogId
        width: 200
        height: 100
        color: "red"
    

【讨论】:

谢谢。有效!只是想知道是否有任何方法可以将对话框直接放在按钮下方而不是使用边距? 您只能将对象锚定到其直接父级或兄弟级。因此,理论上您可以使对话框成为按钮的子级或兄弟级,但我不推荐这样做。这意味着列表中的每个项目都会有一个对话框实例。 我想这可以通过Loader 来改进。我将进行更新,展示如何完成。 我一直在尝试使对话框在单击按钮时可见。除了您的代码之外,我还添加了 Button2 onClicked dialogId.visible = true 并为 dialogId 设置了 visible: false 。但是,即使在定义别名时,我也会收到属性未定义错误。为什么会这样? 当您单击按钮时,我的代码已经显示了对话框。我不确定你错过了什么。

以上是关于如何将QT标准对话框中按钮的“Yes/No转换成中文的“是/否”?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 标准对话框示例:打开文件

QT软件开发之基础控件--2.1.6 buttonBox按钮盒

如何将对话框锚定到listview qt qml中的按钮

QT学习三 标准对话框 QMessageBox

4.1 标准消息对话框

如何修改Qt标准对话框的文字