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
(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
2
Agregue el nombre de la clase SmartManagerWidget
3
Copie el directorio de imágenes en el directorio del proyecto y agregue el archivo main.qrc.
Agregar prefijo
agregar archivo
4
Modificar el archivo de interfaz de usuario
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
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
7
Agregue el
widget
labIco
labTitle
Al agregar ToolButton a widgetTop para
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
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
Copie 2 botones y
modifique object_name
Agregue un resorte vertical.
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
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.
11
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
Agregar a widgetTitle, la barra de título completa.
Similar al siguiente formulario.
fontawesome
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);
14 Agregue efectos especiales qss a widgetMenu
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
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();
}
ui-> widgetTitle-> setPalette (QPalette (QColor ("# 44444444")));
17
Agregar qss a widgetTitle
QString qssC = ".QWidget{ \
background:#484848; \
}\
.QLabel{\
color:#FFFFFF; \
}";
ui->widgetTitle->setStyleSheet(qssC);
18
Agregue controles a la página page1 del StackedWidget , como se muestra a continuación
19
Agregue un control ToolButton en widgetLeftMain,
luego copie el control toolbutton en 3,
luego modifique el txt y objectName
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
página 3
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);
}
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
Después de qss, se obtiene la siguiente imagen.
Escribe una demostración específicamente
En la imagen de abajo, se
obtiene el siguiente efecto
: 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