Добрый день!
Написал наследника QComboBox
class SqlComboBox : public QComboBox
{
Q_OBJECT
public:
SqlComboBox(QWidget *parent = 0);
bool checkComboText();
int column;
signals:
void insertItemSignal(QString text);
void editingFinished();
protected:
void keyPressEvent(QKeyEvent *e);
};
SqlComboBox::SqlComboBox(QWidget *parent)
: QComboBox(parent)
{
}
void SqlComboBox::keyPressEvent(QKeyEvent *e)
{
if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
if (this->checkComboText())
emit editingFinished();
} else
QComboBox::keyPressEvent(e);
}
bool SqlComboBox::checkComboText()
{
if (!lineEdit()->text().isEmpty()) {
const int index =
findText(lineEdit()->text(), Qt::MatchFlags());
if (index == -1) {
const int answer =
QMessageBox::question(this, "Новый элемент",
"Добавить \"" +
lineEdit()->text() +
"\" в список?",
QMessageBox::Yes | QMessageBox::No);
if (answer == QMessageBox::Yes)
{
emit insertItemSignal(lineEdit()->text());
}
this->lineEdit()->setFocus();
this->lineEdit()->selectAll();
return false;
} else {
return true;
}
} else
return false;
return false;
}
if (!lineEdit()->text().isEmpty()) {
С этим разобрался. Спасибо!
Теперь проблема с этой строчкой
const int answer =
QMessageBox::question(this, "Новый элемент",
"Добавить \"" +
lineEdit()->text() +
"\" в список?",
QMessageBox::Yes | QMessageBox::No);
Q_OUTOFLINE_TEMPLATE QList<T>::~QList()
{
if (d && !d->ref.deref())
free(d);
}
QAbstractButton *QMessageBox::clickedButton() const
{
Q_D(const QMessageBox);
return d->clickedButton;
}
bool SqlComboBox::checkComboText()
{
if (!lineEdit()){
return false;
}
}
И ещё я бы для простоты сразу бы текст получил:bool SqlComboBox::checkComboText()
{
if (!lineEdit()){
return false;
}
}
И ещё я бы для простоты сразу бы текст получил:if (answer == QMessageBox::Yes)
{
emit insertItemSignal(text);
}
QWidget* GTDComboDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
SqlComboBox *box = new SqlComboBox(parent);
connect(box, SIGNAL(insertItemSignal(QString)),
this, SLOT(insertItemSlot(QString)));
connect(box, SIGNAL(editingFinished()),
this, SLOT(commitAndCloseEditor()));
return box;
}
помогите пожалуста
inline bool QObjectPrivate::isSignalConnected(uint signal_index) const
{
return signal_index >= sizeof(connectedSignals) * 8
|| qt_signal_spy_callback_set.signal_begin_callback
|| qt_signal_spy_callback_set.signal_end_callback
|| (connectedSignals[signal_index >> 5] & (1 << (signal_index & 0x1f)));
}
Самое интересное, что этот код работает если его использовать в простом виджете,
а в делегате не хочет работать...
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)