QT реализует помощника по серийной отладке (7): Создание панели настройки шрифта и передача значений между окнами

Предыдущая запись:
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. Таким образом вы можете установить шрифт, как показано ниже:

Здесь задаются только два атрибута текста: шрифт и размер. Конечно, вы можете установить больше. Методы те же. Просто добавьте еще несколько компонентов для настройки.

рекомендация

отblog.csdn.net/zhangfls/article/details/115265733