我目前正在进行应用程序的本地化工作。一切都按照我的预期进行翻译,但是QMessageBox
没有调整按钮大小以适应文本。
这是我用来生成问题框的代码,QTranslator
被包装在定义了MM_TR
的地方:
#include <QMessageBox>
void MainWindow::closeEvent( QCloseEvent * pEvent ) {
QMessageBox::StandardButtons iButtons = QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel;
QMessageBox::StandardButton iDefaultButton = QMessageBox::Save;
QMessageBox::StandardButton iButton = QMessageBox::question( this, QString::fromStdString( MM_TR( "ctxMessageBoxQuestion", "Save changes?" ) ), QString::fromStdString( MM_TR( "ctxMessageBoxQuestion", "Project has been modified, save changes?" ) ), iButtons, iDefaultButton );
}
我在互联网上搜索了一下是否有人遇到过同样的问题,但目前还没有找到任何确定性的东西。我尝试将大小策略设置为
Minimum
和MinimumExpanding
,但也不起作用。唯一有点作用的是设置样式表,我尝试使用以下代码: QMessageBox::StandardButtons iButtons = QMessageBox::Save | QMessageBox::Abort | QMessageBox::Cancel;
QMessageBox msgClose( QMessageBox::Question, "Test", "Test button translation resizing.", iButtons );
msgClose.setStyleSheet( "QPushButton {min-width:100;}" );
我认为手动根据出现的任何语言设置最小宽度不是正确的做法,因此我不想这样做。这也会更改所有推送按钮的宽度,这并不完全是我想要的。
我在想,现在唯一的选择是创建一个自定义对话框框?
更新: 我的最终解决方案包括cbuchart的答案以及样式表填充设置:
QMessageBox::StandardButtons iButtons = QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel;
QMessageBox msgClose( QMessageBox::Question, QString::fromStdString( MM_TR( "ctxMessageBoxQuestion", "Save changes?" ) ), QString::fromStdString( MM_TR( "ctxMessageBoxQuestion", "Project has been modified, save changes?" ) ), iButtons );
msgClose.setStyleSheet( "QPushButton {padding: 3px;}" );
msgClose.layout()->setSizeConstraint( QLayout::SizeConstraint::SetMinimumSize );
QMessageBox::StandardButton iButton = (QMessageBox::StandardButton)msgClose.exec();
这给了我这个: {{link1:
![法国按钮调整大小](https://istack.dev59.com/VgcJ7.webp)
需要注意的是,如果填充过多,它将开始覆盖文本 - 这一点我真的不明白 - 但3px似乎很好。
更新2:
在尝试了一下之后,我认为QMessageBox有一些固定的宽度与消息框文本本身相关联,无法修改。如果消息框文本足够长,按钮会自动调整大小并适应按钮文本,所以似乎按钮调整大小与按钮文本本身无关。
我尝试使用setMinimumWidth和setFixedWidth进行调整,但对话框根本不会调整大小。根据这个错误的评论QTBUG-7851,我认为QMessageBox无法通过编程方式调整大小。如果有人知道一个实际的解决方案,而不是制作一个自定义对话框,那就太好了。
更新3:
基于cbuchart的评论,我意识到有一个.qss样式表,其中有一个min-width设置导致QPushButton无法正确调整大小。
msgClose.setStyleSheet( "QPushButton {padding: 1px;}" );
,但不确定这是否是正确的方法? - cechow