作者:kakaka2011
转自:http://blog.youkuaiyun.com/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.设置字体的属性:
- QFont listFont;
- listFont.setPixelSize(18);
- listFont.setBold(true);
- listFont.setWeight(50);
- listView->setFont(listFont);
6.QListView的添加和删除:
- //QListView通过QStringList提供值给QStringListModel,然后他通过setModel设置mode
- QStringListModel *model = new QStringListModel();
- QStringList data;
- data += "data1";
- data += "data2";
- data += "data3";
- model->setStringList(data);//mode添加data
- QListView *listView = new QListView(parent);
- listView->setModel(model);//设置mode
- 重新添加和删除时需要:
- data .clear();
- model->removeRows(0,model->rowCount());
- //给data重新赋值,然后重新添加data
- model->setStringList(data);
- //高亮显示某一行
- listView->setCurrentIndex(index);
- //首先遍历再显示
- QList<qstring>::Iterator it = data.begin(),end = data.end();
- int i = 0;
- for (; it != end; it++, i++)
- {
- if (*it == index.data())//找到,高亮显示
- {
- QModelIndex index = model->index(i);
- listView->setCurrentIndex(index);
- break;
- }
- }
- </qstring>
7.添加QSS到qss文件:
- //添加QSS到qss文件
- QFile qss(":css.qss");
- qss.open(QFile::ReadOnly);
- qApp->setStyleSheet(qss.readAll());
- qss.close();
不错的博客关于Qss的:http://blog.163.com/qimo601@126/blog/static/15822093201301144449315/
8.Qt 测试Item是否处于选中状态
- //Qt 测试Item是否处于选中状态
- if( option.state & QStyle::State_Selected )
- {
- qDebug() << "ListDelete::paint" << index.data();
- }
9.不错的讲解代理(委托的博客)http://qimo601.iteye.com/blog/1539147
10.实现在QTableView中绘制Pixmap图片 ,详细请看具体例子Qt-在表格(QTableView)中插入图片
- void MyItemDelegate::paint(QPainter * painter,
- const QStyleOptionViewItem & option,
- const QModelIndex & index) const
- {
- if(index.column()!=0){
- QItemDelegate::paint(painter,option,index);
- return;
- }
- const QAbstractItemModel * model=index.model();
- QVariant var=model->data(index,Qt::CheckStateRole);
- if(var.isNull()) var=false;
- const QPixmap & star=var.toBool()? favouritePixmap:notFavouritePixmap;
- int width=star.width();
- int height=star.height();
- QRect rect=option.rect;
- int x=rect.x()+rect.width()/2-width/2;
- int y=rect.y()+rect.height()/2-height/2;
- painter->drawPixmap(x,y,star);
- }
11.QListView的QSS的设置:
- QListView
- {
- color:black; //文字颜色
- selection-background-color:rgb(248,168,16);//被选中的item的背景色
- selection-color: red;//被选中的item的文字的颜色
- }
- 或者
- listView->setStyleSheet("color:black; selection-background-color:rgb(248,168,16);selection-color: red");
- }
12.委托重写paint()方法--为tableWidget的一行一列(1,1)中添加文字的icon和文字:如图:
- void TableWidgetDelete::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
- {
- if ((1 == index.row()) && (1 == index.column()))
- {
- QStyleOptionViewItem myOption = option;
- QPixmap pixmap = QPixmap(":/icon.bmp");
- int x = option.rect.x();
- int y = option.rect.y();
- int offset_x = pixmap.width() / 2;
- int offset_y = (option.rect.height() - pixmap.height()) / 2;
- //Qt Test Item is in a selected state
- if(option.state & QStyle::State_Selected )
- {
- const QPixmap &pixmap1 = pixmap;
- painter->fillRect(myOption.rect, myOption.palette.highlight());
- painter->fillRect(myOption.rect, QColor(248,168,16,255) );
- painter->drawPixmap(x + offset_x, y + offset_y, pixmap1);
- //Draw Text
- myOption.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
- myOption.rect = QRect(option.rect.x() + (4 * offset_x) , option.rect.y(), option.rect.width() - (4 * offset_x), option.rect.height());
- QStyledItemDelegate::paint(painter, myOption, index);
- } else {
- QStyledItemDelegate::paint(painter, myOption, index);
- }
- } else {
- QStyledItemDelegate::paint(painter, option, index);
- }
- }
13.listWidget用iconMode 显示的时候需要注意的问题:
- listWidget->item(i)->setSizeHint(QSize(136,153)); //listWidget选中后的大小
- listWidget->setIconSize(QSize(112,112)); //list的Icon的大小
- *image = image->scaled(QSize(112,112), Qt::KeepAspectRatio); //若icon太多可以通过scaled调整
- //
- QListView::item {
- border-top: 6;
- padding-top: 6;
- }
- QListView::item:selected{background-image:url(:/images.png);
- }
14.从目录中读取文件列表,并各个处理文件。
- //在目录中一个一个处理文件的读取方法
- QString path = "C:/file_list";
- QDir dir(path);
- QStringList list;
- if(dir.exists()){
- list = dir.entryList();
- }
- QString picture_path;
- QImage image;
- for ( int i = 0; i < list.size(); i++ )
- {
- picture_path = QString("%1%2%3").arg(path).arg("/").arg(list[i]);
- bool load_result = image.load(pic_path);
- if(!load_result){
- ......
- }else{
- ......
- }
- }
15.QFontMetrics类中的函数可以处理字符串 width ,每个字符的 width;字符串的 boundingRect().width() ,和每个字符的 boundingRect().width()。