#pragma once
#include <QDialog>
#include "ui_QtDialogClassAskGps.h"
#include "QtWidgetsClassSetSpecific2.h"
#include "QtWidgetsClassMain.h"
#include <QPaintEvent>
class QtDialogClassAskGps : public QDialog
{
Q_OBJECT
public:
QtDialogClassAskGps(QWidget *parent = Q_NULLPTR);
~QtDialogClassAskGps();
void paintEvent(QPaintEvent* event);
protected:
bool eventFilter(QObject* watched, QEvent* evt);
private:
Ui::QtDialogClassAskGps ui;
QtWidgetsClassSetSpecific2* pQtSetSpecific2;
QtWidgetsClassMain* pQtMain;
};
#include "QtWidgetsClassSetSpecific2.h"
#include <QPushButton>
#include <QDebug>
#include <QEvent>
#include <QMouseEvent>
#include <QFile>
#include "ComboboxItem.h"
#include "NoFocusFrameDelegate.h"
#include <QPainter>
QtWidgetsClassSetSpecific2::QtWidgetsClassSetSpecific2(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
//载入qss
QFile styleFile(":/qss/combobox.qss");
if (styleFile.open(QIODevice::ReadOnly))
{
this->setStyleSheet(styleFile.readAll());
//a.setStyleSheet(styleFile.readAll());
}
//设置边框
this->setWindowFlags(Qt::FramelessWindowHint);
this->installEventFilter(this);
//设置combox的自定义
QListWidget* m_listWidget = new QListWidget(ui.comboBox);
// 去除子item的虚线
m_listWidget->setItemDelegate(new NoFocusFrameDelegate(this));
//所谓的设置代理,即把combobox下拉内容替换为自己的listwidget
ui.comboBox->setEditable(true);
ui.comboBox->setModel(m_listWidget->model());
ui.comboBox->setView(m_listWidget);
ComboboxItem* item = new ComboboxItem(this);
item->setLableContent(QString("UDP"));
QListWidgetItem* widgetItem = new QListWidgetItem(m_listWidget);
m_listWidget->setItemWidget(widgetItem, item);
connect(item, &ComboboxItem::lableClicked, ui.comboBox, [&](QString text) {
qDebug() << ui.comboBox->count();
ui.comboBox->setEditText(text);
ui.comboBox->hidePopup();
});
ComboboxItem* item2 = new ComboboxItem(this);
item2->setLableContent(QString("TCP"));
QListWidgetItem* widgetItem2 = new QListWidgetItem(m_listWidget);
m_listWidget->setItemWidget(widgetItem2, item2);
connect(item2, &ComboboxItem::lableClicked, ui.comboBox, [&](QString text) {
qDebug() << ui.comboBox->count();
ui.comboBox->setEditText(text);
ui.comboBox->hidePopup();
});
//设置界面style
ui.comboBox->setStyleSheet("\
width: 438px;\
height: 34px;\
border - radius: 3px;\
border: 1px solid #E6E6E6; ");
ui.lineEdit->setStyleSheet("width: 438px;\
height: 34px;\
border - radius: 3px;\
border: 1px solid #E6E6E6; ");
ui.label->setStyleSheet("width: 70px;\
height: 20px;\
font - size: 14px;\
font - family: PingFangSC - Regular, PingFang SC;\
font - weight: 400;\
color: #333333;\
line - height: 20px; ");
ui.label_2->setStyleSheet("width: 56px;\
height: 20px;\
font - size: 14px;\
font - family: PingFangSC - Regular, PingFang SC;\
font - weight: 400;\
color: #333333;\
line - height: 20px; ");
ui.pushButtonNext->setStyleSheet("width: 80px;\
height: 30px;\
background: #FFFFFF;\
border - radius: 3px;\
border: 1px solid #E6E6E6; ");
ui.pushButtonCancle->setStyleSheet("width: 80px;\
height: 30px;\
background: #FFFFFF;\
border - radius: 3px;\
border: 1px solid #E6E6E6; ");
pQtSetSpecific3 = new QtDialogClassSetSpecific3;
//点击下一步自己隐藏
connect(ui.pushButtonNext, &QPushButton::clicked, this, &QDialog::hide);
//点击下一步则dialog3出现
connect(ui.pushButtonNext, &QPushButton::clicked, [&]()
{
pQtSetSpecific3->show();
});
connect(ui.pushButtonCancle, &QPushButton::clicked, [&]()
{
this->hide();
emit QtWidgetsClassSetSpecific2::sigShowMain();
});
//监听dialog3点击回退
connect(pQtSetSpecific3, &QtDialogClassSetSpecific3::back, [=]()
{
qDebug() << "recv back sig";
//这里为什么使用exec会报 recursive call detected?
this->show();
});
//鼠标点击x关闭图标推出程序
connect(ui.pushButton, &QPushButton::clicked, [&]()
{
this->close();
});
}
static int g_nomalWidth = 0;
bool QtWidgetsClassSetSpecific2::eventFilter(QObject* watched, QEvent* evt)
{
static QPoint mousePoint;
static bool mousePressed = false;
static bool isMoved = false;
QMouseEvent* event = static_cast<QMouseEvent*>(evt);
if (event->type() == QEvent::MouseButtonPress && event->pos().y() < 90) {
mousePressed = true;
isMoved = false;
mousePoint = event->globalPos() - this->pos();
return true;
}
else if (mousePressed && (event->buttons() & Qt::LeftButton) && event->type() == QEvent::MouseMove) {
this->move(event->globalPos() - mousePoint);
if (1)
{
if (!isMoved)
{
isMoved = true;
if (mousePoint.x() > g_nomalWidth) {
mousePoint = QPoint(g_nomalWidth / 2, 5);
QCursor::setPos(this->mapToGlobal(mousePoint));
}
}
}
return true;
}
else if (event->type() == QEvent::MouseButtonRelease)
{
mousePressed = false;
if (isMoved)
{
QPoint curPos = this->pos();
this->showMaximized();
this->showNormal();
this->move(curPos);
isMoved = false;
return true;
}
}
return QWidget::eventFilter(watched, event);
}
void QtWidgetsClassSetSpecific2::paintEvent(QPaintEvent* event)
{
QPainter p(this);
p.fillRect(0, 52, 700, 245 - 80, Qt::white);
QWidget::paintEvent(event);
}
QtWidgetsClassSetSpecific2::~QtWidgetsClassSetSpecific2()
{
}