• 16461阅读
  • 8回复

QComboBox的下拉菜单怎么设置~~ [复制链接]

上一主题 下一主题
离线luwenqi88
 

只看楼主 倒序阅读 楼主  发表于: 2010-09-14
请问,我用QComboBox设置好以后,下拉菜单如果有哪项太多的话就会出现诸如‘1111。。。111’当中被省略的情况出现。。。有没有什么好的办法解决啊~~能把这个下拉菜单展开。

QComboBox  *combo=new QComboBox
combo->view()->setFixedWidth(300);

这条语句已经用过了,而且当中加入view()的时候QT creator就会报错。。


Qt~~Qute Girl
离线beaujolais
只看该作者 1楼 发表于: 2010-09-14
   方法一:设置comboBox的项的最小长度
    ui->comboBox->setMinimumContentsLength(100);
    ui->comboBox->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
    
方法二:设置ComboBox项的自适应策略为按内容
    ui->comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);

QComboBox项的适应策略默认为QComboBox::AdjustToContentsOnFirstShow

估计是你比较长的那一项不是currentIndex吧~~~
离线dbzhang800

只看该作者 2楼 发表于: 2010-09-14
最关键的部分没给,报什么错??(不要说你的代码中确实和你贴代码的一样,语句后没有分号。)


完整代码如下
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
Copyright (C) 2010 dbzhang800
All rights reserved.
'''
import sys
from PySide.QtGui import *
app = QApplication(sys.argv)
w = QComboBox()
w.setFixedWidth(100)
w.addItems(['1'*40,  '2'*60,  '3'*90])
w.view().setFixedWidth(400)
w.show()
sys.exit(app.exec_())



离线luwenqi88

只看该作者 3楼 发表于: 2010-09-15
回 1楼(beaujolais) 的帖子
非常感谢您的回复,我的意思是下拉菜单的第一行和下面的宽度不一样,您的函数用上去以后就变成第一行和下拉菜单的宽度都一样了
Qt~~Qute Girl
离线luwenqi88

只看该作者 4楼 发表于: 2010-09-15
回 2楼(dbzhang800) 的帖子
非常感谢您的回复。。我不是用UI做的而是直接用CPP写的
QApplication app(argc,argv);
window -> setWindowTitle("QComboBox");
window -> resize(100,100);
QComboBox *combo=new QComboBox;
combo -> setEditable(true);
combo->insertItem(0,  "111111");
combo->insertItem(1,  "2222222222222");

combo->setFixedWidth(60);//用了这个函数的话只能设置长度并不能使下拉菜单宽度和初始comboBox的宽度不一样,combo->view()->setFixedWidth(300);改成这个就会报错。。。用一楼大哥给的函数那就会设置成自动适应到最长的那条或者自动适应到最短的那条了。。9

QLabel *label = new QLabel("QComboBox");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(combo);
QObject::connect(combo, SIGNAL(activated(const QString &)),label, SLOT(setText(const QString &)));
window->setLayout(layout);
window->show();
return app.exec();



Qt~~Qute Girl
离线dbzhang800

只看该作者 5楼 发表于: 2010-09-15
Re:回 2楼(dbzhang800) 的帖子
引用第4楼luwenqi88于2010-09-15 09:37发表的 回 2楼(dbzhang800) 的帖子 :
非常感谢您的回复。。我不是用UI做的而是直接用CPP写的
QApplication app(argc,argv);
window -> setWindowTitle("QComboBox");
window -> resize(100,100);
QComboBox *combo=new QComboBox;
.......


还是我前面说的,把具体出错信息贴出来。

另外,我也没用UI,而直接用代码写得。(我前面贴的是一个完整的可直接运行的程序,只不过是python的)
离线luwenqi88

只看该作者 6楼 发表于: 2010-09-15
回 5楼(dbzhang800) 的帖子
用了combo->view()->setFixedWidth(300);就是这个了,大哥。。我是新手,PYTHON真不太懂TAT
built issue是:
invalid use of incomplete type 'struct QAbstractItemView'
forward declaration of 'struct QAbstractItemView'

compile output是
main.cpp: In function 'int qMain(int, char**)':
main.cpp:35: error: invalid use of incomplete type 'struct QAbstractItemView'
..\QT\qt\include/QtGui/../../src/gui/itemviews/qabstractitemdelegate.h:59: error: forward declaration of 'struct QAbstractItemView'
Qt~~Qute Girl
离线dbzhang800

只看该作者 7楼 发表于: 2010-09-15
Re:回 5楼(dbzhang800) 的帖子
引用第6楼luwenqi88于2010-09-15 11:22发表的 回 5楼(dbzhang800) 的帖子 :
用了combo->view()->setFixedWidth(300);就是这个了,大哥。。我是新手,PYTHON真不太懂TAT
built issue是:
invalid use of incomplete type 'struct QAbstractItemView'
forward declaration of 'struct QAbstractItemView'
.......

我没让你去懂python(不过不懂python应该也能看个大概),
那个程序只是演示一下:这么用肯定没问题。

你如果早贴出错误信息,也就没这么多问题了:包含相应的头文件先 QAbstractItemView
离线luwenqi88

只看该作者 8楼 发表于: 2010-09-15
回 7楼(dbzhang800) 的帖子
确实。。刚刚加上头文件QAbstractItemView就解决了TAT~~谢谢大哥,这里果然都是高手,受益匪浅那~~
Qt~~Qute Girl
快速回复
限100 字节
 
上一个 下一个