如何使用 QPalette 自定义 Qpushbutton 上的文本?

Posted

技术标签:

【中文标题】如何使用 QPalette 自定义 Qpushbutton 上的文本?【英文标题】:How to customize text on Qpushbutton using QPalette? 【发布时间】:2016-10-21 13:50:58 【问题描述】:

Qt5.6.1中如何使用QPaletteQPushButton的Text设置字体、大小和颜色?我很想知道我们如何在 Qt 中不使用 QStyleSheet 来设置这些属性。还有我们如何在 QT 中设置颜色的十六进制代码。 请提出任何使用 QPalette 的方法。 谢谢

【问题讨论】:

你看过文档吗? QPushButton 继承 QWidget 具有 fontpalette 属性。 【参考方案1】:

Qt5.6.1中如何使用QPalette为QPushButton的Text设置字体、大小和颜色?

QPalette 包含每个小部件状态的颜色组。它不包含字体/大小信息。

您可以使用QWidget::setPalette() 更改特定的color roles(按钮、ButtonText、窗口...),并使用QWidget::setFont() 更改字体系列/大小。例如:

QPushButton button("Press Me");
//get initial default palette
QPalette pal= button.palette();
//change some color roles
pal.setColor(QPalette::Window, QColor(255, 0, 0)); //red color
pal.setColor(QPalette::Button, QColor(0x00, 0x00, 0xff)); //blue color (hex representation)
pal.setColor(QPalette::ButtonText, QColor(Qt::yellow)); //Qt global color
button.setPalette(pal);
//change font family and size
button.setFont(QFont("Helvetica [Cronyx]", 15, QFont::Bold));

为了使调色板正常工作,您可能需要首先在应用程序中使用 Fusion 样式,方法是调用:

QApplication::setStyle(QStyleFactory::create("Fusion"));

main() 中实例化QApplication 实例之前,因为某些样式不使用调色板进行所有绘图,例如,如果它们使用本机主题引擎。 Windows XP、Windows Vista 和 OS X 样式都是这种情况。

此外,您可能希望在整个应用程序上设置调色板/字体,以便在应用程序的所有小部件中获得这些颜色。像这样的:

#include <QtWidgets>

int main(int argc, char** argv)

    QApplication::setStyle(QStyleFactory::create("Fusion"));
    QPalette pal= QApplication::palette();
    pal.setColor(QPalette::Window, QColor(Qt::red));
    pal.setColor(QPalette::Button, QColor(Qt::blue));
    pal.setColor(QPalette::ButtonText, QColor(Qt::yellow));
    pal.setBrush(QPalette::WindowText, QBrush(QColor(Qt::yellow)));
    pal.setColor(QPalette::Highlight, QColor(Qt::green));
    //further palette customization. . . 
    QApplication::setPalette(pal);
    QApplication::setFont(QFont("Helvetica [Cronyx]", 15, QFont::Bold));

    QApplication a(argc, argv);

    //setup and show GUI components

    return a.exec();

【讨论】:

【参考方案2】:

我同意上述观点。 以下是使用 QWidgets 实现字体自定义的另一种方法。

QPushButton *button3 = new QPushButton("CheckFont", this);
button3->setGeometry(QRect(QPoint(50,50),QSize(200,50)));
QFont FontObj;
FontObj.setFamily(QStringLiteral("Helvetica [Cronyx]"));
FontObj.setPointSize(15);
FontObj.setBold(true);
FontObj.setUnderline(true);
button3->setFont(FontObj);

此外,当颜色代码的格式为"#ffffff"(即白色代码)时,您可以使用以下方式使用 QPalette 设置十六进制颜色代码。

pal.setColor(QPalette::Button, QColor(QRgb("#ffffff")));

pal.setColor(QPalette::Button, QColor("#ffffff"));

【讨论】:

以上是关于如何使用 QPalette 自定义 Qpushbutton 上的文本?的主要内容,如果未能解决你的问题,请参考以下文章

PYQT学习之自定义信号

如何在 PyQt/PySide 中获取 QPalette 的组和角色?

如何在 QPalette 中使用 QPROPERTY?

如何更改 QPalette 的当前颜色组

QPalette 初学者 - 从哪里开始

如何从 QWidget 中删除 QPalette