需求描述
在QT5中如何实现窗口显示最大化和最小化按钮?
解决方案
代码实现
dialog.cpp中添加如下代码:
// 设置窗体最大化和最小化
Qt::WindowFlags windowFlag = Qt::Dialog;
windowFlag |= Qt::WindowMinimizeButtonHint;
windowFlag |= Qt::WindowMaximizeButtonHint;
windowFlag |= Qt::WindowCloseButtonHint;
setWindowFlags(windowFlag);
完整代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>
#include <QDebug>
#include <QTextCodec> //中文支持
#include <QDir>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
/*********************/
// 设置窗体最大化和最小化
Qt::WindowFlags windowFlag = Qt::Dialog;
windowFlag |= Qt::WindowMinimizeButtonHint;
windowFlag |= Qt::WindowMaximizeButtonHint;
windowFlag |= Qt::WindowCloseButtonHint;
setWindowFlags(windowFlag);
this->setWindowTitle("串口控制LED - 软件开发大郭 grabbyte.com");
connect(&serial, & QSerialPort::readyRead, this, &Dialog::serialPort_readyRead);
ui->cbb_com->clear();
//运行开始查找可用串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->cbb_com->addItem(info.portName()); //串口号下拉菜单,增加一个条目,为串口号COM4
//qDebug() << "串口搜索完成";
}
//设置常见波特率
ui->cbb_baud->insertItem(0, "9600");
ui->cbb_baud->insertItem(1, "115200");
ui->cbb_baud->insertItem(2, "自定义");
//初始化按钮失能
this->ui->btn_led1_Ctrl->setDisabled(true); //LED控制不可用
this->ui->btn_led2_Ctrl->setDisabled(true);
this->ui->btn_send->setDisabled(true);
this->ui->te_tx_buf->setDisabled(true);
this->ui->tb_rx_buf->document()->setMaximumBlockCount(10);//设置显示框最大行数为10行
qDebug() << QDir::currentPath();
}
Dialog::~Dialog()
{
delete ui;
}
//打开串口按钮
void Dialog::on_btn_uart_Ctrl_clicked()
{
if(this->ui->btn_uart_Ctrl->text() == "打开串口") //初始状态,配置串口参数
{
serial.setPortName(ui->cbb_com->currentText()); //设置串口号、
serial.setBaudRate(ui->cbb_baud->currentText().toInt()); //设置波特率
serial.setDataBits(QSerialPort::Data8); //设置串口数据位8
serial.setParity(QSerialPort::NoParity); //无校验位
serial.setStopBits(QSerialPort::OneStop); //1位停止位
serial.setFlowControl(QSerialPort::NoFlowControl);
//打开串口
if(!serial.open(QIODevice::ReadWrite))
{
QMessageBox::critical(NULL, "提示", "串口打开失败");
return;
}
qDebug() << "串口打开成功";
this->ui->btn_uart_Ctrl->setText("关闭串口");
this->ui->btn_led1_Ctrl->setEnabled(true);
this->ui->btn_led2_Ctrl->setEnabled(true);
this->ui->btn_send->setEnabled(true);
this->ui->te_tx_buf->setEnabled(true);
}
else
{
//关闭串口
serial.close();
this->ui->btn_uart_Ctrl->setText("打开串口");
this->ui->btn_led1_Ctrl->setDisabled(true); //LED控制不可用
this->ui->btn_led2_Ctrl->setDisabled(true);
this->ui->btn_send->setDisabled(true);
this->ui->te_tx_buf->setDisabled(true);
}
}
//LED1控制按钮
void Dialog::on_btn_led1_Ctrl_clicked()
{
QPalette colr;
if(this->ui->btn_led1_Ctrl->text() == "点亮")
{
colr.setColor(QPalette::WindowText,Qt::red); //设置标签颜色红色
this->ui->lbe_red->setPalette(colr);
this->ui->btn_led1_Ctrl->setText("熄灭");
serial.write("A1\n"); //串口发送A1
}
else
{
colr.setColor(QPalette::WindowText,Qt::black);
this->ui->lbe_red->setPalette(colr); //设置标签颜色红色
this->ui->btn_led1_Ctrl->setText("点亮");
serial.write("A2\n"); //串口发送A2
}
}
//LED2控制按钮
void Dialog::on_btn_led2_Ctrl_clicked()
{
QPalette colr;
if(this->ui->btn_led2_Ctrl->text() == "点亮")
{
colr.setColor(QPalette::WindowText,Qt::blue);
this->ui->lbe_blue->setPalette(colr);
this->ui->btn_led2_Ctrl->setText("熄灭");
serial.write("B1\n"); //把数据通过串口发送出去
}
else
{
colr.setColor(QPalette::WindowText,Qt::black);
this->ui->lbe_blue->setPalette(colr);
this->ui->btn_led2_Ctrl->setText("点亮");
serial.write("B2\n"); //把数据通过串口发送出去
}
}
//串口数据接收并显示
void Dialog::serialPort_readyRead()
{
QByteArray rx_buf= serial.readAll();;
// if(rx_buf.endsWith("\r\n")) //判断接收最后是否是回车换行,即接收完成标志
QString rx_buf_tmp = QString::fromLocal8Bit(rx_buf); //转换为中文格式
qDebug() << rx_buf_tmp; //控制台输出
ui->tb_rx_buf->insertPlainText(rx_buf_tmp); //追加显示,末尾不会添加
rx_buf_tmp.clear();
rx_buf.clear();
}
//清除接收窗口按钮
void Dialog::on_btn_clear_clicked()
{
this->ui->tb_rx_buf->clear();
}
//自定义波特率
void Dialog::on_cbb_baud_currentIndexChanged(const QString &arg1)
{
if(this->ui->cbb_baud->currentIndex() == 2)
{
this->ui->cbb_baud->setItemText(2, ""); //调成自定义波特率时,内容设置为空,准备接收输入
this->ui->cbb_baud->setEditable(true);
}
else
{
this->ui->cbb_baud->setItemText(2, "自定义"); //调成自定义波特率时,内容设置为空,准备接收输入
this->ui->cbb_baud->setEditable(false);
}
serial.setBaudRate(ui->cbb_baud->currentText().toInt()); //即使打开串口后,仍然可以设置波特率
}
//搜索串口功能
void Dialog::on_btn_serch_clicked()
{
ui->cbb_com->clear();
//运行开始查找可用串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->cbb_com->addItem(info.portName()); //串口号下拉菜单,增加一个条目,为串口号COM4
qDebug() << "串口搜索完成";
}
}
//发送按钮被按下
void Dialog::on_btn_send_clicked()
{
QString tx_buf = ui->te_tx_buf->toPlainText(); //文本输入框的内容
//获取多行输入框的数据并转换为UTF8格式
QByteArray tx_buf_tmp = tx_buf.toLocal8Bit(); //转换为标准字符,支持中文
if(ui->cb_send_enter->isChecked())
tx_buf += "\n";
serial.write(tx_buf_tmp); //把数据通过串口发送出去
tx_buf.clear();
}