Qt 如何把一个按钮控件放在窗体的左上脚

本文介绍如何使用Qt布局管理器将按钮放置于窗口的左上角。通过addStretch()函数的应用,可以使按钮占据左上角的位置,而剩余空间则被自动填充。

Qt 如何把一个按钮控件放在窗体的左上脚呢?(效果如下)


这就用到了布局里面的一个函数addStretch():

我们可以用一句通俗的话来描述这个函数,addStretch()可以占了除控件以外的空白位置

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton *pushbutton = new QPushButton("OK");
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addStretch();
    layout->addWidget(pushbutton);
    Dialog w;
    w.setLayout(layout);
    w.show();
    
    return a.exec();
}
### Qt 拖动控件实现窗体移动 为了实现在Qt中通过拖动特定控件来移动整个窗体的功能,可以采用事件过滤器机制或直接重载鼠标事件的方法。下面展示一种利用事件过滤器的方式,在此方式下,当用户点击并拖动指定的子控件时,整个父级窗口随之一起移动。 #### 使用事件过滤器实现 首先安装一个事件过滤器到目标控件上,以便拦截其接收到的所有输入事件。一旦检测到鼠标的按下动作发生在该控件内,则记录当前光标相对于屏幕的位置以及窗口左上角坐标;之后每当捕捉到鼠标移动消息时就更新窗口的新位置直到释放按钮为止。 ```cpp // 安装事件过滤器至 widget 控件 widget->installEventFilter(this); bool MainWindow::eventFilter(QObject* obj, QEvent* event){ if(obj == widget && event->type() == QEvent::MouseButtonPress){ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); if(mouseEvent->button() == Qt::LeftButton){ // 记录起始点 mouseStartPoint = mouseEvent->globalPos(); windowTopLeftPoint = this->frameGeometry().topLeft(); m_bDrag = true; } } else if(m_bDrag && obj == widget && event->type() == QEvent::MouseMove){ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); int dx = mouseEvent->globalX()-mouseStartPoint.x(); int dy = mouseEvent->globalY()-mouseStartPoint.y(); this->move(windowTopLeftPoint + QPoint(dx,dy)); } else if(m_bDrag && obj == widget && event->type() == QEvent::MouseButtonRelease){ m_bDrag=false; } return QObject::eventFilter(obj,event); } ``` 这段代码展示了如何监听`widget`上的鼠标按压、移动和松开三个阶段,并据此改变主窗口的位置[^1]。 对于更复杂的场景,比如想要让多个不同类型的控件都能触发相同的行为,只需重复上述过程为每一个感兴趣的部件设置相同的逻辑即可。 另外值得注意的是,这里假设`MainWindow`继承自`QWidget`并且已经包含了必要的成员变量声明如`m_bDrag`, `mouseStartPoint`, 和 `windowTopLeftPoint`.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值