QT之细节集锦
2017-08-10 19:23
176 查看
设置窗口无标题栏、linux下无任务管理器栏
setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
设置边框
setStyleSheet("border:3px groove #FF8C00");
使用setStyleSheet可以以html语法格式进行控件的各种外观定制,但需要注意的是父控件styleSheet属性会对子控件也生效,所以对有子控件的父控件需要慎用setStyleSheet
设置窗口透明度
setWindowOpacity(0.7);
这个方法只对具有Qt::Window窗口标识的窗口起作用,能够设置整个窗口的透明度,透过这个窗口可以看到其他的窗口
开启透明背景属性
setAttribute(Qt::WA_TranslucentBackground, true);
设置控件背景色和透明度
setAutoFillBackground(true); QPalette pal = palette(); pal.setColor(QPalette::Background, Qt::black); //pal.setColor(QPalette::Background, Qt::transparent); //pal.setColor(QPalette::Background, QColor(255,0,0,128)); setPalette(pal);
注意不要忘了先setAutoFillBackground,通过设置控件的调色板即可实现改变背景色和透明度(rgba中的a通道)
setStyleSheet
设置背景和边框还可以使用setStyleSheet方法,但是这个方法会影响到所有的子控件,请慎用pLabel->setStyleSheet("background-color: #00000000; border:2px solid gray;");
QWebEngineView设置透明
QWebEngineView除了本身需要使用setPalette设置调色板外,它还有一个page层,需要将它设为透明,默认是白色的背景色m_webview->page()->setBackgroundColor(Qt::transparent);
控件全屏与退出全屏
void HMainWidget::onFullScreen(){ QWidget* pSender = (QWidget*)sender(); // m_rcSavedGeometry 用来保存控件原先的位置,退出全屏时还原 m_rcSavedGeometry = pSender->geo 4000 metry(); pSender->setWindowFlags(Qt::Window); pSender->showFullScreen(); } void HMainWidget::onExitFullScreen(){ QWidget* pSender = (QWidget*)sender(); pSender->setWindowFlags(Qt::SubWindow); pSender->setGeometry(m_rcSavedGeometry); pSender->showNormal(); }
全屏时需要先将该控件设置为窗口类型,调用showFullScreen才会生效,退出全屏时还原控件的类型和位置即可
信号与槽机制
注意的是信号与槽分为直接连接和异步连接,同一线程下创建的对象是直接连接,触发信号时会马上调用槽函数,但不同线程下的对象是异步连接,信号发出时会QCoreApplication::postEvent放入事件队列,直到取出时才会调用槽函数。避免信号-槽死循环
当信号调用槽,而槽中又发出这个信号时,这时就会形成死循环,写槽函数发射信号时一定要注意。事件accept
当一个事件不想在往父控件传递时,请使用accept获取路径
qDebug()<<"applicationDirPath="<<QCoreApplication::applicationDirPath(); qDebug()<<"applicationFilePath="<<QCoreApplication::applicationFilePath(); qDebug()<<"currentPath="<<QDir::currentPath();
添加程序启动画面
QT中提供了QSplashScreen类来为你的应用程序添加启动画面,它可以通过setPixmap添加一张背景图片,showMessage显示一条消息,需要注意的是当你切换了图片或者消息时,需要调用QCoreApplication::processEvents去处理一次事件,示例代码入下:QApplication app(argc, NULL); QFont font = QApplication::font(); font.setPointSize(18); QApplication::setFont(font); int sw = QApplication::desktop()->width(); int sh = QApplication::desktop()->height(); QSplashScreen* splash = new QSplashScreen; splash->setWindowFlags(Qt::Window | Qt::FramelessWindowHint); splash->setGeometry(0,0,sw,sh); splash->setStyleSheet("background-color: black"); splash->setPixmap("./splash.png"); splash->showFullScreen(); app.processEvents(); splash->showMessage("10% Loading icon...", Qt::AlignCenter, Qt::white); app.processEvents(); HRcLoader::instance()->loadIcon(); splash->showMessage("30% Loading texture...", Qt::AlignCenter, Qt::white); app.processEvents(); HRcLoader::instance()->loadTexture(); splash->showMessage("50% Creating main ui...", Qt::AlignCenter, Qt::white); app.processEvents(); HMainWidget* mainwdg = new HMainWidget; mainwdg->show(); splash->showMessage("100% Complete!", Qt::AlignCenter, Qt::white); app.processEvents(); splash->finish(mainwdg); delete splash; app.exec();
HRcLoader和HMainWidget皆是我项目中定义的类,你不用管,换成自己的操作就行。
当然这个类只提供了基本的启动画面,如果想实现动态画面,需要自己去自定义组合控件了,比如添加label去显示动画,添加进度条去显示进度
设置QSlider样式
m_slider->setStyleSheet( "QSlider::groove:horizontal {" " height: 16px;" " background: #C0C0C0;" " border: 1px solid green;" " border-radius: 5px;" " padding-left:-1px;" " padding-right:-1px;" "}" "QSlider::sub-page:horizontal" "{" "height: 16px;" "background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);" "background: qlineargradient(x1:0, y1:0.2, x2:1, y2:1, stop:0 #5DCCFF, stop:1 #1874CD);" "border: 1px solid #00FFFF;" "border-radius: 2px;" "}" "QSlider::add-page:horizontal" "{" "height: 16px;" "background: #575757;" "border: 1px solid #00FFFF;" "border-radius: 2px;" "}" "QSlider::handle:horizontal" "{" "width: 16px;" "background: qradialgradient" "(" "spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5," "stop:0.6 #FFD700, stop:0.778409 #696969" ");" "margin-top: -8px;" "margin-bottom: -8px;" "border-radius: 5px;" "}" );
设置滚动条样式
setStyleSheet("QScrollBar:vertical" "{" "width:28px;" "background:rgba(0,0,0,0%);" "margin:0px,0px,0px,0px;" "padding-top:28px;" "padding-bottom:28px;" "}" "QScrollBar::handle:vertical" "{" "width:28px;" "background:rgba(0,0,0,25%);" " border-radius:4px;" "min-height:20;" "}" "QScrollBar::handle:vertical:hover" "{" "width:28px;" "background:rgba(0,0,0,50%);" " border-radius:4px;" "min-height:20;" "}" "QScrollBar::add-line:vertical" "{" "height:28px;width:28px;" "subcontrol-position:bottom;" "}" "QScrollBar::sub-line:vertical" "{" "height:28px;width:28px;" "subcontrol-position:top;" "}" "QScrollBar::add-line:vertical:hover" "{" "height:28px;width:28px;" "subcontrol-position:bottom;" "}" "QScrollBar::sub-line:vertical:hover" "{" "height:28px;width:28px;" "subcontrol-position:top;" "}" "QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical" b6c1 "{" "background:rgba(0,0,0,10%);" "border-radius:4px;" "}" );
相关文章推荐
- Linux下 QT的一些问题集锦
- Qt一些源码实现细节及内部实现简析
- arcgis javascript 细节集锦
- QT] 存取ini文件的一些细节
- QT中QLabel类的openExternalLinks和linkActivated使用时的一些注意细节
- JavaScript对象字面量的诸多细节问题以及属性名易错集锦
- QT学习之路-QT服务器-mysql数据库相关问题集锦(1)
- C++在使用Qt中SLOT宏须要注意的一个小细节
- 最近学习qt,一些细节备忘
- QT知识集锦之一
- QT QTE Qtopia 安装问题集锦
- [QT] 小知识集锦
- Qt 中的配置文件Pro细节笔记
- Qt学习之一,键盘事件细节
- Qt学习的坎坷 --- 编程问题集锦
- C++在使用Qt中SLOT宏需要注意的一个小细节
- Qt细节笔记
- Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)
- QT安装出现的问题集锦
- QT学习过程中遇到的问题集锦(不断更新)