Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何设置QComboBox宽度以适合最大的项目?_C++_User Interface_Qt_Qcombobox - Fatal编程技术网

C++ 如何设置QComboBox宽度以适合最大的项目?

C++ 如何设置QComboBox宽度以适合最大的项目?,c++,user-interface,qt,qcombobox,C++,User Interface,Qt,Qcombobox,我有一个QComboBox,我用QString填充它: comboBox->addItem(someString); 启动GUI应用程序时,QComboBox的宽度始终为70,即使最小的项要大得多。如何动态地将QComboBox的宽度设置为组合框中最大的QString 编辑: 经过进一步测试,我找到了以下解决方案: // get the minimum width that fits the largest item. int width = ui->sieveSizeComboB

我有一个
QComboBox
,我用
QString
填充它:

comboBox->addItem(someString);
启动GUI应用程序时,
QComboBox
的宽度始终为70,即使最小的项要大得多。如何动态地将
QComboBox
的宽度设置为
组合框中最大的
QString

编辑:

经过进一步测试,我找到了以下解决方案:

// get the minimum width that fits the largest item.
int width = ui->sieveSizeComboBox->minimumSizeHint().width();
// set the ComboBoxe to that width.
ui->sieveSizeComboBox->setMinimumWidth(width);
根据默认的
SizeAdjustPolicy
AdjustToContentsOnFirstShow
,那么您可能正在显示它,然后填充它

在显示之前先填充它,或者尝试将策略设置为
QComboBox::AdjustToContent

编辑:

顺便说一句,我假设您的
QComboBox
有一个合适的布局,例如
QHBoxLayout
,因此实际使用的是大小提示/策略。

Qt(4.6)在线文档对
QComboBox

enum    SizeAdjustPolicy  { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon }
我建议

  • 确保实际使用了
    SizedJustPolicy

  • 将枚举设置为
    AdjustToContent
    。正如您提到的
    .ui
    文件,我建议在Designer中这样做。通常情况下,构造函数中不应该有任何关于在Designer中执行的操作的花哨内容


  • 我正在寻找一种解决方案,只改变组合框下拉菜单的大小,以适应最大的文本,而不改变组合框本身的大小

    你的建议(@Linoliumz)确实帮助我找到了解决办法。这是: 假设您有一个名为cb的组合框:

    C++:

    PyQT:

    width = cb.minimumSizeHint().width()
    cb.view().setMinimumWidth(width)
    

    谢谢,是的,QComboBox在QHBox布局中。我尝试修改SizedJustPolicy,但没有效果,我还尝试在调用ui->setupUi(这一步)之前填充QComboBox;但程序崩溃了。QComboBox是使用Qt Creator创建的,我不知道在显示之前是否可以填充它。您在combobox上设置了什么作为
    SizePolicy
    ?在调用ui->setupUi(此)之前尝试填充combo会导致segfault,因为QComboBox对象还没有被实例化。将AdjustPolicy设置为QComboBox::AdjustToContent。请让我知道如何在Qt 3.3.6上执行此操作?此外,如果您希望保持组合框的大小不变,但要扩展下拉宽度以适合最长的字符串,可以设置视图的最小宽度:
    ui->sieveSizeComboBox->view()->setMinimumWidth(宽度)谢谢你的评论,这正是我需要的。
    
    width = cb.minimumSizeHint().width()
    cb.view().setMinimumWidth(width)