QMessageBox自定义按钮文本中文显示,按钮个数等

背景:

个人笔记。

我已经习惯了qt默认英文显示,但是给客户交付软件终归还是要中文,不想把代码写死,又不想做翻译文件和tr()函数。还是因为懒。按理说,应该规矩一些使用tr函数,但规模小或者需求定向固定的情况下,也可以有一些方法。

方法:

经过实验发现,QMessageBox其实挺简单,qt已经把它包装得很通用化了。可以这样粗暴地认为:就一种对话框,无非就是图标和按钮个数的区别。当然infomation,warning,question主要决定了图标,而图标性质不同,决定了报警风格,甚至是报警声音(没测试,理论上是)。

如此,就容易记忆了。

qt手册里写的都是所谓的“标准”用法,英文模式的话,可以用枚举指定按钮,见名知意。但自定义模式,我没看到详细说明。所以自己总结了一下。只说static函数即可。通常就几个参数:

一般用的是参数最多那个重载。

    static int information(QWidget *parent, const QString &title,
                           const QString& text,
                           const QString& button0Text,
                           const QString& button1Text = QString(),
                           const QString& button2Text = QString(),
                           int defaultButtonNumber = 0,
                           int escapeButtonNumber = -1);
    static int question(QWidget *parent, const QString &title,
                        const QString& text,
                        const QString& button0Text,
                        const QString& button1Text = QString(),
                        const QString& button2Text = QString(),
                        int defaultButtonNumber = 0,
                        int escapeButtonNumber = -1);
    static int warning(QWidget *parent, const QString &title,
                       const QString& text,
                       const QString& button0Text,
                       const QString& button1Text = QString(),
                       const QString& button2Text = QString(),
                       int defaultButtonNumber = 0,
                       int escapeButtonNumber = -1);

很明显这三种用法都一样。

parent:指定对话框的父级对象。如果不指定,对话框是相对于整个application的。如果指定了,比如我为窗体指定了qss,它会顺延到对话框。

titile和text就不用说了。

button*Text可以分别指定按钮文本,指定几个就显示几个按钮。不用管它怎么和那些枚举对应上,用惯了枚举思维就禁锢了,其实没必要。随便根据需要指定就好。

defaultButtonNumber指定默认按钮的索引号,也就是直接按回车是哪个按钮。刚才那三个按钮编号是0,1,2。

escapeButtonNumber指定按esc执行的那个按钮的索引号。

下面直接按照三个按钮的方式举例,如果是两个或者一个按钮,酌情调整即可。

举例:

    int iBtn = QMessageBox::information(this, "标题", "文本", "是", "否", "取消", 0, 2);
    switch (iBtn) {
    case 0:
        QMessageBox::information(this, "", "是");
        break;
    case 1:
        QMessageBox::information(this, "", "否");
        break;
    case 2:
        QMessageBox::information(this, "", "取消");
        break;
    default:
        break;
    }

上面代码把information换成warning和question就是下面这样:

除了图标都一样,就是风格问题。当选择某个按钮之后,判断int返回值即可。

假设要显示两个或者一个按钮,那就把buttonText只设置一个就行了,后面对应的defaultButtonNumber和escapeButtonNumber记者对应好,别指定无效值就行。

如此以来,对话框可以随便定制按钮,甚至比qt预定义的枚举更灵活。

本文完。

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QMessageBox类可以通过setStandardButtons()函数设置标准按钮文本。例如,可以使用以下代码设置“Yes”按钮和“No”按钮文本: m_msgbox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); m_msgbox.button(QMessageBox::Yes)->setText("继续等待"); m_msgbox.button(QMessageBox::No)->setText("直接关闭"); 此外,还可以使用addButton()函数在消息框中添加自定义按钮,并设置其文本。例如,可以使用以下代码设置名为"buttonLOG"和"buttonGPSFIX"的两个自定义按钮文本: QPushButton buttonLOG = (m_msgbox.addButton(tr("继续等待"), QMessageBox::AcceptRole)); QPushButton buttonGPSFIX = (m_msgbox.addButton(tr("直接关闭"), QMessageBox::YesRole)); 请注意,第一种方法使用button()函数来获取标准按钮的指针,并使用setText()函数设置文本。而第二种方法使用addButton()函数添加自定义按钮,并直接设置其文本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PyQt5基本控件之QMessageBox](https://download.csdn.net/download/weixin_38672815/13753539)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [QMessageBox设置按钮自定义文本的两种方式](https://blog.csdn.net/weixin_43246170/article/details/119034380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值