QComboBox 自定义显示下拉框

SZ阿辉 2013-04-15 04:52:19
各位大神,我用showPopup显示下拉框,但选定后不会回到键盘事件里面(我是用按键来显示的),
有什么方法让项目选定后回到showPopup这个函数后面。我试了下自定义显示的,用show()函数显示不出来,
下面是我自定义显示的代码:
QListView * userList;
userList = new QListView;
QStringList user;
user += "first";
user +="second";
QStringListModel *model = new QStringListModel(user);
userList->setModel(model); //useList是个QListView
m_pComboBox[2][5]->setModel( userList->model() );
m_pComboBox[2][5]->setView(userList);
m_pComboBox[2][5]->setEditable(true);
m_pComboBox[2][5]->show();
...全文
499 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SZ阿辉 2013-04-19
  • 打赏
  • 举报
回复
以下是我自己写的代码 但有问题: MainWindow.cpp文件 #include<QTreeWidget> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_index=0; m_pComboBox[0][0] = new QMyComboBox ; m_pComboBox[1][0] = new QMyComboBox ; ui->gridLayout->addWidget(m_pComboBox[0][0], 0, 1); ui->gridLayout->addWidget(m_pComboBox[1][0], 1, 1); m_pComboBox[0][0]->setFocus(); /* m_pComboBox[0][0]->addItem("one"); m_pComboBox[0][0]->addItem("two");*/ /* QTreeWidget* View = new QTreeWidget(m_pComboBox[0][0]); m_pComboBox[0][0]->setModel(View->model()); m_pComboBox[0][0]->setView(View);*/ } MainWindow::~MainWindow() { delete ui; } void MainWindow::keyPressEvent(QKeyEvent *k) { if(k->key() == Qt::Key_Up) { m_index--; if(m_index<0) m_index=1; } if(k->key() == Qt::Key_Down) { m_index++; if(m_index>1) m_index=0; } m_pComboBox[m_index][0]->setFocus(); // m_pComboBox[0][0]->showPopup(); } qmycombobox.cpp文件 #include "qmycombobox.h" #include<QModelIndex> #include<QAbstractItemView> #include<QListWidget> #include<QStringListModel> #include<QListView> #include<QDebug> ///////////////////////////////////////////////////// ////////////////////////////////////////////////////// QMyComboBox::QMyComboBox() { listview = new MyListView; } void QMyComboBox::setFocus() { return QComboBox::setFocus(); } void QMyComboBox::keyPressEvent(QKeyEvent *k) { if(k->key() == Qt::Key_Return) //modify by zh 2013.1.15 Key_Period->Key_Return { listview->Init(); qDebug()<<"1111"; this->clear(); this->setModel(listview->model() ); qDebug()<<"2222"; this->setView(listview); qDebug()<<"3333"; this->setEditable(true); this->view(); return QWidget::keyPressEvent(k); } else if((k->key() >= Qt::Key_Left) && (k->key() <= Qt::Key_Down)) { return QWidget::keyPressEvent(k); } else return; return QMyComboBox::keyPressEvent(k); } //end modify mylistview.cpp文件 #include "mylistview.h" #include<QStringListModel> #include<QDebug> MyListView::MyListView() { m_user.clear(); m_itemModel = new QStandardItemModel(0, 1, this); this->setAlternatingRowColors(true); this->setModel(m_itemModel); } void MyListView::Init() { qDebug()<<m_user.size(); m_itemModel->removeRows(0, m_user.size()); m_user.clear(); qDebug()<<m_user.size(); m_user += "first"; m_user +="second"; for(int i=0; i<m_user.size(); i++) { m_itemModel->insertRow(i); m_itemModel->setData(m_itemModel->index(i, 0), m_user.at(i)); } } 我第一次按回车键组合框里面有内容,但没有弹出下拉框,第二次按下回车键后程序异常终止,在执行this->setView(listview);中异常终止,各位大神帮我看看是什么情况,非常感谢
SZ阿辉 2013-04-16
  • 打赏
  • 举报
回复
引用 2 楼 qzroger 的回复:
引用 1 楼 cerci0304 的回复:选定后传参,构造一个按键事件应该比较容易吧能不能举个例子 谢谢
自定顶下
SZ阿辉 2013-04-15
  • 打赏
  • 举报
回复
引用 1 楼 cerci0304 的回复:
选定后传参,构造一个按键事件应该比较容易吧
能不能举个例子 谢谢
微雨流光 2013-04-15
  • 打赏
  • 举报
回复
选定后传参,构造一个按键事件应该比较容易吧

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧