Предыдущая запись:
QT реализует помощника по серийной отладке (6): макет страницы
Общие инструменты отладки последовательного порта имеют функциональную панель для изменения шрифта поля приема последовательного порта, давайте добавим один:
1. Сначала создайте панель настройки шрифта.
Например, если мы создадим виджет и назовем его класс letterFormWindow, QTcreator автоматически сгенерирует файлы .cpp, .h и .ui.
2. Добавьте некоторые компоненты в интерфейс пользовательского интерфейса, как показано на рисунке:
3. Теперь вернитесь к записи файла основного интерфейса и добавьте кнопку быстрого доступа на панели команд основного интерфейса.
QMenuBar *menuBar = ui->menuBar;
QAction *letterPanlAct = menuBar->addAction("字体设置");
4. Привяжите эту кнопку быстрого доступа к созданию окна letterFormWindow прямо сейчас, поэтому щелкните сочетание клавиш, чтобы вызвать панель настройки шрифта.
connect(letterPanlAct,&QAction::triggered,
[=] ()
{
if(letterFormUi == NULL)
{
letterFormUi = new letterFormWindow;
connect(letterFormUi, SIGNAL(sendFont(QFont)), this, SLOT(receiveFont(QFont)));
}
letterFormUi->show();
}
);
5. Обратите внимание на это предложение connect (letterFormUi, SIGNAL (sendFont (QFont)), this, SLOT (receiveFont (QFont))), привяжите событие функции sendFont субинтерфейса к функции receiveFont основного интерфейса, которая используется для подключения субинтерфейса. Установленный шрифт передается в основной интерфейс для модификации.
6. Реализация субинтерфейса: заголовочный файл.
class letterFormWindow : public QWidget
{
Q_OBJECT
public:
explicit letterFormWindow(QWidget *parent = 0);
~letterFormWindow();
private slots:
void on_buttonBox_accepted();
void on_fontComboBox_currentFontChanged(const QFont &f);
void on_spinBox_valueChanged(int arg1);
void ChangeFont(void);
signals:
void sendFont(QFont); //用来传递数据的信号
private:
Ui::letterFormWindow *letterUi;
QFont tempFont; //缓存字体
};
CPP файл:
#include "letterformwindow.h"
#include "ui_letterformwindow.h"
letterFormWindow::letterFormWindow(QWidget *parent) :
QWidget(parent),
letterUi(new Ui::letterFormWindow)
{
letterUi->setupUi(this);
letterUi->spinBox->setValue(10);
}
letterFormWindow::~letterFormWindow()
{
delete letterUi;
}
void letterFormWindow::on_buttonBox_accepted()
{
emit sendFont(tempFont); //向主界面传递该字体
this->hide();
}
void letterFormWindow::on_fontComboBox_currentFontChanged(const QFont &f)
{
tempFont.setFamily(f.family());
ChangeFont();
}
void letterFormWindow::on_spinBox_valueChanged(int arg1)
{
tempFont.setPointSize(arg1);
ChangeFont();
}
void letterFormWindow:: ChangeFont(void)
{
letterUi->label->setFont(tempFont);
}
7. Создайте функцию приема основного интерфейса, получите шрифт QFont из панели настройки шрифта и обновите шрифт текста в поле приема последовательного порта.
//接收字体窗口
void MainWindow::receiveFont(QFont font)
{
ui->uartReadPlain->setFont(font);
}
8. Объявите интерфейс окна шрифтов в заголовочном файле основного интерфейса (в основном, чтобы открывать последнее открывавшееся окно, а не каждый раз открывать новое).
private:
Ui::MainWindow *ui;
letterFormWindow *letterFormUi = NULL; //字体窗口
9. Таким образом вы можете установить шрифт, как показано ниже:
Здесь задаются только два атрибута текста: шрифт и размер. Конечно, вы можете установить больше. Методы те же. Просто добавьте еще несколько компонентов для настройки.