Qt细节笔记

来源:互联网 发布:维棠flv下载软件 编辑:程序博客网 时间:2024/06/17 00:52

作者:kakaka2011

转自:http://blog.csdn.net/love_gaohz/article/details/14222559


1.在view视图中设置不可编辑:   listView->setEditTriggers(QAbstractItemView::NoEditTriggers);

2.QTableView改变被选择上的项颜色, qss样式语法:View->setStyleSheet("QListView::item:selected{background:red}");

3.对话框去掉右上角的问号: setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);

4.对话框加上最小化按钮: setWindowFlags(windowFlags()|Qt::WindowMinimizeButtonHint);

5.设置字体的属性:

[c++] view plaincopy
  1. QFont listFont;  
  2. listFont.setPixelSize(18);  
  3. listFont.setBold(true);  
  4. listFont.setWeight(50);  
  5. listView->setFont(listFont);  

6.QListView的添加和删除:

[c++] view plaincopy
  1.    
  2. //QListView通过QStringList提供值给QStringListModel,然后他通过setModel设置mode  
  3.  QStringListModel *model = new QStringListModel();  
  4.  QStringList data;  
  5.  data += "data1";  
  6.  data += "data2";  
  7.  data += "data3";  
  8.  model->setStringList(data);//mode添加data  
  9.  QListView *listView = new QListView(parent);  
  10.  listView->setModel(model);//设置mode  
  11.   
  12.  重新添加和删除时需要:  
  13.  data .clear();  
  14.  model->removeRows(0,model->rowCount());  
  15.  //给data重新赋值,然后重新添加data  
  16.  model->setStringList(data);  
  17.  //高亮显示某一行  
  18.  listView->setCurrentIndex(index);  
  19.  //首先遍历再显示  
  20.  QList<qstring>::Iterator it = data.begin(),end = data.end();  
  21.  int i = 0;  
  22.  for (; it != end; it++, i++)  
  23.  {  
  24.     if (*it == index.data())//找到,高亮显示  
  25.       {  
  26.         QModelIndex index = model->index(i);  
  27.         listView->setCurrentIndex(index);  
  28.         break;  
  29.        }  
  30.   }  
  31. </qstring>  

7.添加QSS到qss文件:

[c++] view plaincopy
  1.    
  2. //添加QSS到qss文件  
  3. QFile qss(":css.qss");  
  4. qss.open(QFile::ReadOnly);  
  5. qApp->setStyleSheet(qss.readAll());  
  6. qss.close();  

不错的博客关于Qss的:http://blog.163.com/qimo601@126/blog/static/15822093201301144449315/

8.Qt 测试Item是否处于选中状态

[c++] view plaincopy
  1.    
  2. //Qt 测试Item是否处于选中状态  
  3.         if( option.state & QStyle::State_Selected )  
  4.         {  
  5.             qDebug() << "ListDelete::paint" << index.data();  
  6.         }  

9.不错的讲解代理(委托的博客)http://qimo601.iteye.com/blog/1539147

10.实现在QTableView中绘制Pixmap图片 ,详细请看具体例子Qt-在表格(QTableView)中插入图片

[c++] view plaincopy
  1.    
  2. void MyItemDelegate::paint(QPainter * painter,    
  3.                            const QStyleOptionViewItem & option,    
  4.                            const QModelIndex & index) const    
  5. {    
  6.     if(index.column()!=0){    
  7.         QItemDelegate::paint(painter,option,index);    
  8.         return;    
  9.     }    
  10.     const QAbstractItemModel * model=index.model();    
  11.     QVariant var=model->data(index,Qt::CheckStateRole);    
  12.     if(var.isNull()) var=false;    
  13.     const QPixmap & star=var.toBool()? favouritePixmap:notFavouritePixmap;    
  14.     
  15.     int width=star.width();    
  16.     int height=star.height();    
  17.     QRect rect=option.rect;    
  18.     int x=rect.x()+rect.width()/2-width/2;    
  19.     int y=rect.y()+rect.height()/2-height/2;    
  20.     
  21.     painter->drawPixmap(x,y,star);    
  22. }    

11.QListView的QSS的设置:

[c++] view plaincopy
  1.    
  2. QListView  
  3. {  
  4.     color:black; //文字颜色  
  5.     selection-background-color:rgb(248,168,16);//被选中的item的背景色  
  6.     selection-color: red;//被选中的item的文字的颜色  
  7. }    
  8. 或者  
  9. listView->setStyleSheet("color:black; selection-background-color:rgb(248,168,16);selection-color: red");  
  10. }    

12.委托重写paint()方法--为tableWidget的一行一列(1,1)中添加文字的icon和文字:如图:

[c++] view plaincopy
  1.    
  2. void TableWidgetDelete::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const  
  3.  {  
  4.      if ((1 == index.row()) && (1 == index.column()))  
  5.      {  
  6.          QStyleOptionViewItem myOption = option;  
  7.          QPixmap pixmap = QPixmap(":/icon.bmp");  
  8.   
  9.          int x = option.rect.x();  
  10.          int y = option.rect.y();  
  11.   
  12.          int offset_x = pixmap.width() / 2;  
  13.          int offset_y = (option.rect.height() - pixmap.height()) / 2;  
  14.          //Qt Test Item is in a selected state  
  15.          if(option.state & QStyle::State_Selected )  
  16.          {  
  17.              const QPixmap &pixmap1 = pixmap;  
  18.              painter->fillRect(myOption.rect, myOption.palette.highlight());  
  19.              painter->fillRect(myOption.rect, QColor(248,168,16,255) );  
  20.              painter->drawPixmap(x + offset_x, y + offset_y, pixmap1);  
  21.              //Draw Text  
  22.              myOption.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;  
  23.              myOption.rect = QRect(option.rect.x() + (4 * offset_x) , option.rect.y(), option.rect.width() - (4 * offset_x), option.rect.height());  
  24.              QStyledItemDelegate::paint(painter, myOption, index);  
  25.          } else {  
  26.              QStyledItemDelegate::paint(painter, myOption, index);  
  27.          }  
  28.   
  29.      } else {  
  30.          QStyledItemDelegate::paint(painter, option, index);  
  31.      }  
  32.   
  33.  }  

13.listWidget用iconMode 显示的时候需要注意的问题:

[c++] view plaincopy
  1.    
  2. listWidget->item(i)->setSizeHint(QSize(136,153));   //listWidget选中后的大小  
  3. listWidget->setIconSize(QSize(112,112));            //list的Icon的大小  
  4. *image = image->scaled(QSize(112,112), Qt::KeepAspectRatio); //若icon太多可以通过scaled调整  
  5. //  
  6. QListView::item {  
  7.             border-top: 6;  
  8.             padding-top: 6;  
  9.         }  
  10.         QListView::item:selected{background-image:url(:/images.png);  
  11.         }  

14.从目录中读取文件列表,并各个处理文件。

[c++] view plaincopy
  1.    
  2. //在目录中一个一个处理文件的读取方法  
  3.     QString path = "C:/file_list";  
  4.     QDir dir(path);  
  5.     QStringList list;  
  6.   
  7.     if(dir.exists()){  
  8.        list  = dir.entryList();  
  9.     }  
  10.     QString picture_path;  
  11.     QImage image;  
  12.     for ( int i = 0; i < list.size(); i++ )  
  13.     {  
  14.         picture_path = QString("%1%2%3").arg(path).arg("/").arg(list[i]);  
  15.         bool load_result = image.load(pic_path);  
  16.         if(!load_result){  
  17.     ......  
  18.         }else{  
  19.     ......  
  20.         }  
  21.     }  

15.QFontMetrics类中的函数可以处理字符串 width ,每个字符的 width;字符串的 boundingRect().width() ,和每个字符的 boundingRect().width()。


0 0
原创粉丝点击