问题: 在编写小案例的过程中需要使用一个文本容器用于显示文本效果, 因为涉及文本字体的 加粗
, 倾斜
, 下划线
, 以及颜色
效果, 这里使用了 Text Edit 组件, 但是使用后发现容器中的文本无法实现同时设置 加粗 倾斜 下划线
的情况, 且单独设置时只有 下划线
有效果, 加粗 倾斜
均无效, 而文本颜色切换显示正常.
如下, 在同时勾选 加粗 倾斜 下划线
时, 仅有下划线生效
如下, 单独设置三者时, 仅有下划线有效
解决过程:
在排除完代码逻辑问题后, 选择使用 Plain Text Edit 替换 Text Edit 进行测试, 结果发现 Plain Text Edit 可以同时设置 加粗 倾斜 下划线
, 且单独设置三者时也是有效的
效果如下
总结:
如果有对文本同时设置 加粗 倾斜 下划线
或者单独设置 加粗 倾斜
需求的话可以使用 Plain Text Edit , 具体的原因暂时不知道, 记住就好了
案例代码分享如下
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
private slots:
void on_clearBtn_clicked();
void do_change_color();
void do_change_font();
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
this->setFixedSize(600, 400);
connect(ui->redBtn, SIGNAL(clicked(bool)), this, SLOT(do_change_color()));
connect(ui->blueBtn, SIGNAL(clicked(bool)), this, SLOT(do_change_color()));
connect(ui->blackBtn, SIGNAL(clicked(bool)), this, SLOT(do_change_color()));
connect(ui->underlineBox, SIGNAL(clicked(bool)), this, SLOT(do_change_font()));
connect(ui->boldBox, SIGNAL(clicked(bool)), this, SLOT(do_change_font()));
connect(ui->italicBox, SIGNAL(clicked(bool)), this, SLOT(do_change_font()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_clearBtn_clicked()
{
ui->textEdit->clear();
}
void Dialog::do_change_color()
{
QPalette palette = ui->textEdit->palette();
if(ui->redBtn->isChecked()){
palette.setColor(QPalette::Text, Qt::red);
}else if(ui->blueBtn->isChecked()){
palette.setColor(QPalette::Text, Qt::blue);
}else if(ui->blackBtn->isChecked()){
palette.setColor(QPalette::Text, Qt::black);
}
ui->textEdit->setPalette(palette);
}
void Dialog::do_change_font()
{
QFont font = ui->textEdit->font();
font.setUnderline(ui->underlineBox->isChecked());
font.setItalic(ui->italicBox->isChecked());
font.setBold(ui->boldBox->isChecked());
ui->textEdit->setFont(font);
}
main.cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
gitee仓库地址: https://gitee.com/ml_coding/qt.git