Qt学习总结-ui篇
控件设置透明度、控件设置圆角边框、创建托盘图标、窗口设置为无边框、控件重叠实现控件“浮动效果”、QLabel标签添加点击事件、QLabel 同时显示文字和图片、QTableView的简单使用方法
控件设置透明度:
QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0.9); //设置透明度 ui->widget->setGraphicsEffect(effect); //加在需要设置透明的控件上
控件设置圆角边框:
//通过控件的样式表即可实现
ui->widget->setStyleSheet(“border-radius:3px;”);
创建托盘图标:
//加在ico图标 QIcon icon = QIcon(“:/icofire.ico”); setWindowIcon(icon); //创建 trayIcon = new QSystemTrayIcon(this); trayIcon=new QSystemTrayIcon(this); //关联曹函数,用于捕捉图标点击事件 connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(activated (QSystemTrayIcon::ActivationReason))); trayIcon->setIcon(icon); //设置上下文菜单 //trayIcon->setContextMenu(this->trayIconMenu); trayIcon->show();
窗口设置为无边框:
this->setWindowFlags(Qt::FramelessWindowHint);
控件重叠,即实现控件“浮动效果”:
在界面存在布局的情况下,是无法将连个控件重叠在一起的,如果我们要实现界面中一部分控件“浮动”其他控件上的效果,可以通过栈布局的方式来实现。然而在默认情况下,栈布局同时只能显示一帧画面,要做到栈布局中所有控件同时显示,要用到一下代码:
QStackedLayout*laylout=(QStackedLayout*)ui->stackedWidget->layout();
laylout->setStackingMode(QStackedLayout::StackAll);
QLabel标签添加点击事件:
QLabel没有特定的信号槽来让我们处理点击事件,需要通过一下方法:
为标签绑定点击事件的监听函数
ui->label ->installEventFilter(this); 重写窗体类的eventFilter()函数 bool MainForm::eventFilter(QObject *obj, QEvent *event){ if(obj==ui->label){ //过滤出单击事件 if (event->type() == QEvent::MouseButtonPress) { //处理函数 return true; } } //其他判断… return QWidget::eventFilter(obj,event); }
注意,处理完点击事件后,如果 return true,这终止事件处理,反之消息将继续传播下去。
QLabel 同时显示文字和图片:
QLabel 在QDisginer编辑时可以通过属性窗口设置图片和文字,但最终程序运行时是不会同时显示的,即这两个属性会相互覆盖,只显示其一。为达到图文同时显示,可通过重载QLabel的 paintEvent()函数来实现,若我们在属性中设置好了图片,需显示额文字,可通过以下方法:
void QCustLabel::paintEvent(QPaintEvent *event){ //先按默认防止进行标签绘制 QLabel::paintEvent(event); QPainter painter(this); //设置文字颜色 painter.setPen(Qt::white); //要显示的可以作为一个成员变量 QString info=this->desInfo; //设置文字信息的x坐标和y坐标 //此处用了水平居中和垂直居中 int x=this->width()/2-(this->fontMetrics().width(info)/2); int y=this->height()/2+(this->fontMetrics().height()/2); //绘出文字 painter.drawText(QPoint(x,y),info); }
此方法中用到了 Qt的二维绘图类 QPainter,此处使用的方法还是比较简单的,关于QPainter使用总结,会在接下来的文章中给出。
由此,我们可以在label中随意指定文字、图片的显示方式。
QTableView的简单使用方法:
对于QTableView的内容修改,如设置表头、添加单元格内容,可不不直接操作该控件,操作控件的 model 即可。
tableModel=new QStandardItemModel; //设置列数 tableModel->setColumnCount(3); tableModel->setHeaderData(0,Qt::Horizontal,tr(“colum 0″)); tableModel->setHeaderData(1,Qt::Horizontal,tr(“colum 1″)); tableModel->setHeaderData(2,Qt::Horizontal,tr(“colum 2″)); //为QTableView添加model ui->tableView->setModel(tableModel); 为QTableView添加行: //清除所有行 //tableModel->removeRows(0,tableModel->rowCount()); for(int i=0;i<XXX;i++){ tableModel->setItem(i,0,new QStandardItem(“xxx”)); tableModel->setItem(i,1,new QStandardItem(“xxx”)); tableModel->setItem(i,2,new QStandardItem(“xxx”)); } //表格控件根据内容自动调整宽度和高度 ui->tableView->resizeColumnsToContents(); ui->tableView->resizeRowsToContents();