我想创建一个简单的关于对话框,但注意到QMessageBox::about
没有将其大小调整为标题的长度(由于字体较大,通常会更长...至少在我的桌面上环境),仅限于内容。有没有办法确保对话框足够大,以显示所有标题?我当然可以为aboutText添加空格,但我希望不那么讨厌的解决方案。
示例:
QString titleText("Some title which is slightly longer");
QString aboutText("Short about text");
QMessageBox::about(this,titleText,aboutText);
目前上面的代码只给我“Some ...”作为标题字符串。我已经使用Qt 4.7在Ubuntu上用Eclipse构建了程序。
答案 0 :(得分:3)
使用" setStyleSheet()" " QMessageBox"的功能。这是一个例子。
background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #787878, stop: 0.5 #404040, stop: 0.6 #303030, stop: 0.8 #252525, stop: 1 #151515);
border: 2px solid #05b8cc;
border-radius: 8px;
color: white;
min-width: 300px;
min-height: 80px;
它还会影响" QMessageBox"其样式表可以通过迭代它们来恢复。要访问孩子,请使用" findChildren(QWidget)"。
答案 1 :(得分:1)
我相信QMessageBox
会调整大小以适应窗口标题,但由于某种原因,它在我的系统上也无法正常工作,不确定它是否是错误或功能,这是在{ {3}} QMessageBoxPrivate::updateSize()
方法。
我注意到的另一件事是你正在使用QMessageBox
类的实例来调用qmessagabox.cpp方法,这是静态的,你可以只使用类名来执行它:{ {1}}。
调整窗口大小可以做的是创建自己的QMessageBox::about(..)
子类并在showEvent方法中调整窗口的最小宽度,有关详细信息,请参阅下面的示例:
QMessageBox
以下是您可以调用的方式:
class MyMessageBox : public QMessageBox
{
public:
explicit MyMessageBox(QWidget *parent = 0) : QMessageBox(parent) { }
MyMessageBox(const QString &title, const QString &text, Icon icon,
int button0, int button1, int button2,
QWidget *parent = 0,
Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint) :
QMessageBox(title, text, icon, button0, button1, button2, parent, f) { }
static void about(QString title, QString text)
{
MyMessageBox aboutBox(title, text, QMessageBox::Information, 0, 0, 0, NULL);
aboutBox.setText(title);
aboutBox.setText(text);
QIcon icon = aboutBox.windowIcon();
QSize size = icon.actualSize(QSize(64, 64));
aboutBox.setIconPixmap(icon.pixmap(size));
aboutBox.exec();
}
void showEvent(QShowEvent *event)
{
QMessageBox::showEvent(event);
QWidget *textField = findChild<QWidget *>("qt_msgbox_label");
if (textField != NULL)
{
// getting what ever my system has set for the window title font
QFont font = QFont("Ubuntu Bold", 11);
// you might want to make it more generic by detecting the actuall font
// or using smth like this:
//QFont font = QApplication::font("QWorkspaceTitleBar");
QFontMetrics fm(font);
int width = qMax(fm.width(windowTitle()) + 50, textField->minimumWidth());
textField->setMinimumWidth(width);
}
}
};
希望这有帮助,尊重