• 15562阅读
  • 8回复

[提问]QT  求助怎么 实现圆角窗口的…… [复制链接]

上一主题 下一主题
离线272200901
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-02
用setmask感觉有点卡,我只是想吧角切几个像素,用setmask当窗口大小改变的时候,我得花很大代价维护那张用来设置掩码的图片大小,成本太高……

求一种别的办法实现,只是切一点角的办法……
离线XChinux

只看该作者 1楼 发表于: 2011-03-02
setAttribute(Qt::WA_TransparentBackground, true);
setWindowFlags(Qt::Window | Qt::FramelessWindowHint);

然后在paintEvent()里画个圆角。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线272200901

只看该作者 2楼 发表于: 2011-03-02
还请您 明示
我新手
离线XChinux

只看该作者 3楼 发表于: 2011-03-02
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setAttribute(Qt::WA_TranslucentBackground, true);
    setWindowFlags(Qt::Window | Qt::FramelessWindowHint
                   | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint
                   | Qt::WindowMaximizeButtonHint);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter p(this);
    p.setBrush(QColor("#CCCCFF"));
    p.setPen(QColor("#FF0000"));
    p.drawRoundedRect(0, 0, width() - 1, height() - 1, 20, 20);
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 4楼 发表于: 2011-03-02
效果图
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线272200901

只看该作者 5楼 发表于: 2011-03-02
谢谢…… 好人啊

这办法 靠谱而且效率还八错

我是想这么实现的 高人给点建议
我想先创建个QPixmap 然后加载一张png格式的图片
然后用掩码技术我把这张PNG格式的图片按照窗口的大小 切掉是个角
但是我独QPixmap不太熟悉 我到是对微软的GDI很熟悉,我想应该行 ……
然后再把这张图片 画到窗口上
离线272200901

只看该作者 6楼 发表于: 2011-03-02
好像得用Qimage 我去看看应该和GDI差不多的用法
离线272200901

只看该作者 7楼 发表于: 2011-03-02
遇到麻烦问题了
接上面的问题 QT咋个实现两张图片掩码效果的????
离线272200901

只看该作者 8楼 发表于: 2011-03-03
解决了 用setmask 和QRegion

是效率 和效果基本满意的方法
别的 我就不清楚了
楼上高人提供的方法我试过了 自己画闪烁得厉害
可能就是传说中的缓冲问题
快速回复
限100 字节
 
上一个 下一个