someone can help me?
someone can help me?
If you mean something like this, it really shouldn't bee too hard since QComboBox allows you to use your own model (and view, which you probably don't event need..). You need to make the combobox non-editable and make the model to return Qt::ItemIsUserCheckable for all indexes QAbstractItemModel::flags(). I think all you need to do by hand is the filling of the line edit of the combobox.
Edit: Oh, and about the model. In my opinion, QStandardItemModel could be a good choice to start with, as QStringListModel doesn't support storing of check states..
J-P Nurmi
qiank128 (24th August 2006)
Can you give me a example?
or some code
this is my code , but it doesnt work.
// CheckComboBox.h
#ifndef CHECKCOMBOBOX_H
#define CHECKCOMBOBOX_H
#include <QComboBox.h>
#include <QStandardItemModel>
class CheckModel : public QStandardItemModel
{
public:
CheckModel();
Qt::ItemFlags flags(const QModelIndex & index);
};
class CheckComboBox : public QComboBox
{
public:
CheckComboBox( QWidget * parent = 0 );
private:
};
#endif
// CheckComboBox.cpp
#include "CheckComboBox.h"
CheckModel::CheckModel() : QStandardItemModel()
{
}
Qt::ItemFlags CheckModel::flags(const QModelIndex & index)
{
return Qt::ItemIsUserCheckable;
}
CheckComboBox::CheckComboBox (QWidget * parent) : QComboBox(parent)
{
setEditable(false);
CheckModel *pModel = new CheckModel();
this->setModel(pModel);
}
Last edited by qiank128; 24th August 2006 at 12:54.
At least you need to insert a single column to your model:
Qt Code:
{ insertColumn(0); // important }To copy to clipboard, switch view to plain text mode
You might also want to return a bit more flags (the base class implementation returns a combination of ItemIsEnabled and ItemIsSelectable):
Qt Code:
{ };To copy to clipboard, switch view to plain text mode
Also, when adding your items, you might need to initialize the check state:
Qt Code:
comboBox->setItemData(idx, Qt::Unchecked, Qt::CheckStateRole);To copy to clipboard, switch view to plain text mode
J-P Nurmi
qiank128 (24th August 2006)
how to capture the QComboBox popup view clicked event?
CheckComboBox::CheckComboBox (QWidget * parent) : QComboBox(parent)
{
setEditable(false);
CheckModel *pModel = new CheckModel();
this->setModel(pModel);
this->setMinimumWidth(100);
// why this signal(clicked) can not be capture?
connect((const QObject *)QComboBox::view(), SIGNAL(clicked ( const QModelIndex & )), this, SLOT(_itemCB(const QModelIndex &)));
}
void CheckComboBox::_itemCB(const QModelIndex &index)
{
QMessageBox::warning( this, "clicked", "clicked" );
}
Last edited by qiank128; 24th August 2006 at 14:39.
Ahh, sorry. I didn't think of it that the view should remain visible when (un)checking items, or is that what you want?
Seems to be a bit complicated. At least much more complicated than I thought..
QComboBox installs an event filter on the view, which prevents the view from behaving normally in some situations. For example it filters all mouse release events and therefore the view never gets them and neither emits any clicked() signal..
I did a small example for you. The implementation is in a single file because I was so lazy..All you have left is filling the combo's line edit correctly.
J-P Nurmi
// i have a mistake,
/*******why i can not capture the "MouseButtonRelease" event?
/*******can you?
/*******but i can use "MouseButtonPress" replace it,
/*******how to let the popup view always show , when i checked an item?
// view->installEventFilter(view); // <--- !!!
// view->viewport()->installEventFilter(view); // <--- !!!
// must behind the setView(view);
setEditable(false);
CheckModel* model = new CheckModel(this);
CheckView* view = new CheckView(this);
setModel(model);
setView(view);
// these 2 lines below are important and must be
// applied AFTER QComboBox::setView() because
// QComboBox installs it's own filter on the view
view->installEventFilter(view); // <--- !!!
view->viewport()->installEventFilter(view); // <--- !!!
Last edited by qiank128; 25th August 2006 at 03:39.
The attached file is CheckComboBox source code.
thanks jpn
Hi,
Just found this code by googling around a bit for a Qt combobox with check box support. I've been trying it and seems to work fine. I've just added the following override to CheckView, so now it also works properly when space bar is used to check / uncheck the items inside the dropped list:
Qt Code:
{ if (event->key() == Qt::Key_Space) { emit clicked(currentIndex()); } }To copy to clipboard, switch view to plain text mode
Just wanted to share it, in case someone finds it useful...
Anyway, thanks for the code to the original author.
Best regards,
Eduard
Bookmarks