
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 透明窗体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)