1.怎么给QDialog标题栏更换背景图片?
想法一:变通一下,去掉系统默认的标题栏,然后自己在dialog顶部弄个图片+最大最小化关闭按钮,这样的话,自己还得添加移动窗体的代码处理。
想法二:可以想办法在style里面绘制。
2.移动无边框窗体
想法一:
void EditDialog::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_Drag = true;
m_DragPosition = event->globalPos() - this->pos();
event->accept();
}
}
void EditDialog::mouseMoveEvent(QMouseEvent *event)
{
if (m_Drag && (event->buttons() && Qt::LeftButton)) {
move(event->globalPos() - m_DragPosition);
event->accept();
}
}
void EditDialog::mouseReleaseEvent(QMouseEvent *)
{
m_Drag = false;
}
如果不考虑跨平台,只针对Windows平台,那么我建议用Windows下的标准方法,模拟标题栏移动消息,既简单又高效。
想法二:
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (ReleaseCapture())
SendMessage(HWND(this->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
event->ignore();
}
这样,在拖动窗体时只会在松开鼠标时才将窗体移动过去,这样就避免了第一种方法的低效率问题。