qt中如何创建2个窗口,点击窗口a上按钮打开窗口b,在b关闭前无法对a *** 作

qt中如何创建2个窗口,点击窗口a上按钮打开窗口b,在b关闭前无法对a *** 作,第1张

点击按钮

a,打开

窗口

b可以按照以下步骤进行

点击a之后,直接调用

b.show()(前提是b窗口已经被生成)

然后设置b窗口为模态,如下

b.setWindowModality(Qt::WindowModal)

详见Qt帮助

文档

先创建dialog或者mainwindow,然后摆放控件,然后按ctrl键,用鼠标选择多个控件,选好后再点击工具栏的“Lay out horizontally in splitter"或者“Lay Out Vertically in splitter”按钮,或者选择菜单tools->form editor下的“Lay out horizontally in splitter"或者“Lay Out Vertically in splitter”选项

使用 Qt::WindowFlags 可以实现一些不同类型的窗口,如:用 Qt::FramelessWindowHint 来实现无边框窗口,用 Qt::Popup 来实现d出式的窗口,用 Qt::Tool 来实现工具窗口,用Qt::CustomizeWindowHint 来关闭窗口标题栏以及与 Qt::WindowCloseButton(添加关闭按钮),Qt::WindowMaximumButtonSize(添加最大化按钮)联用来建立只有关闭按钮和最大化按钮的窗口,用 Qt::WindowStaysOnTopHint 使窗口永远在最前端等。 Qt::WidgetAttribute 使窗口支持透明背景以及在关闭后主动销毁。其它一些常用的 Attribute 有:Qt::WA_AcceptDrops 使 widget 支持拖拽 *** 作,Qt::WA_MouseTracking 使 widget 及时响应鼠标移动事件(MouseMoveEvent)。 Qt::setMask() 函数对窗口进行部分区域遮掩来实现各种形状的窗口。部分代码解释:头文件: 1:#ifndef SHAPEDWIDGET_H 2:#define SHAPEDWIDGET_H 3: 4:#include <QWidget>5:class QPoint6:class QPixmap7:class ShapedWidget : public QWidget 8: { 9: Q_OBJECT 10:public: 11:explicit ShapedWidget(QWidget *parent = 0)12: ~ShapedWidget()13: 14:private slots: 15:void changeSkin()16: 17:protected: 18:void mousePressEvent(QMouseEvent *)19:void mouseMoveEvent(QMouseEvent *)20:void paintEvent(QPaintEvent *)21: 22:private: 23:void initData()24:void initVisualComponents()25:void setupContextMenu()26: 27: QPoint* dragPos_28: QPixmap* backgroundPixmap_29: }30: 31:#endif // SHAPEDWIDGET_H构造: 1: ShapedWidget::ShapedWidget(QWidget *parent) : 2: QWidget(parent, Qt::FramelessWindowHint) //无边框窗体 3: { 4: initData()//初始化数据,这个demo里面就两个,具体下面有解释 5: initVisualComponents()//初始化私有可视部件,这个demo里面没有私有的其它部件,所以只做了窗口的一些属性设置 6: setupContextMenu()//设置右键菜单,分配各种QAction内存空间以及连接SIGNALS和SLOTS 7: setAttribute(Qt::WA_DeleteOnClose)//关闭事件发生后就主动从内存中销毁窗口 8: setAttribute(Qt::WA_TranslucentBackground)//透明背景支持 9: } 拖拽移动窗体(下面有图示): 1:void ShapedWidget::mousePressEvent(QMouseEvent *event) 2: { 3:if(event->button() == Qt::LeftButton) 4: { 5: *dragPos_ = event->globalPos() - frameGeometry().topLeft()6: event->accept()7: } 8: } 9: 10:void ShapedWidget::mouseMoveEvent(QMouseEvent *event) 11: { 12:if(event->buttons() &Qt::LeftButton) 13: { 14: move(event->globalPos() - *dragPos_)15: event->accept()16: } 17: } 窗口绘制: 1:void ShapedWidget::paintEvent(QPaintEvent *) 2: { 3: QPainter painter(this)4: painter.fillRect(0, 0, backgroundPixmap_->width(), backgroundPixmap_->height(), *backgroundPixmap_)5: } 更换皮肤: 1:void ShapedWidget::changeSkin() 2: { 3: QAction* source = qobject_cast<QAction*>(sender())//获取发送该信号的信号源,并转换对象 4: backgroundPixmap_->load(source->data().toString())//因为给每个 QAction 赋了图片的地址的字符串 5://所以可以通过 data() 来获取该值,并更新背景图片的内容 6: resize(backgroundPixmap_->width(), backgroundPixmap_->height())//窗口大小尽可能小


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11905523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存