Qt 自定义弹出窗口界面

我就是我 2023-06-27 03:30 107阅读 0赞

1.运行截图

widget.ui

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70

运行界面

20200102184322589.gif

2.自定义弹出菜单窗口

此demo演示弹出一个QListWidget,可以修改成各种Widget。

①需要明白Qt的坐标系统。

②需要知道Qt style设置。

③需要用到的类QWidgetAction、QMenu、QListWidget

3.源码

  1. //widget.h
  2. #ifndef WIDGET_H
  3. #define WIDGET_H
  4. #include <QWidget>
  5. #include <QListWidget>
  6. #include <QMenu>
  7. #include <QWidgetAction>
  8. namespace Ui {
  9. class Widget;
  10. }
  11. class Widget : public QWidget
  12. {
  13. Q_OBJECT
  14. public:
  15. explicit Widget(QWidget *parent = 0);
  16. ~Widget();
  17. private:
  18. Ui::Widget *ui;
  19. private:
  20. void initDefulatUi();
  21. private Q_SLOTS:
  22. void slotBtnClicked();
  23. private:
  24. QListWidget *m_listWidget = nullptr;
  25. QWidgetAction *m_action = nullptr;
  26. QMenu *m_menu = nullptr;
  27. };
  28. #endif // WIDGET_H
  29. //widget.cpp
  30. #include "widget.h"
  31. #include "ui_widget.h"
  32. const QString g_strWgtStyle = "#widget\
  33. {\
  34. background-color: rgb(255, 255, 255);\
  35. border: 1px solid #DCDFE6;\
  36. border-radius: 4px;\
  37. }";
  38. const QString g_strLiEditStyle ="#lineEdit\
  39. {\
  40. border:0px;\
  41. font-family: \"微软雅黑\";\
  42. font-size: 20px;\
  43. color: #303133;\
  44. }";
  45. const QString g_strBtnStyle = "#pushButton\
  46. {\
  47. background-color: rgb(255, 255, 255);\
  48. border-image:url(\"D:/1.png\");\
  49. }";
  50. const QString g_strListWidgetStyle = "#listWidget{border:0px}";
  51. Widget::Widget(QWidget *parent) :
  52. QWidget(parent),
  53. ui(new Ui::Widget)
  54. {
  55. ui->setupUi(this);
  56. initDefulatUi();
  57. m_listWidget = new QListWidget(ui->widget);
  58. m_listWidget->setObjectName("listWidget");
  59. m_listWidget->setStyleSheet(g_strListWidgetStyle);
  60. QStringList nameList;
  61. nameList<<"张三"<<"李四"<<"王五"<<"赵六";
  62. m_listWidget->addItems(nameList);
  63. m_action = new QWidgetAction(nullptr);
  64. m_action->setDefaultWidget(m_listWidget);
  65. m_menu = new QMenu(nullptr);
  66. m_menu->setWindowFlags(m_menu->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
  67. m_menu->addAction(m_action);
  68. connect(ui->pushButton,&QPushButton::clicked,this,&Widget::slotBtnClicked);
  69. }
  70. Widget::~Widget()
  71. {
  72. delete ui;
  73. }
  74. void Widget::initDefulatUi()
  75. {
  76. ui->widget->setStyleSheet(g_strWgtStyle);
  77. ui->lineEdit->setStyleSheet(g_strLiEditStyle);
  78. ui->pushButton->setStyleSheet(g_strBtnStyle);
  79. ui->widget->setContentsMargins(5,0,5,0);
  80. }
  81. void Widget::slotBtnClicked()
  82. {
  83. QPoint pos = ui->widget->pos();
  84. //获得右下角坐标
  85. QPoint posRightDown;
  86. posRightDown.setX(pos.x()+ui->widget->width());
  87. posRightDown.setY(pos.y()+ui->widget->height());
  88. m_menu->exec(this->mapToGlobal(posRightDown));
  89. }

发表评论

表情:
评论列表 (有 0 条评论,107人围观)

还没有评论,来说两句吧...

相关阅读