qt切换界面只显示一个

qt切换界面只显示一个,第1张

qt切换界面只显示一个方法。

1、建立一个Qwidget工程,在ui里面添加一个按钮button和一个标签label,右键项目名称,在d出的选项中选择添加新文件。

2、选择QT->Qt设计师界面类,点击右下方choose,选择widget,点击右下方下一步,自己给这个窗体取一个名字,点击下一步(如此便创建成功第二个界面和它的头文件和源文件)。

3、重复上面2-5步建立第三个窗体文件,最后工程里面应该一共包括有以下文件,工程里widgetui是第一个界面,secondform是第二个界面,thirdform是第三个界面

4、在第二个、第三个界面中放入控件第二个界面放入两个按钮pushbutton和一个标签label。第三个界面放入一个按钮pushbutton和一个LCDnumber。各个窗体头文件定义,所有槽函数定义对应于要实现的功能,对应于各个按钮按下后要实现的事件,在第一个Widget的头文件中定义一个处理跳转到第二个界面的槽函数doprocessclickgotosecondform(bool)和一个接收来自第二个界面发送请求信号的槽函数doprocesssecondformrequest(QString)。在第二个窗体头文件里定义跳转到第一个和第三个窗体的槽函数doProcessClickBackToFirstForm(bool)、doProcessClickGoToThirdForm(bool),还有从第三个界面发送来的显示第二个界面的槽函数doProcessShowSecondForm()。第三个窗体头文件中定义一个跳转到第二个界面的槽函数doprocessbacktosecondform()和一个定时器的超时槽函数doprocesstimeout()。

5、对各个槽函数的实现,在各个窗体对应的源程序中进行实现,对所有代码都有详细的注释和说明第一个窗体。QT多个窗体切换显示就实现,第一个界面的下方按钮可以点击跳转到第二个界面,第二个界面下方可以选择跳转到第一个或者到第三个界面,第三个界面下方有一个返回第二个界面的按钮,实现各个页面的跳转显示且每次只会显示一个界面。

QPalette p = 窗口对象->palette();

psetColor(QPalette::Window,color);

窗口对象-> setPalette(p);

可以用stylesheet来实现

一、将Qt窗口嵌入到桌面中。

声明一个最简单的类:

class Dialog : public QDialog

{

Q_OBJECT

public:

Dialog(QWidget parent = 0);

~Dialog();

}

函数实现:

Dialog::Dialog(QWidget parent) : QDialog(parent)

{

//创建个LineEdit用来测试焦点

QLineEdit le = new QLineEdit(this);

}

Dialog::~Dialog()

{

}

主函数:

int main(int argc, char argv[])

{

QApplication a(argc, argv);

Dialog w;

HWND desktopHwnd = findDesktopIconWnd();

if(desktopHwnd) SetParent(wwinId(), desktopHwnd);

wshow();

return aexec();

}

运行效果:

有个窗口嵌入了桌面。按win+D组合键可以看到此窗口在桌面上。

二、让窗口全透明:

21最容易想到的就是setWindowOpacity()函数了。

wsetWindowOpacity(05),运行:结果杯具了,此函数完全无效,因为其父窗口特殊,这个函数内部使用的系统窗口标志不被支持。

22

wsetAttribute(Qt::WA_TranslucentBackground, true);

运行效果:

全透明ok。如果其父窗口为空的话,透明的地方会成为黑块。

三、让窗口半透明

31wsetAttribute(Qt::WA_TranslucentBackground, true) + 背景调色板

运行效果仍然是全透明,因为TranslucentBackground为true,根本不画背景。

32单纯的背景调色板:

QPalette pal = wpalette();

palsetColor(QPalette::Background, QColor(100,100,100,50));

wsetPalette(pal);

wsetAutoFillBackground(true);

运行效果出现了半透明:

但是还没大功告成,不停点击桌面,再点击这个窗口,会发现这个窗口越来越不透明,直至完全不透明了。不知道是不是qt的bug。

ps:加一句 wsetAttribute(Qt::WA_OpaquePaintEvent,true); 窗口就能够一直保持这个效果了。即这个方案可行。

pps:此方案在XP也是黑色底块。

33转战paintEvent()

protected:

void paintEvent(QPaintEvent );

void Dialog::paintEvent(QPaintEvent e)

{

QPainter p(this);

pfillRect(rect(), QColor(0,0xff,0,30));

}

用一个带有alpha值的颜色填充背景,运行效果发现颜色确实有alpha值,但是桌面的内容透不过来。

34setAttribute(Qt::WA_TranslucentBackground, true) + paintEvent()

运行效果:

得到了设想中的效果。

最终的主函数代码:

int main(int argc, char argv[])

{

QApplication a(argc, argv);

Dialog w;

HWND desktopHwnd = findDesktopIconWnd();

if(desktopHwnd) SetParent(wwinId(), desktopHwnd);

wsetAttribute(Qt::WA_TranslucentBackground, true);

wshow();

return aexec();

}

最终的dialog实现代码:

Dialog::Dialog(QWidget parent) : QWidget(parent)

{

//创建个LineEdit用来测试焦点

QLineEdit le = new QLineEdit(this);

}

Dialog::~Dialog()

{

}

void Dialog::paintEvent(QPaintEvent e)

{

QPainter p(this);

pfillRect(rect(), QColor(0,0xff,0,30));

}

PS:

经测试此代码在XP运行不正常。窗口成为黑色背景块。只能是颜色半透明了。

还有就是图标会被盖住。只能把wsetAttribute(Qt::WA_TranslucentBackground, true);注释掉,有半透明颜色,无法看到桌面。

以上就是关于qt切换界面只显示一个全部的内容,包括:qt切换界面只显示一个、qt4.7.2如何设置程序窗口背景色、Qt 5.4 透明窗体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9468516.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存