Qt 按钮弹窗问题


简述:

要实现的效果是:单击一个按钮,弹出一个不带标题栏(FramelessWindowHint)的子窗口,且位置在按钮下方,若单击父窗口的其他位置,则弹出的子窗口会隐藏。


1、设置setWindowFlags


在弹出的子窗口构造函数添加:

DataConnectSetup::DataConnectSetup(QWidget *parent) : QWidget(parent)
{
    setWindowFlags(Qt::FramelessWindowHint|Qt::Popup);
}

Qt窗体若设置了setWindowFlags (Qt::FramelessWindowHint); 运行后该窗体是不带标题栏,且无法进行移动和调整大小的。


2、重写鼠标事件 mousePressEvent


在弹出的子窗口重写鼠标事件:

void DataConnectSetup::mousePressEvent(QMouseEvent *e)
{
    setAttribute(Qt::WA_NoMouseReplay);
    QWidget::mousePressEvent(e);
}

实现效果是若单击主窗口的其他位置,则弹出的子窗口会隐藏。


3、实现定位


在父窗口中按钮的槽函数添加下面代码:

void SerialDataSet::connectSet()   //connect Button的槽函数
{
    connectSetDlg = new DataConnectSetup();  //定义弹出子窗口
 
 
    QPoint moveTo = m_connectSetBtn->mapToGlobal(QPoint(0,0));
    moveTo += QPoint(20, 38);  //具体位置自行调试
    connectSetDlg->move(moveTo);
    connectSetDlg->show();
}



  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt中实现警告弹窗的交互按钮需要以下步骤: 1. 创建一个QMessageBox对象,并指定其类型为警告对话框,可以使用QMessageBox::warning()静态函数来创建。 2. 设置对话框的标题和内容,可以使用setText()和setInformativeText()函数来设置。 3. 为对话框添加交互按钮,可以使用addButton()函数来添加按钮按钮的文本和功能可以根据实际需要来设置,例如"确认"按钮和"取消"按钮。 4. 连接按钮的点击信号到对应的槽函数,可以使用connect()函数来连接。例如,可以将"确认"按钮的clicked()信号连接到一个槽函数来处理确认操作。 5. 显示对话框,可以使用exec()函数来显示对话框,并等待用户的选择。 6. 根据用户的选择来执行相应的操作,例如,如果用户点击了"确认"按钮,可以在槽函数中进行相应的操作;如果用户点击了"取消"按钮,则可以关闭对话框或执行取消操作。 下面是一个简单的示例代码: ```cpp QMessageBox msgBox; msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowTitle("警告"); msgBox.setText("确定要进行此操作吗?"); msgBox.setInformativeText("此操作无法撤销!"); msgBox.addButton("确认", QMessageBox::AcceptRole); msgBox.addButton("取消", QMessageBox::RejectRole); QObject::connect(msgBox.button(QMessageBox::AcceptRole), &QPushButton::clicked, [=]() { // 确认按钮点击后的操作 // ... }); int result = msgBox.exec(); if (result == QMessageBox::Accepted) { // 如果用户点击了"确认"按钮 // ... } else if (result == QMessageBox::Rejected) { // 如果用户点击了"取消"按钮 // ... } ``` 以上代码演示了如何创建一个警告对话框,并为其添加了确认和取消按钮,并连接了确认按钮的点击信号到一个槽函数进行进一步操作。根据用户的选择,可以执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值