2011-06-13 85 views
3

我工作的应用程序GUI需要用户选择项目的组合框。当应用程序启动时,组合框将显示提示文本,如“请选择”,而不是显示组合框的第一项。我找不到在http://doc.qt.io/qt-5/qcombobox.html#currentText-prop中设置提示文本的方法。QComboBox - 如何在组合框上设置提示文本

提前致谢!

+1

我不确定Qt是否支持组合框中的提示横幅。但是,本机Windows控件确实如此。发送['CB_SETCUEBANNER'消息](http://msdn.microsoft.com/en-us/library/bb775897.aspx)。使用非本机小部件需要花费。 – 2011-06-13 08:38:44

+1

感谢您的回答。不幸的是我的应用程序在Linux操作系统上运行 – fucai1116 2011-06-13 08:51:09

回答

1

无法为QComboBox设置占位符文本。但是你可以解决这个问题。使用setEditText(const QString&)插槽设置文字。如果用户在组合框中选择一个项目,项目的文本将被设置。但是,如果用户选择文本,删除它并选择其他控制元素(组合框失去焦点),则文本将不再存在。通过继承QComboBox并重新实​​现focusOutEvent(...)可以解决这个问题,您可以在这里检查:if (currentIndex() == -1) setEditText(tr("Please select"));。并且不要忘记先致电QComboBox::focusOutEvent(...)

+1

谢谢Pie_Jesu。我已经更新了一下Pie_Jesu的想法。在一个用于设置提示横幅文本的函数中,我将包含提示横幅文本的项目添加到组合框的第一个索引。在焦点事件中,我删除组合框的第一项。有效! – fucai1116 2011-06-14 11:37:49

4

an elegant solution如果QComboBoxeditable

myQComboBox->lineEdit()->setPlaceHolderText("Please select"); 

QComboBox ES未editable没有QLineEdit S IN他们,所以这不会对那些工作。

+0

很久以前就有人问过这个问题,甚至连编辑都没有占位符。 – 2014-11-25 15:06:42

+0

@nwp使用您的建议阻止组合框执行下拉功能。如何解决这个问题? – 2016-06-06 13:27:35

+0

@XavierGeoffrey它不应该那样做,不适合我。您是否可能每次都在点击事件中运行代码,而不是在初始化时只运行一次? – nwp 2016-06-06 15:16:53

相关问题