qt ejercicio problema 2 registro completo

qt ejercicio problema 2 registro completo

(Gracias al autor de código abierto)

smart_manager_app.rar
F: \ qt_work \ qt5_code_plus_jack \ app_example \ smart_manager_app

Inserte la descripción de la imagen aquí
(Garantizado para seguir este artículo, tendrá éxito una vez, todos los detalles deben estar disponibles).
Finalmente, está la dirección de descarga del código fuente.

1

Primero crea el proyecto smart_manager_app
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2

Agregue el nombre de la clase SmartManagerWidget
Inserte la descripción de la imagen aquí

3

Copie el directorio de imágenes en el directorio del proyecto y agregue el archivo main.qrc.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Agregar prefijo
Inserte la descripción de la imagen aquí
agregar archivo
Inserte la descripción de la imagen aquí

4

Modificar el archivo de interfaz de usuario
Inserte la descripción de la imagen aquí

5

Agregue dos controles de widgets secundarios en la ventana principal de widgets.
Arriba está widgetTitle ------ QWidget, ---- altura fija de 70,
abajo está StackedWidget ------ QStackedWidget

Inserte la descripción de la imagen aquí
Haga que el widgetTitle sea más grande y colóquelo en ese lugar de acuerdo con el diseño ideal.
No agregue un diseño vertical a SmartManagerWidget todavía.

6

Continuar agregando controles secundarios al
widgetTitle
labIco
labTitle
widgetTop widgetMenu
horizontalSpacer

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

7

Agregue el
widget
labIco
labTitle

Al agregar ToolButton a widgetTop para
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
establecer QToolButton,
puede establecer el tamaño del icono en 32x32 por adelantado
y luego establecerMinimumWidth del botón en 85. Después de completar el
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
primer ToolButton,
copie el primer ToolButton y péguelo 3 veces.
A continuación, modifique el texto y el icono del nombre del objeto
para que el tamaño sea el mismo y los otros atributos sean los mismos

8 configuraciones clave

Agregue widgetMenu
y luego agregue: btnMenu_Min

Inserte la descripción de la imagen aquí
Copie 2 botones y
modifique object_name

Agregue un resorte vertical.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Importante: La razón por la que widgetTitle puede mantener la longitud de 70
es que sizeHint High = 40 de este lugar y la altura mínima de btnMenu_Min es 30.
Juntos, determina que el sizeHint de widgetTitle es 70.
Entonces, el altura de widgetTitle es Fixed.
Fixed es una decisión basada en el tamaño de sizeHint.

9

Luego agregue un resorte horizontal entre widgetTop y widgetMenu
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

10

Modificar el diseño en orden

Modificar widgetMenu al diseño de cuadrícula,
modificar el espacio y el margen a 0

Modificar widgetTop al diseño horizontal,
modificar el espacio y el margen a 0

Modificar widgetTitle a diseño horizontal,
modificar espacio = 7 y margen = 0

Modificar SmartManagerWidget a diseño vertical
Modificar espacio = 0 y margen = 0

Asegúrese de seguir el orden: los
controles secundarios primero agregan el diseño,
luego el control primario y luego el siguiente nivel.
tal.
De lo contrario, widgetTitle puede ser sobrescrito por stackedWidget.
Debería ser que cuando widgetTitle se distribuya automáticamente, calculará una sugerencia de tamaño en función del tamaño de los controles secundarios internos,
y luego esta sugerencia de tamaño se relaciona con la política de tamaño del diseño automático.
Inserte la descripción de la imagen aquí

11

Inserte la descripción de la imagen aquí
En el diseño automático, la propiedad Fixed no tiene nada que ver con la geometría.
Las propiedades Fixed y sizeHint están relacionadas,
solo los controles de resorte pueden establecer sizeHint, otros controles no se pueden configurar directamente.

12

Ejecútelo para ver el efecto
Inserte la descripción de la imagen aquí
Agregar a widgetTitle, la barra de título completa.
Similar al siguiente formulario.

Inserte la descripción de la imagen aquí
fontawesome
Inserte la descripción de la imagen aquí

void SmartManagerWidget::SetWidgetTitlePanel()
{
    
    
    FontAwesomeIcons::Instance().setIcon((QAbstractButton*)ui->btnMenu_Min,
                                         //QChar(0xf068),
                                         QChar(int(FontAwesomeIcons::IconIdentity::icon_minus)),
                                         12);

    FontAwesomeIcons::Instance().setIcon((QAbstractButton*)ui->btnMenu_Max,
                                         //QChar(0xf067),
                                         QChar(int(FontAwesomeIcons::IconIdentity::icon_plus)),
                                         12);

    FontAwesomeIcons::Instance().setIcon((QAbstractButton*)ui->btnMenu_Close,
                                         //QChar(0xf00d),
                                         QChar(int(FontAwesomeIcons::IconIdentity::icon_remove)),
                                         12);


    FontAwesomeIcons::Instance().setIcon((QLabel*)ui->labIco,
                                         //QChar(0xf073),
                                         QChar(int(FontAwesomeIcons::IconIdentity::icon_calendar)),
                                         30);

    ui->labTitle->setText("智能访客管理平台");
    ui->labTitle->setFont(QFont("Microsoft Yahei", 20));
}

13

Agregue qss a QToolButton de la interfaz widgetTitle para
que se vea más hermoso

En el widgetTop configurado antes, al configurar QToolButton,
puede configurar el tamaño del icono en 32x32 por adelantado
y luego el botón setMinimumWidth en 85

Mediante el método setMinimumWidth, los botones de herramientas de diferentes tamaños adquieren el mismo tamaño.

De esta manera, no es necesario agregar el siguiente código para extraer

    QSize icoSize(32, 32);
    int icoWidth = 85;

    ui->btnMain->setIconSize(icoSize);
    ui->btnMain->setMinimumWidth(icoWidth);

    ui->btnConfig->setIconSize(icoSize);
    ui->btnConfig->setMinimumWidth(icoWidth);

    ui->btnData->setIconSize(icoSize);
    ui->btnData->setMinimumWidth(icoWidth);

    ui->btnHelp->setIconSize(icoSize);
    ui->btnHelp->setMinimumWidth(icoWidth);

    ui->btnExit->setIconSize(icoSize);
    ui->btnExit->setMinimumWidth(icoWidth);

Necesito comprender a fondo lo siguiente

    QString qssA = "QWidget QAbstractButton{  \
            border-style:none;           \
            border-radius:0px;           \
            padding:5px;                 \
            color:#DCDCDC;               \
            background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #484848,stop:1 #383838);  \
            }                            \
            QWidget QAbstractButton:hover,QWidget QAbstractButton:pressed,QWidget QAbstractButton:checked{   \
            border-style:solid;                          \
            border-width:0px 0px 2px 0px;                \
            padding:4px 4px 2px 4px;                     \
            border-color:#00BB9E;                        \
            background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464,stop:1 #525252);    \
            }";

    ui->widgetTop->setStyleSheet( qssA);

Inserte la descripción de la imagen aquí

14 Agregue efectos especiales qss a widgetMenu

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

void SmartManagerWidget::SetWidgetMenuPanel()
{
    
    
    QString qssB = "QToolButton#btnMenu,QPushButton#btnMenu_Min,QPushButton#btnMenu_Max,QPushButton#btnMenu_Close{ \
            border-radius:3px;   \
            color:#DCDCDC;       \
            padding:3px;         \
            margin:0px;          \
            background:none;     \
            border-style:none;   \
            }                    \
            QToolButton#btnMenu:hover,QPushButton#btnMenu_Min:hover,QPushButton#btnMenu_Max:hover{    \
            color:#FFFFFF;                                                                            \
            margin:1px 1px 2px 1px;                                                                   \
            background-color:rgba(51,127,209,230);                                                    \
            }                                                                                         \
            QPushButton#btnMenu_Close:hover{                                                          \
            color:#FFFFFF;                                                                            \
            margin:1px 1px 2px 1px;                                                                   \
            background-color:rgba(238,0,0,128);                                                       \
            }";

     ui->widgetMenu->setStyleSheet( qssB);
}

15

Establecer StackedWidget para agregar página
página1
página2
página3
página4

Inserte la descripción de la imagen aquí

15

Agrega un evento al botón correspondiente a widgetTop

//设置顶部导航按钮
QList<QToolButton *> tbtns = ui->widgetTop->findChildren<QToolButton *>();
foreach (QToolButton *btn, tbtns) {
    
    
    connect(btn, SIGNAL(clicked()), this, SLOT(widgetTopToolButtonClick()));
}
void SmartManagerWidget::widgetTopToolButtonClick()
{
    
    
    QToolButton *b = (QToolButton *)sender();
    QString name = b->text();

    QList<QToolButton *> tbtns = ui->widgetTop->findChildren<QToolButton *>();
    foreach (QToolButton *btn, tbtns) {
    
    
        if (btn == b) {
    
    
            btn->setChecked(true);
        } else {
    
    
            btn->setChecked(false);
        }
    }

    if (name == "主界面") {
    
    
        ui->stackedWidget->setCurrentIndex(0);
    } else if (name == "系统设置") {
    
    
        ui->stackedWidget->setCurrentIndex(1);
    } else if (name == "警情查询") {
    
    
        ui->stackedWidget->setCurrentIndex(2);
    } else if (name == "调试帮助") {
    
    
        ui->stackedWidget->setCurrentIndex(3);
    } else if (name == "用户退出") {
    
    
        exit(0);
    }
}

dieciséis

Agregar eventos a los botones correspondientes a widgetMenu

void SmartManagerWidget::on_btnMenu_Min_clicked()
{
    
    
    showMinimized();
}

void SmartManagerWidget::on_btnMenu_Max_clicked()
{
    
    
    static bool max = false;
    static QRect location = this->geometry();

    if (max) {
    
    
        this->setGeometry(location);
    } else {
    
    
        location = this->geometry();
        this->setGeometry(qApp->desktop()->availableGeometry());
    }

    this->setProperty("canMove", max);
    max = !max;
}

void SmartManagerWidget::on_btnMenu_Close_clicked()
{
    
    
    close();
}

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
ui-> widgetTitle-> setPalette (QPalette (QColor ("# 44444444")));
Inserte la descripción de la imagen aquí

17

Agregar qss a widgetTitle

    QString qssC = ".QWidget{ \
            background:#484848; \
            }\
            .QLabel{\
              color:#FFFFFF;    \
            }";
   ui->widgetTitle->setStyleSheet(qssC);

Inserte la descripción de la imagen aquí

18


Agregue controles a la página page1 del StackedWidget , como se muestra a continuación
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

19


Agregue un control ToolButton en widgetLeftMain,
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
luego copie el control toolbutton en 3,
luego modifique el txt y objectName
Inserte la descripción de la imagen aquí
y agregue un resorte vertical

Luego, el diseño vertical de widgetLeftMain

20

Para uso de uno a muchos QMultiMap
QMap <QPushButton *, QImage *>
Desde el punto de vista del almacenamiento de datos, yo personalmente uso QMultiHash.

Disculpe, por ejemplo, hay varios botones y cada botón corresponde a 5 imágenes.
Qué tal, definir las variables y la estructura de datos, para que el botón y las 5 imágenes se correspondan, y a
través de este botón se pueden encontrar las 5 variables de la imagen.

21

configuración de página page2

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

página 3

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Quitar el borde

this-> setWindowFlags (Qt :: FramelessWindowHint | Qt :: WindowSystemMenuHint | Qt :: WindowMinMaxButtonsHint);

添加
privado:
QPoint m_startPoint;

然后 添加:
protegido:
void mousePressEvent (evento QMouseEvent *);
void mouseMoveEvent (evento QMouseEvent *);

void ManagePlatWidget::mousePressEvent(QMouseEvent *event)
{
    
    
    if ((event->button() == Qt::LeftButton)||(event->button() == Qt::RightButton) ){
    
    
        m_startPoint = frameGeometry().topLeft() - event->globalPos();
        qDebug() <<"mousePressEvent m_startPoint = "<< m_startPoint <<endl ;
    }
}

void ManagePlatWidget::mouseMoveEvent(QMouseEvent *event)
{
    
    

        //move方法的作用是设置QWidget部件的pos坐标的
        //即设置左上角的坐标
        //通过设置左上角的坐标,来达到移动窗口的目的
        qDebug() <<"mouseMoveEvent m_startPoint = "<< m_startPoint <<",event button = "<<event->button() <<endl ;
        this->move(event->globalPos() + m_startPoint);

}

Inserte la descripción de la imagen aquí

Problemas de encuentro

La relación entre la función de la paleta y el color del texto
// qApp-> setPalette (QPalette (QColor ("# 44444444")));

La siguiente imagen
Inserte la descripción de la imagen aquí
Después de qss, se obtiene la siguiente imagen.
Inserte la descripción de la imagen aquí
Escribe una demostración específicamente

En la imagen de abajo, se
Inserte la descripción de la imagen aquí
obtiene el siguiente efecto
Inserte la descripción de la imagen aquí
: Una demostración
está escrita específicamente para bordes, etc. Una demostración está escrita específicamente para setPalette

Código fuente general

https://download.csdn.net/download/wowocpp/15542035
smart_manager_app.rar

Supongo que te gusta

Origin blog.csdn.net/wowocpp/article/details/114261946
Recomendado
Clasificación